kernelbase: Use nameless unions/structs for loader data.
[wine.git] / dlls / vbscript / tests / api.vbs
blob842cce33f83b17cf9bd031e73b3a0b6cff11f9d9
1 ' Copyright 2011 Jacek Caban for CodeWeavers
3 ' This library is free software; you can redistribute it and/or
4 ' modify it under the terms of the GNU Lesser General Public
5 ' License as published by the Free Software Foundation; either
6 ' version 2.1 of the License, or (at your option) any later version.
8 ' This library is distributed in the hope that it will be useful,
9 ' but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 ' Lesser General Public License for more details.
13 ' You should have received a copy of the GNU Lesser General Public
14 ' License along with this library; if not, write to the Free Software
15 ' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 Option Explicit
20 Dim x
22 Class EmptyClass
23 End Class
25 Call ok(vbSunday = 1, "vbSunday = " & vbSunday)
26 Call ok(getVT(vbSunday) = "VT_I2", "getVT(vbSunday) = " & getVT(vbSunday))
27 Call ok(vbMonday = 2, "vbMonday = " & vbMonday)
28 Call ok(getVT(vbMonday) = "VT_I2", "getVT(vbMonday) = " & getVT(vbMonday))
29 Call ok(vbTuesday = 3, "vbTuesday = " & vbTuesday)
30 Call ok(getVT(vbTuesday) = "VT_I2", "getVT(vbTuesday) = " & getVT(vbTuesday))
31 Call ok(vbWednesday = 4, "vbWednesday = " & vbWednesday)
32 Call ok(getVT(vbWednesday) = "VT_I2", "getVT(vbWednesday) = " & getVT(vbWednesday))
33 Call ok(vbThursday = 5, "vbThursday = " & vbThursday)
34 Call ok(getVT(vbThursday) = "VT_I2", "getVT(vbThursday) = " & getVT(vbThursday))
35 Call ok(vbFriday = 6, "vbFriday = " & vbFriday)
36 Call ok(getVT(vbFriday) = "VT_I2", "getVT(vbFriday) = " & getVT(vbFriday))
37 Call ok(vbSaturday = 7, "vbSaturday = " & vbSaturday)
38 Call ok(getVT(vbSaturday) = "VT_I2", "getVT(vbSaturday) = " & getVT(vbSaturday))
40 Sub TestConstant(name, val, exval)
41 Call ok(val = exval, name & " = " & val & " expected " & exval)
42 Call ok(getVT(val) = "VT_I2*", "getVT(" & name & ") = " & getVT(val))
43 End Sub
45 Sub TestConstantI4(name, val, exval)
46 Call ok(val = exval, name & " = " & val & " expected " & exval)
47 Call ok(getVT(val) = "VT_I4*", "getVT(" & name & ") = " & getVT(val))
48 End Sub
50 Sub TestConstantBSTR(name, val, exval)
51 Call ok(val = exval, name & " = " & val & " expected " & exval)
52 Call ok(getVT(val) = "VT_BSTR*", "getVT(" & name & ") = " & getVT(val))
53 End Sub
55 TestConstant "vbEmpty", vbEmpty, 0
56 TestConstant "vbNull", vbNull, 1
57 TestConstant "vbLong", vbLong, 3
58 TestConstant "vbSingle", vbSingle, 4
59 TestConstant "vbDouble", vbDouble, 5
60 TestConstant "vbCurrency", vbCurrency, 6
61 TestConstant "vbDate", vbDate, 7
62 TestConstant "vbString", vbString, 8
63 TestConstant "vbObject", vbObject, 9
64 TestConstant "vbError", vbError, 10
65 TestConstant "vbBoolean", vbBoolean, 11
66 TestConstant "vbVariant", vbVariant, 12
67 TestConstant "vbDataObject", vbDataObject, 13
68 TestConstant "vbDecimal", vbDecimal, 14
69 TestConstant "vbByte", vbByte, 17
70 TestConstant "vbArray", vbArray, 8192
71 TestConstant "vbCritical", vbCritical, 16
72 TestConstant "vbQuestion", vbQuestion, 32
73 TestConstant "vbExclamation", vbExclamation, 48
74 TestConstant "vbInformation", vbInformation, 64
75 TestConstant "vbDefaultButton1", vbDefaultButton1, 0
76 TestConstant "vbDefaultButton2", vbDefaultButton2, 256
77 TestConstant "vbDefaultButton3", vbDefaultButton3, 512
78 TestConstant "vbDefaultButton4", vbDefaultButton4, 768
79 TestConstant "vbApplicationModal", vbApplicationModal, 0
80 TestConstant "vbSystemModal", vbSystemModal, 4096
81 TestConstant "vbUseSystem", vbUseSystem, 0
82 TestConstant "vbUseSystemDayOfWeek", vbUseSystemDayOfWeek, 0
83 TestConstant "vbFirstJan1", vbFirstJan1, 1
84 TestConstant "vbFirstFourDays", vbFirstFourDays, 2
85 TestConstant "vbFirstFullWeek", vbFirstFullWeek, 3
86 TestConstant "vbTrue", vbTrue, -1
87 TestConstant "vbFalse", vbFalse, 0
88 TestConstantI4 "vbMsgBoxHelpButton", vbMsgBoxHelpButton, 16384
89 TestConstantI4 "vbMsgBoxSetForeground", vbMsgBoxSetForeground, 65536
90 TestConstantI4 "vbMsgBoxRight", vbMsgBoxRight, 524288
91 TestConstantI4 "vbMsgBoxRtlReading", vbMsgBoxRtlReading, 1048576
92 TestConstant "vbUseDefault", vbUseDefault, -2
93 TestConstant "vbBinaryCompare", vbBinaryCompare, 0
94 TestConstant "vbTextCompare", vbTextCompare, 1
95 TestConstant "vbDatabaseCompare", vbDatabaseCompare, 2
96 TestConstant "vbGeneralDate", vbGeneralDate, 0
97 TestConstant "vbLongDate", vbLongDate, 1
98 TestConstant "vbShortDate", vbShortDate, 2
99 TestConstant "vbLongTime", vbLongTime, 3
100 TestConstant "vbShortTime", vbShortTime, 4
101 TestConstantI4 "vbObjectError", vbObjectError, &h80040000&
102 TestConstantI4 "vbBlack", vbBlack, 0
103 TestConstantI4 "vbBlue", vbBlue, &hff0000&
104 TestConstantI4 "vbCyan", vbCyan, &hffff00&
105 TestConstantI4 "vbGreen", vbGreen, &h00ff00&
106 TestConstantI4 "vbMagenta", vbMagenta, &hff00ff&
107 TestConstantI4 "vbRed", vbRed, &h0000ff&
108 TestConstantI4 "vbWhite", vbWhite, &hffffff&
109 TestConstantI4 "vbYellow", vbYellow, &h00ffff&
110 TestConstantBSTR "vbCr", vbCr, Chr(13)
111 TestConstantBSTR "vbCrLf", vbCrLf, Chr(13)&Chr(10)
112 TestConstantBSTR "vbNewLine", vbNewLine, Chr(13)&Chr(10)
113 TestConstantBSTR "vbFormFeed", vbFormFeed, Chr(12)
114 TestConstantBSTR "vbLf", vbLf, Chr(10)
115 TestConstantBSTR "vbNullChar", vbNullChar, Chr(0)
116 TestConstantBSTR "vbNullString", vbNullString, ""
117 TestConstantBSTR "vbTab", vbTab, chr(9)
118 TestConstantBSTR "vbVerticalTab", vbVerticalTab, chr(11)
120 Sub TestCStr(arg, exval)
121 dim x
122 x = CStr(arg)
123 Call ok(getVT(x) = "VT_BSTR*", "getVT(x) = " & getVT(x))
124 Call ok(x = exval, "CStr(" & arg & ") = " & x)
125 End Sub
127 TestCStr "test", "test"
128 TestCStr 3, "3"
129 if isEnglishLang then TestCStr 3.5, "3.5"
130 if isEnglishLang then TestCStr true, "True"
132 sub testCStrError()
133 on error resume next
134 Error.clear()
135 CStr(null)
136 call ok(Err.number = 94, "Err.number = " & Err.number)
137 if isEnglishLang then call ok(Err.source = "Microsoft VBScript runtime error", "Err.source = " & Err.source)
138 if isEnglishLang then call ok(Err.description = "Invalid use of Null", "Err.description = " & Err.description)
139 end sub
140 call testCStrError()
142 Call ok(getVT(Chr(120)) = "VT_BSTR", "getVT(Chr(120)) = " & getVT(Chr(120)))
143 Call ok(getVT(Chr(255)) = "VT_BSTR", "getVT(Chr(255)) = " & getVT(Chr(255)))
144 Call ok(Chr(120) = "x", "Chr(120) = " & Chr(120))
145 Call ok(Chr(0) <> "", "Chr(0) = """"")
146 Call ok(Chr(120.5) = "x", "Chr(120.5) = " & Chr(120.5))
147 Call ok(Chr(119.5) = "x", "Chr(119.5) = " & Chr(119.5))
148 Call ok(Chr("120") = "x", "Chr(""120"") = " & Chr("120"))
150 sub testChrError
151 on error resume next
153 if MaxCharSize = 1 then
154 call Err.clear()
155 call Chr(-1)
156 call ok(Err.number = 5, "Err.number = " & Err.number)
157 if isEnglishLang then call ok(Err.description = "Invalid procedure call or argument", "Err.description = " & Err.description)
159 call Err.clear()
160 call Chr(256)
161 call ok(Err.number = 5, "Err.number = " & Err.number)
162 else
163 call Err.clear()
164 call Chr(-1)
165 call ok(Err.number = 0, "Err.number = " & Err.number)
166 call Err.clear()
167 call Chr(256)
168 call ok(Err.number = 0, "Err.number = " & Err.number)
169 end if
171 call Err.clear()
172 call Chr(65536)
173 call ok(Err.number = 5, "Err.number = " & Err.number)
175 call Err.clear()
176 call Chr(-32769)
177 call ok(Err.number = 5, "Err.number = " & Err.number)
178 end sub
180 call testChrError
182 Call ok(isObject(new EmptyClass), "isObject(new EmptyClass) is not true?")
183 Set x = new EmptyClass
184 Call ok(isObject(x), "isObject(x) is not true?")
185 Call ok(isObject(Nothing), "isObject(Nothing) is not true?")
186 Call ok(not isObject(true), "isObject(true) is true?")
187 Call ok(not isObject(4), "isObject(4) is true?")
188 Call ok(not isObject("x"), "isObject(""x"") is true?")
189 Call ok(not isObject(Null), "isObject(Null) is true?")
191 Call ok(not isDate(new EmptyClass), "isDate(new EmptyClass) is true?")
192 Set x = new EmptyClass
193 Call ok(not isDate(x), "isDate(x) is true?")
194 x = CDate(1)
195 Call ok(isDate(x), "isDate(x) is not true?")
196 Call ok(isDate(#1/1/2000#), "isDate(#1/1/2000#) is not true?")
197 Call ok(not isDate(empty), "isDate(empty) is true?")
198 Call ok(not isDate(Nothing), "isDate(Nothing) is true?")
199 Call ok(not isDate(true), "isDate(true) is true?")
200 Call ok(not isDate(4), "isDate(4) is true?")
201 Call ok(not isDate("4"), "isDate(""4"") is true?")
202 Call ok(not isDate("x"), "isDate(""x"") is true?")
203 Call ok(not isDate(Null), "isDate(Null) is true?")
205 Call ok(not isEmpty(new EmptyClass), "isEmpty(new EmptyClass) is true?")
206 Set x = new EmptyClass
207 Call ok(not isEmpty(x), "isEmpty(x) is true?")
208 x = empty
209 Call ok(isEmpty(x), "isEmpty(x) is not true?")
210 Call ok(isEmpty(empty), "isEmpty(empty) is not true?")
211 Call ok(not isEmpty(Nothing), "isEmpty(Nothing) is not true?")
212 Call ok(not isEmpty(true), "isEmpty(true) is true?")
213 Call ok(not isEmpty(4), "isEmpty(4) is true?")
214 Call ok(not isEmpty("x"), "isEmpty(""x"") is true?")
215 Call ok(not isEmpty(Null), "isEmpty(Null) is true?")
217 Call ok(not isNull(new EmptyClass), "isNull(new EmptyClass) is true?")
218 Set x = new EmptyClass
219 Call ok(not isNull(x), "isNull(x) is true?")
220 x = null
221 Call ok(isNull(x), "isNull(x) is not true?")
222 Call ok(not isNull(empty), "isNull(empty) is true?")
223 Call ok(not isNull(Nothing), "isNull(Nothing) is true?")
224 Call ok(not isNull(true), "isNull(true) is true?")
225 Call ok(not isNull(4), "isNull(4) is true?")
226 Call ok(not isNull("x"), "isNull(""x"") is true?")
227 Call ok(isNull(Null), "isNull(Null) is not true?")
229 Call ok(isNumeric(Empty), "isNumeric(empty) is not true?")
230 Call ok(not isNumeric(Null), "isNumeric(Null) is not true?")
231 Call ok(isNumeric(32767), "isNumeric(32767) is true?")
232 Call ok(isNumeric(32768), "isNumeric(32768) is true?")
233 Call ok(isNumeric(CSng(3242.4)), "isNumeric(CSng(3242.4)) is true?")
234 Call ok(isNumeric(32768.4), "isNumeric(32768.4) is true?")
235 Call ok(isNumeric(CCur(32768.4)), "isNumeric(CCur(32768.4)) is true?")
236 Call ok(isNumeric("44"), "isNumeric(""44"") is true?")
237 Call ok(not isNumeric("rwrf"), "isNumeric(""rwrf"") is not true?")
238 Call ok(not isNumeric(Nothing), "isNumeric(Nothing) is not true?")
239 Call ok(not isNumeric(New EmptyClass), "isNumeric(New EmptyClass) is not true?")
240 Call ok(isNumeric(true), "isNumeric(true) is true?")
241 Call ok(isNumeric(CByte(32)), "isNumeric(CByte(32)) is true?")
242 Dim arr(2)
243 arr(0) = 2
244 arr(1) = 3
245 Call ok(not isNumeric(arr), "isNumeric(arr) is not true?")
247 Call ok(isArray(arr), "isArray(arr) is not true?")
248 x = Array()
249 Call ok(isArray(arr), "isArray(Array()) is not true?")
250 Call ok(not isArray(Empty), "isArray(empty) is true?")
251 Call ok(not isArray(Null), "isArray(Null) is true?")
252 Call ok(not isArray(42), "isArray(42) is true?")
253 Call ok(not isArray(CSng(3242.4)), "isArray(CSng(3242.4)) is true?")
254 Call ok(not isArray(CCur(32768.4)), "isArray(CCur(32768.4)) is true?")
255 Call ok(not isArray("44"), "isArray(""44"") is true?")
256 Call ok(not isArray("rwrf"), "isArray(""rwrf"") is true?")
257 Call ok(not isArray(Nothing), "isArray(Nothing) is true?")
258 Call ok(not isArray(New EmptyClass), "isArray(New EmptyClass) is true?")
259 Call ok(not isArray(true), "isArray(true) is true?")
260 Call ok(not isArray(CByte(32)), "isArray(CByte(32)) is true?")
262 Call ok(getVT(Array()) = "VT_ARRAY|VT_VARIANT", "getVT(Array()) = " & getVT(Array()))
263 x = Array("a1", 2, "a3")
264 Call ok(getVT(x) = "VT_ARRAY|VT_VARIANT*", "getVT(array) = " & getVT(x))
265 Call ok(getVT(x(0)) = "VT_BSTR*", "getVT(array(0)) = " & getVT(x(0)))
266 Call ok(x(0) = "a1", "array(0) = " & x(0))
267 Call ok(getVT(x(1)) = "VT_I2*", "getVT(array(1)) = " & getVT(x(1)))
268 Call ok(x(1) = 2, "array(1) = " & x(1))
269 Call ok(getVT(x(2)) = "VT_BSTR*", "getVT(array(2)) = " & getVT(x(2)))
270 Call ok(x(2) = "a3", "array(2) = " & x(2))
272 Dim new_array
273 new_array = x
274 x(0) = "new value"
275 Call ok(new_array(0) = "a1", "new_array(0) = " & new_array(0))
277 Call ok(getVT(UBound(x)) = "VT_I4", "getVT(UBound(x)) = " & getVT(UBound(x)))
278 Call ok(UBound(x) = 2, "UBound(x) = " & UBound(x))
279 Call ok(getVT(UBound(x, 1)) = "VT_I4", "getVT(UBound(x, 1)) = " & getVT(UBound(x, 1)))
280 Call ok(UBound(x, 1) = 2, "UBound(x) = " & UBound(x, 1))
282 x = Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33)
283 ok x(1) = 2, "x(1) = " & x(1)
284 ok x(32) = 33, "x(32) = " & x(32)
285 ok ubound(x) = 32, "ubound(x) = " & ubound(x)
287 Dim arr2(2, 4)
288 Call ok(UBound(arr2) = 2, "UBound(x) = " & UBound(x))
289 Call ok(UBound(arr2, 1) = 2, "UBound(x) = " & UBound(x))
290 Call ok(UBound(arr2, 2) = 4, "UBound(x) = " & UBound(x))
291 Call ok(Lbound(arr2) = 0, "Lbound(x) = " & Lbound(x))
292 Call ok(Lbound(arr2, 1) = 0, "Lbound(x) = " & Lbound(x))
293 Call ok(Lbound(arr2, 2) = 0, "Lbound(x) = " & Lbound(x))
295 sub testLBoundError()
296 on error resume next
297 call Err.clear()
298 call LBound()
299 call ok(Err.number = 450, "Err.number = " & Err.number)
300 call Err.clear()
301 call LBound(Empty)
302 call ok(Err.number = 13, "Err.number = " & Err.number)
303 call Err.clear()
304 call LBound(Null)
305 call ok(Err.number = 13, "Err.number = " & Err.number)
306 call Err.clear()
307 call LBound(arr, 1, 2)
308 call ok(Err.number = 450, "Err.number = " & Err.number)
309 if isEnglishLang then call ok(Err.description = "Wrong number of arguments or invalid property assignment", _
310 "Err.description = " & Err.description)
311 end sub
313 sub testUBoundError()
314 on error resume next
315 call Err.clear()
316 call UBound()
317 call ok(Err.number = 450, "Err.number = " & Err.number)
318 call Err.clear()
319 call UBound(Empty)
320 call ok(Err.number = 13, "Err.number = " & Err.number)
321 call Err.clear()
322 call UBound(Null)
323 call ok(Err.number = 13, "Err.number = " & Err.number)
324 call Err.clear()
325 call UBound(arr, 1, 2)
326 call ok(Err.number = 450, "Err.number = " & Err.number)
327 if isEnglishLang then call ok(Err.description = "Wrong number of arguments or invalid property assignment", _
328 "Err.description = " & Err.description)
329 end sub
331 call testLBoundError()
332 call testUBoundError()
334 Dim newObject
335 Set newObject = New ValClass
336 newObject.myval = 1
337 Call ok(isNumeric(newObject), "isNumeric(newObject) is true?")
338 newObject.myval = "test"
339 Call ok(not isNumeric(newObject), "isNumeric(newObject) is not true?")
341 Call ok(getVT(err) = "VT_DISPATCH", "getVT(err) = " & getVT(err))
343 Sub TestHex(x, ex)
344 Call ok(hex(x) = ex, "hex(" & x & ") = " & hex(x) & " expected " & ex)
345 End Sub
347 TestHex 0, "0"
348 TestHex 6, "6"
349 TestHex 16, "10"
350 TestHex &hdeadbeef&, "DEADBEEF"
351 TestHex -1, "FFFF"
352 TestHex -16, "FFF0"
353 TestHex -934859845, "C8472BBB"
354 TestHex empty, "0"
355 TestHex "17", "11"
356 TestHex 228.5, "E4"
357 TestHex -32767, "8001"
358 TestHex -32768, "FFFF8000"
359 TestHex 2147483647.49, "7FFFFFFF"
360 TestHex -2147483647.5, "80000000"
361 newObject.myval = 30.5
362 TestHex newObject, "1E"
363 newObject.myval = "27"
364 TestHex newObject, "1B"
367 Call ok(getVT(hex(null)) = "VT_NULL", "getVT(hex(null)) = " & getVT(hex(null)))
368 Call ok(getVT(hex(empty)) = "VT_BSTR", "getVT(hex(empty)) = " & getVT(hex(empty)))
370 Sub TestHexError(num, err_num)
371 On Error Resume Next
372 Call Hex(num)
373 Call ok(Err.number = err_num, "Hex(" & num & ") returns error number " & Err.number & " expected " & err_num)
374 End Sub
376 TestHexError 2147483647.5, 6
377 TestHexError 2147483648.51, 6
378 TestHexError "test", 13
380 Sub TestOct(x, ex, res_type)
381 Call ok(Oct(x) = ex, "Oct(" & x & ") = " & Oct(x) & " expected " & ex)
382 Call ok(getVT(Oct(x)) = res_type, "getVT(Oct(" &x & ")) = " & getVT(Oct(x)) & "expected " & res_type)
383 End Sub
385 Sub TestOctError(num, err_num)
386 On error resume next
387 Call Oct(num)
388 Call ok(Err.number = err_num, "Oct(" & num & ") error number is " & Err.number & " expected " & err_num)
389 End Sub
391 TestOct empty, "0", "VT_BSTR"
392 TestOct 0, "0", "VT_BSTR"
393 TestOct 9, "11", "VT_BSTR"
394 TestOct "9", "11", "VT_BSTR"
395 TestOct 8.5, "10", "VT_BSTR"
396 TestOct 9.5, "12", "VT_BSTR"
397 TestOct -1, "177777", "VT_BSTR"
398 TestOct -32767, "100001", "VT_BSTR"
399 TestOct -32768, "37777700000", "VT_BSTR"
400 TestOct 2147483647.49, "17777777777", "VT_BSTR"
401 TestOct -2147483648.5, "20000000000", "VT_BSTR"
402 Call ok(getVT(Oct(null)) = "VT_NULL", "getVT(Oct(null)) = " & getVT(Oct(null)))
403 newObject.myval = 5
404 TestOct newObject, "5", "VT_BSTR"
406 TestOctError 2147483647.5, 6
407 TestOctError -2147483648.51, 6
408 TestOctError "test", 13
410 x = InStr(1, "abcd", "bc")
411 Call ok(x = 2, "InStr returned " & x)
413 x = InStr("abcd", "bc")
414 Call ok(x = 2, "InStr returned " & x)
415 Call ok(getVT(x) = "VT_I4*", "getVT(InStr) returned " & getVT(x))
417 x = InStr("abc", "bc")
418 Call ok(x = 2, "InStr returned " & x)
420 x = InStr("abcbc", "bc")
421 Call ok(x = 2, "InStr returned " & x)
423 x = InStr("bcabc", "bc")
424 Call ok(x = 1, "InStr returned " & x)
426 x = InStr(3, "abcd", "bc")
427 Call ok(x = 0, "InStr returned " & x)
429 x = InStr("abcd", "bcx")
430 Call ok(x = 0, "InStr returned " & x)
432 x = InStr(5, "abcd", "bc")
433 Call ok(x = 0, "InStr returned " & x)
435 x = "abcd"
436 x = InStr(x, "bc")
437 Call ok(x = 2, "InStr returned " & x)
439 x = InStr("abcd", null)
440 Call ok(isNull(x), "InStr returned " & x)
441 x = InStr(null, "abcd")
442 Call ok(isNull(x), "InStr returned " & x)
443 x = InStr(2, null, "abcd")
444 Call ok(isNull(x), "InStr returned " & x)
446 x = InStr(1.3, "abcd", "bc")
447 Call ok(x = 2, "InStr returned " & x)
449 x = InStr(2.3, "abcd", "bc")
450 Call ok(x = 2, "InStr returned " & x)
452 x = InStr(2.6, "abcd", "bc")
453 Call ok(x = 0, "InStr returned " & x)
455 x = InStr(3, "abcdefgh", "fg", 0)
456 Call ok(x = 6, "InStr returned " & x)
458 x = InStr(3, "abcdefgh", "FG", 0)
459 Call ok(x = 0, "InStr returned " & x)
461 x = InStr(3, "abcdefgh", "FG", 1)
462 Call ok(x = 6, "InStr returned " & x)
464 x = InStr(3, "abcdefgh", "FG", 1.4)
465 Call ok(x = 6, "InStr returned " & x)
467 x = InStr(3, "abcdefgh", "FG", -0.3)
468 Call ok(x = 0, "InStr returned " & x)
470 x = InStr(1, "abcABC", "aB", 0)
471 Call ok(x = 0, "InStr returned " & x)
473 x = InStr(1, "abcABC", "aB", 1)
474 Call ok(x = 1, "InStr returned " & x)
476 x = InStr(2, "abcABC", "aB", 1)
477 Call ok(x = 4, "InStr returned " & x)
479 x = InStr(5, "abcABC", "aB", 1)
480 Call ok(x = 0, "InStr returned " & x)
482 x = InStr(2, "abcABC", "ab", 1)
483 Call ok(x = 4, "InStr returned " & x)
485 x = InStr(6, "abcABC", "c", 1)
486 Call ok(x = 6, "InStr returned " & x)
488 x = InStr(2, "abc" & Chr(0) & "A" & Chr(0) & "BC", "C", 0)
489 Call ok(x = 8, "InStr returned " & x)
491 x = InStr(1, "abc" & Chr(0) & "ABC", Chr(0) & "a", 1)
492 Call ok(x = 4, "InStr returned " & x)
494 x = InStr(1, 23456, 45, 0)
495 Call ok(x = 3, "InStr returned " & x)
497 x = InStr(1, "23456", 34, 1)
498 Call ok(x = 2, "InStr returned " & x)
500 x = InStr(2, "", "abcd", 0)
501 Call ok(x = 0, "InStr returned " & x)
503 x = InStr(4, "abcdef", "", 0)
504 Call ok(x = 4, "InStr returned " & x)
506 x = InStr(20, "abcdef", "", 0)
507 Call ok(x = 0, "InStr returned " & x)
509 x = InStr(4, "", "", 0)
510 Call ok(x = 0, "InStr returned " & x)
512 Sub testInStrError(arg1, arg2, arg3, arg4, error_num)
513 on error resume next
514 Dim x
516 Call Err.clear()
517 x = InStr(arg1, arg2, arg3, arg4)
518 Call ok(Err.number = error_num, "Err.number = " & Err.number)
519 End Sub
521 call testInStrError(2, "abcd", null, 0, 0)
522 call testInStrError(2, Null, "abcd", 0, 0)
523 call testInStrError(Null, "abcd", "abcd", 0, 94)
524 call testInStrError(2, "abcd", "abcd", null, 94)
525 call testInStrError(-20, "abcd", "abcd", 1, 5)
526 Call testInStrError(2, "abcd", "abcd", 10, 5)
529 x = InStrRev("bcabcd", "bc")
530 Call ok(x = 4, "InStrRev returned " & x)
531 Call ok(getVT(x) = "VT_I4*", "getVT(InStrRev) returned " & getVT(x))
533 x = InStrRev("bcabcd", "bc", 6)
534 Call ok(x = 4, "InStrRev returned " & x)
536 x = InStrRev("abcd", "bcx")
537 Call ok(x = 0, "InStrRev returned " & x)
539 x = InStrRev("abcd", "bc", 3)
540 Call ok(x = 2, "InStrRev returned " & x)
542 x = InStrRev("abcd", "bc", 2)
543 Call ok(x = 0, "InStrRev returned " & x)
545 x = InStrRev("abcd", "b", 2)
546 Call ok(x = 2, "InStrRev returned " & x)
548 x = InStrRev("abcd", "bc", 5)
549 Call ok(x = 0, "InStrRev returned " & x)
551 x = InStrRev("abcd", "bc", 15)
552 Call ok(x = 0, "InStrRev returned " & x)
554 x = "abcd"
555 x = InStrRev(x, "bc")
556 Call ok(x = 2, "InStrRev returned " & x)
558 x = InStrRev("abcd", "bc", 1.3)
559 Call ok(x = 0, "InStrRev returned " & x)
561 x = InStrRev("abcd", "bc", 2.3)
562 Call ok(x = 0, "InStrRev returned " & x)
564 x = InStrRev("abcd", "bc", 2.6)
565 Call ok(x = 2, "InStrRev returned " & x)
567 x = InStrRev("1234", 34)
568 Call ok(x = 3, "InStrRev returned " & x)
570 x = InStrRev(1234, 34)
571 Call ok(x = 3, "InStrRev returned " & x)
573 x = InStrRev("abcd", "A", 1, 0)
574 Call ok(x = 0, "InStrRev returned " & x)
576 x = InStrRev("abcd", "A", 1, 1)
577 Call ok(x = 1, "InStrRev returned " & x)
579 x = InStrRev("abcd", "Ab", 1, 1)
580 Call ok(x = 0, "InStrRev returned " & x)
582 x = InStrRev("abcd", "Ab", -1, 1)
583 Call ok(x = 1, "InStrRev returned " & x)
585 x = InStrRev("abcd", "cd", 3, 1)
586 Call ok(x = 0, "InStrRev returned " & x)
588 x = InStrRev("abcd", "cd", 4, 1)
589 Call ok(x = 3, "InStrRev returned " & x)
591 x = InStrRev("abcd", "cd", 5, 1)
592 Call ok(x = 0, "InStrRev returned " & x)
594 x = InStrRev("abc" & Chr(0) & "A" & Chr(0) & "BC", "c", 8, 0)
595 Call ok(x = 3, "InStrRev returned " & x)
597 x = InStrRev("abc" & Chr(0) & "ABC", Chr(0) & "a", 6, 1)
598 Call ok(x = 4, "InStrRev returned " & x)
600 x = InStrRev("", "hi", 1, 0)
601 Call ok(x = 0, "InStrRev returned " & x)
603 x = InStrRev("abcd", "", 3, 1)
604 Call ok(x = 3, "InStrRev returned " & x)
606 x = InStrRev("", "", 3, 0)
607 Call ok(x = 0, "InStrRev returned " & x)
609 Sub testInStrRevError(arg1, arg2, arg3, arg4, error_num)
610 on error resume next
611 Dim x
613 Call Err.clear()
614 x = InStrRev(arg1, arg2, arg3, arg4)
615 Call ok(Err.number = error_num, "Err.number = " & Err.number)
616 End Sub
618 call testInStrRevError("abcd", null, 2, 0, 94)
619 call testInStrRevError(null, "abcd", 2, 0, 94)
620 call testInStrRevError("abcd", "abcd", null, 0, 94)
621 call testInStrRevError("abcd", "abcd", 2, null, 94)
622 call testInStrRevError("abcd", "abcd", -20, 1, 5)
623 Call testInStrRevError("abcd", "abcd", 2, 10, 5)
625 Sub TestMid(str, start, len, ex)
626 x = Mid(str, start, len)
627 Call ok(x = ex, "Mid(" & str & ", " & start & ", " & len & ") = " & x & " expected " & ex)
628 End Sub
630 Sub TestMid2(str, start, ex)
631 x = Mid(str, start)
632 Call ok(x = ex, "Mid(" & str & ", " & start & ") = " & x & " expected " & ex)
633 End Sub
635 TestMid "test", 2, 2, "es"
636 TestMid "test", 2, 4, "est"
637 TestMid "test", 1, 2, "te"
638 TestMid "test", 1, 0, ""
639 TestMid "test", 1, 0, ""
640 TestMid "test", 5, 2, ""
641 TestMid 1234, 1, 2, "12"
642 TestMid 1234, 5, 2, ""
643 TestMid2 "test", 1, "test"
644 TestMid2 "test", 2, "est"
645 TestMid2 "test", 4, "t"
646 TestMid2 "test", 5, ""
647 TestMid2 1234, 5, ""
649 sub TestMidError()
650 on error resume next
651 call Err.clear()
652 call Mid("test", "a", 1)
653 call ok(Err.number = 13, "Err.number = " & Err.number)
654 call Err.clear()
655 call Mid("test", "a", null)
656 call ok(Err.number = 94, "Err.number = " & Err.number)
657 call Err.clear()
658 call Mid("test", "a", empty)
659 call ok(Err.number = 13, "Err.number = " & Err.number)
660 call Mid("test", 0, -1)
661 call ok(Err.number = 5, "Err.number = " & Err.number)
662 call Err.clear()
663 call Mid("test", -1, -1)
664 call ok(Err.number = 5, "Err.number = " & Err.number)
665 call Err.clear()
666 call Mid(null, -1, -1)
667 call ok(Err.number = 5, "Err.number = " & Err.number)
668 call Err.clear()
669 call Mid("test", 0, null)
670 call ok(Err.number = 94, "Err.number = " & Err.number)
671 call Err.clear()
672 call Mid("test", -1, null)
673 call ok(Err.number = 94, "Err.number = " & Err.number)
674 call Err.clear()
675 call Mid("test", null, 2)
676 call ok(Err.number = 94, "Err.number = " & Err.number)
677 call Err.clear()
678 call Mid("test", null, -1)
679 call ok(Err.number = 94, "Err.number = " & Err.number)
680 call Err.clear()
681 call Mid(null, -1, -1)
682 call ok(Err.number = 5, "Err.number = " & Err.number)
683 call Err.clear()
684 call Mid("test", empty, 1)
685 call ok(Err.number = 5, "Err.number = " & Err.number)
686 call Err.clear()
687 call Mid("test", 0, empty)
688 call ok(Err.number = 5, "Err.number = " & Err.number)
689 call Err.clear()
690 call Mid(empty, 0, 0)
691 call ok(Err.number = 5, "Err.number = " & Err.number)
692 end sub
693 call TestMidError()
695 Sub TestUCase(str, ex)
696 x = UCase(str)
697 Call ok(x = ex, "UCase(" & str & ") = " & x & " expected " & ex)
698 End Sub
700 TestUCase "test", "TEST"
701 TestUCase "123aBC?", "123ABC?"
702 TestUCase "", ""
703 TestUCase 1, "1"
704 if isEnglishLang then TestUCase true, "TRUE"
705 TestUCase 0.123, doubleAsString(0.123)
706 TestUCase Empty, ""
707 Call ok(getVT(UCase(Null)) = "VT_NULL", "getVT(UCase(Null)) = " & getVT(UCase(Null)))
709 Sub TestLCase(str, ex)
710 x = LCase(str)
711 Call ok(x = ex, "LCase(" & str & ") = " & x & " expected " & ex)
712 End Sub
714 TestLCase "test", "test"
715 TestLCase "123aBC?", "123abc?"
716 TestLCase "", ""
717 TestLCase 1, "1"
718 if isEnglishLang then TestLCase true, "true"
719 TestLCase 0.123, doubleAsString(0.123)
720 TestLCase Empty, ""
721 Call ok(getVT(LCase(Null)) = "VT_NULL", "getVT(LCase(Null)) = " & getVT(LCase(Null)))
723 x=Split("abc")
724 Call ok(x(0) = "abc", "Split(""abc"")(0)=" & x(0))
725 x = Split("abc def")
726 Call ok(x(0) = "abc", "Split(""abc def"")(0)=" & x(0))
727 Call ok(x(1) = "def", "Split(""abc def"")(1)=" & x(1))
728 x = Split("abc def ghi")
729 Call ok(x(0) = "abc", "Split(""abc def ghi"")(0)=" & x(0))
730 Call ok(x(1) = "def", "Split(""abc def ghi"")(1)=" & x(1))
731 Call ok(x(2) = "ghi", "Split(""abc def ghi"")(2)=" & x(2))
732 x = Split("abc def","")
733 Call ok(x(0) = "abc def", "Split(""abc def"","""")(0)=" & x(0))
734 x = Split("abc-def","-")
735 Call ok(x(0) = "abc", "Split(""abc-def"",""-"")(0)=" & x(0))
736 Call ok(x(1) = "def", "Split(""abc-def"",""-"")(1)=" & x(1))
737 x = Split("abc--def","-")
738 Call ok(x(0) = "abc", "Split(""abc--def"",""-"")(0)=" & x(0))
739 Call ok(x(1) = "", "Split(""abc--def"",""-"")(1)=" & x(1))
740 Call ok(x(2) = "def", "Split(""abc--def"",""-"")(2)=" & x(2))
741 x = Split("abcdefghi","def")
742 Call ok(x(0) = "abc", "Split(""abcdefghi"",""def"")(0)=" & x(0))
743 Call ok(x(1) = "ghi", "Split(""abcdefghi"",""def"")(1)=" & x(1))
744 x = Split("12345",3)
745 Call ok(x(0) = "12", "Split(""12345"",3)(0)=" & x(0))
746 Call ok(x(1) = "45", "Split(""12345"",3)(1)=" & x(1))
747 x = Split("12345",5)
748 Call ok(x(0) = "1234", "Split(""12345"",5)(0)=" & x(0))
749 Call ok(x(1) = "", "Split(""12345"",5)(1)=" & x(1))
750 x = Split("12345",12)
751 Call ok(x(0) = "", "Split(""12345"",12)(0)=" & x(0))
752 Call ok(x(1) = "345", "Split(""12345"",12)(1)=" & x(1))
753 x = Split("abc-def-ghi","-")
754 Call ok(UBound(x) = 2, "UBound(Split(""abc-def-ghi"",""-""))=" & UBound(x))
755 x = Split("a b c d e f g h i j k l m n o p q")
756 Call ok(UBound(x) = 16, "UBound(Split(""a b c d e f g h i j k l m n o p q""))=" & UBound(x))
757 x = Split("abc-def-ghi","-",2)
758 Call ok(UBound(x) = 1, "UBound(Split(""abc-def-ghi"",""-"",2))=" & UBound(x))
759 x = Split("abc-def-ghi","-",4)
760 Call ok(UBound(x) = 2, "UBound(Split(""abc-def-ghi"",""-"",4))=" & UBound(x))
761 x = Split("abc-def-ghi","-",-1)
762 Call ok(UBound(x) = 2, "UBound(Split(""abc-def-ghi"",""-"",-1))=" & UBound(x))
763 x = Split("abc-def-ghi","-",-1)
764 Call ok(UBound(x) = 2, "UBound(Split(""abc-def-ghi"",""-"",-42))=" & UBound(x))
765 x = Split("abcZdefZghi","Z",3,0)
766 Call ok(UBound(x) = 2, "UBound(Split(""abcZdefZghi"",""Z"",3,0))=" & UBound(x))
767 x = Split("abcZdefZghi","z",3,0)
768 Call ok(UBound(x) = 0, "UBound(Split(""abcZdefZghi"",""z"",3,0))=" & UBound(x))
769 x = Split("abcZdefZghi","z",3,1)
770 Call ok(UBound(x) = 2, "UBound(Split(""abcZdefZghi"",""z"",3,1))=" & UBound(x))
772 Sub testSplitError(arg1, arg2, arg3, arg4, error_num)
773 on error resume next
774 Dim x
776 Call Err.clear()
777 x = Split(arg1, arg2, arg3, arg4)
778 Call ok(Err.number = error_num, "Err.number = " & Err.number)
779 End Sub
781 call testSplitError("abc-def-ghi", "-", -1, 2, 5)
782 call testSplitError("abc-def-ghi", "-", -42, 0, 5)
783 call testSplitError(null, "-", -1, 0, 94)
784 call testSplitError("abc-def-ghi", null, -1, 0, 94)
785 call testSplitError("abc-def-ghi", "-", null, 0, 94)
786 call testSplitError("abc-def-ghi", "-", -1, null, 94)
788 Sub TestStrComp(str_left, str_right, mode, ex)
789 x = StrComp(str_left, str_right, mode)
790 Call ok(x = ex, "StrComp(" & str_left & ", " & str_right & ", " & mode & ") = " & x & " expected " & ex)
791 End Sub
793 TestStrComp "ABC", "abc", 0, -1
794 TestStrComp "abc", "ABC", 0, 1
795 TestStrComp "ABC", "ABC", 0, 0
796 TestStrComp "ABC", "abc", 0, -1
797 TestStrComp "abc", "ABC", 0, 1
798 TestStrComp "ABC", "ABC", 0, 0
799 TestStrComp "ABCD", "ABC", 0, 1
800 TestStrComp "ABC", "ABCD", 0, -1
801 TestStrComp "ABC", "abc", 1, 0
802 TestStrComp "ABC", "ABC", 1, 0
803 TestStrComp "ABCD", "ABC", 1, 1
804 TestStrComp "ABC", "ABCD", 1, -1
805 TestStrComp "ABC", "ABCD", "0", -1
806 TestStrComp "ABC", "ABCD", "1", -1
807 TestStrComp 1, 1, 1, 0
808 TestStrComp "1", 1, 1, 0
809 TestStrComp "1", 1.0, 1, 0
810 TestStrComp Empty, Empty, 1, 0
811 TestStrComp Empty, "", 1, 0
812 TestStrComp Empty, "ABC", 1, -1
813 TestStrComp "ABC", Empty, 1, 1
814 TestStrComp vbNull, vbNull, 1, 0
815 TestStrComp "", vbNull, 1, -1
817 sub testStrCompError()
818 on error resume next
819 call Err.clear()
820 call StrComp()
821 call ok(Err.number = 450, "Err.number = " & Err.number)
822 call Err.clear()
823 call StrComp("a", "a", 0, 1)
824 call ok(Err.number = 450, "Err.number = " & Err.number)
825 end sub
826 call testStrCompError()
828 Call ok(Len("abc") = 3, "Len(abc) = " & Len("abc"))
829 Call ok(Len("") = 0, "Len() = " & Len(""))
830 Call ok(Len(1) = 1, "Len(1) = " & Len(1))
831 Call ok(isNull(Len(null)), "Len(null) = " & Len(null))
832 Call ok(Len(empty) = 0, "Len(empty) = " & Len(empty))
833 Call ok(getVT(Len("abc")) = "VT_I4", "getVT(Len(abc)) = " & getVT(Len("abc")))
835 Call ok(Space(1) = " ", "Space(1) = " & Space(1) & """")
836 Call ok(Space(0) = "", "Space(0) = " & Space(0) & """")
837 Call ok(Space(false) = "", "Space(false) = " & Space(false) & """")
838 Call ok(Space(5) = " ", "Space(5) = " & Space(5) & """")
839 Call ok(Space(5.2) = " ", "Space(5.2) = " & Space(5.2) & """")
840 Call ok(Space(5.8) = " ", "Space(5.8) = " & Space(5.8) & """")
841 Call ok(Space(5.5) = " ", "Space(5.5) = " & Space(5.5) & """")
842 Call ok(Space(4.5) = " ", "Space(4.5) = " & Space(4.5) & """")
843 Call ok(Space(0.5) = "", "Space(0.5) = " & Space(0.5) & """")
844 Call ok(Space(1.5) = " ", "Space(1.5) = " & Space(1.5) & """")
845 Call ok(Space("1") = " ", "Space(""1"") = " & Space("1") & """")
846 Call ok(Space(Empty) = "", "Space(Empty) = " & Space(Empty) & """")
848 sub testSpaceError()
849 on error resume next
850 call Err.clear()
851 call Space(-1)
852 call ok(Err.number = 5, "Err.number = " & Err.number)
853 call Err.clear()
854 call Space("-1")
855 call ok(Err.number = 5, "Err.number = " & Err.number)
856 call Err.clear()
857 call Space(Null)
858 call ok(Err.number = 94, "Err.number = " & Err.number)
859 end sub
860 call testSpaceError()
862 function strlength(s1, s2, s3, s4, s5)
863 strlength = Len(s1 & s2 & s3 & s4 & s5)
864 end function
865 Call ok(strlength(String(500, "a"), String(500, "b"), String(500, "c"), String(500, "d"), String(500, "e")) = 500*5, "strlength(...) = 500*5")
867 sub test_string(cnt, char, exp)
868 call ok(String(cnt, char) = exp, "String(" & cnt & ", """ & char & """ = """ & _
869 String(cnt, char) & """ expected """ & exp & """")
870 end sub
872 test_string 3, "x", "xxx"
873 test_string 3, "xy", "xxx"
874 test_string 1, "z", "z"
875 test_string 0, "z", ""
876 test_string "3", "xy", "xxx"
877 test_string 3, Chr(3), Chr(3)&Chr(3)&Chr(3)
879 call ok(getVT(String(0, "z")) = "VT_BSTR", "getVT(String(0,z)) = " & getVT(String(0, "z")))
881 sub test_string_error()
882 on error resume next
883 dim x
884 x = String(-2, "x")
885 call ok(err.number = 5, "err.number = " & err.number)
886 err.clear
887 x = String(3, "")
888 call ok(err.number = 5, "err.number = " & err.number)
889 err.clear
890 x = String(0, "")
891 call ok(err.number = 5, "err.number = " & err.number)
892 end sub
893 call test_string_error
895 Sub TestStrReverse(str, ex)
896 Call ok(StrReverse(str) = ex, "StrReverse(" & str & ") = " & StrReverse(str))
897 End Sub
899 TestStrReverse "test", "tset"
900 TestStrReverse "", ""
901 TestStrReverse 123, "321"
902 if isEnglishLang then TestStrReverse true, "eurT"
904 Sub TestLeft(str, len, ex)
905 Call ok(Left(str, len) = ex, "Left(" & str & ", " & len & ") = " & Left(str, len))
906 End Sub
908 TestLeft "test", 2, "te"
909 TestLeft "test", 5, "test"
910 TestLeft "test", 0, ""
911 TestLeft 123, 2, "12"
912 TestLeft "123456", 1.5, "12"
913 TestLeft "123456", 2.5, "12"
914 TestLeft "test", "2", "te"
915 if isEnglishLang then TestLeft true, 2, "Tr"
917 Sub TestRight(str, len, ex)
918 Call ok(Right(str, len) = ex, "Right(" & str & ", " & len & ") = " & Right(str, len))
919 End Sub
921 TestRight "test", 2, "st"
922 TestRight "test", 5, "test"
923 TestRight "test", 0, ""
924 TestRight 123, 2, "23"
925 TestRight "test", "3", "est"
926 TestRight 123, "2", "23"
927 TestRight empty, 0, ""
928 TestRight empty, 1, ""
929 TestRight "test", empty, ""
930 TestRight "test", empty, ""
931 if isEnglishLang then TestRight true, 2, "ue"
932 call Right(null, 0)
933 call ok(getVT(Right(null, 0)) = "VT_NULL", "getVT(Right(null, 0)) = " & getVT(Right(null, 0)))
934 call ok(getVT(Right(null, 1)) = "VT_NULL", "getVT(Right(null, 1)) = " & getVT(Right(null, 1)))
936 sub TestRightError()
937 on error resume next
938 call Err.clear()
939 call Right("test", -1)
940 call ok(Err.number = 5, "Err.number = " & Err.number)
941 call Err.clear()
942 call Right(null, -1)
943 call ok(Err.number = 5, "Err.number = " & Err.number)
944 call Err.clear()
945 call Right("test", null)
946 call ok(Err.number = 94, "Err.number = " & Err.number)
947 end sub
948 call TestRightError()
950 Sub TestTrim(str, exstr)
951 Call ok(Trim(str) = exstr, "Trim(" & str & ") = " & Trim(str))
952 End Sub
954 TestTrim " test ", "test"
955 TestTrim "test ", "test"
956 TestTrim " test", "test"
957 TestTrim "test", "test"
958 TestTrim "", ""
959 TestTrim 123, "123"
960 if isEnglishLang then TestTrim true, "True"
962 Sub TestLTrim(str, exstr)
963 Call ok(LTrim(str) = exstr, "LTrim(" & str & ") = " & LTrim(str))
964 End Sub
966 TestLTrim " test ", "test "
967 TestLTrim "test ", "test "
968 TestLTrim " test", "test"
969 TestLTrim "test", "test"
970 TestLTrim "", ""
971 TestLTrim 123, "123"
972 if isEnglishLang then TestLTrim true, "True"
974 Sub TestRTrim(str, exstr)
975 Call ok(RTrim(str) = exstr, "RTrim(" & str & ") = " & RTrim(str))
976 End Sub
978 TestRTrim " test ", " test"
979 TestRTrim "test ", "test"
980 TestRTrim " test", " test"
981 TestRTrim "test", "test"
982 TestRTrim "", ""
983 TestRTrim 123, "123"
984 if isEnglishLang then TestRTrim true, "True"
987 sub test_replace(str, find, rep, exp)
988 dim r
989 r = Replace(str, find, rep)
990 ok r = exp, "Replace(""" & str & """, """ & find & """, """ & rep & """) = """ & _
991 r & """ expected """ & exp & """"
992 end sub
994 sub test_replace_from(str, find, rep, from, exp)
995 dim r
996 r = Replace(str, find, rep, from)
997 ok r = exp, "Replace(""" & str & """, """ & find & """, """ & rep & """, " & from & ") = """ & _
998 r & """ expected """ & exp & """"
999 end sub
1001 sub test_replace_cnt(str, find, rep, from, cnt, exp)
1002 dim r
1003 r = Replace(str, find, rep, from, cnt)
1004 ok r = exp, "Replace(""" & str & """, """ & find & """, """ & rep & """, " & from & ", " & cnt & ") = """ & _
1005 r & """ expected """ & exp & """"
1006 end sub
1008 sub test_replace_mode(str, find, rep, from, cnt, mode, exp)
1009 dim r
1010 r = Replace(str, find, rep, from, cnt, mode)
1011 ok r = exp, "Replace(""" & str & """, """ & find & """, """ & rep & """, " & from & ", " & cnt & ", " & mode _
1012 & ") = """ & r & """ expected """ & exp & """"
1013 end sub
1015 test_replace "xx testxx(xx)", "xx", "!", "! test!(!)"
1016 test_replace "", "x", "y", ""
1017 test_replace "xxx", "", "y", "xxx"
1018 test_replace "yxxy", "x", "", "yy"
1019 test_replace "xxxxx", "xx", "y", "yyx"
1020 test_replace 123, 2, 6, "163"
1021 test_replace "xyz" & Chr(0) & "xyz", "y", "Y", "xYz" & Chr(0) & "xYz"
1022 test_replace "xyz" & Chr(0) & "xyz", Chr(0) & "x", "Y" & Chr(0) & Chr(0), "xyzY" & Chr(0) & Chr(0) & "yz"
1024 test_replace_from "xx testxx(xx)", "xx", "!", 1, "! test!(!)"
1025 test_replace_from "xx testxx(xx)", "xx", "!", 1, "! test!(!)"
1026 test_replace_from "xx testxx(xx)", "xx", "!", 2, "x test!(!)"
1027 test_replace_from "xx testxx(xx)", "xx", "!", 2000, ""
1028 test_replace_from "xxx", "", "y", 2, "xx"
1030 test_replace_cnt "xx testxx(xx)", "xx", "!", 1, 2, "! test!(xx)"
1031 test_replace_cnt "xx testxx(xx)", "xx", "!", 1, 1, "! testxx(xx)"
1032 test_replace_cnt "xx testxx(xx)", "xx", "!", 2, 1, "x test!(xx)"
1033 test_replace_cnt "xx testxx(xx)", "xx", "!", 1, -1, "! test!(!)"
1034 test_replace_cnt "xx testxx(xx)", "xx", "!", 1, 0, "xx testxx(xx)"
1036 test_replace_mode "Aa testAAa(aa)", "aa", "!", 1, 2, 1, "! test!a(aa)"
1037 test_replace_mode "aA testaa(aa)", "AA", "!", 1, 1, 1, "! testaa(aa)"
1038 test_replace_mode "aa testAa(aa)", "aa", "!", 2, 2, 0, "a testAa(!)"
1039 test_replace_mode "aa testAA(aA)", "Aa", "!", 1, -1, 1, "! test!(!)"
1040 test_replace_mode "aa testaa(aa)", "A", "!", 1, -1, 1, "!! test!!(!!)"
1042 on error resume next
1043 Replace "xx", "x", "y", -1
1044 x = err.number
1045 on error goto 0
1046 ok x = 5, "err = " & x
1048 on error resume next
1049 Replace "xx", "x", "y", 0
1050 x = err.number
1051 on error goto 0
1052 ok x = 5, "err = " & x
1054 on error resume next
1055 Replace "xx", "x", "y", 1, -2
1056 x = err.number
1057 on error goto 0
1058 ok x = 5, "err = " & x
1060 Sub testReplaceError(arg1, arg2, arg3, arg4, arg5, arg6, error_num)
1061 on error resume next
1062 Dim x
1064 Call Err.clear()
1065 x = Replace(arg1, arg2, arg3, arg4, arg5, arg6)
1066 Call ok(Err.number = error_num, "Err.number = " & Err.number)
1067 End Sub
1069 Call testReplaceError(Null, "x", "y", 1, 1, 0, 94)
1070 Call testReplaceError("xx", null, "y", 1, 1, 0, 94)
1071 Call testReplaceError("xx", "x", null, 1, 1, 0, 94)
1072 Call testReplaceError("xx", "x", "y", null, 1, 0, 94)
1073 Call testReplaceError("xx", "x", "y", 1, null, 0, 94)
1074 Call testReplaceError("xx", "x", "y", 1, 1, null, 94)
1075 Call testReplaceError("xx", "x", "y", 1, 1, 8, 5)
1078 Sub TestRound(val, exval, vt)
1079 Call ok(Round(val) = exval, "Round(" & val & ") = " & Round(val))
1080 Call ok(getVT(Round(val)) = vt, "getVT(Round(" & val & ")) = " & getVT(Round(val)))
1081 End Sub
1083 TestRound 3, 3, "VT_I2"
1084 TestRound 3.3, 3, "VT_R8"
1085 TestRound 3.8, 4, "VT_R8"
1086 TestRound 3.5, 4, "VT_R8"
1087 TestRound -3.3, -3, "VT_R8"
1088 TestRound -3.5, -4, "VT_R8"
1089 TestRound "2", 2, "VT_R8"
1090 TestRound true, true, "VT_BOOL"
1091 TestRound false, false, "VT_BOOL"
1093 if isEnglishLang then
1094 Call ok(WeekDayName(1) = "Sunday", "WeekDayName(1) = " & WeekDayName(1))
1095 Call ok(WeekDayName(3) = "Tuesday", "WeekDayName(3) = " & WeekDayName(3))
1096 Call ok(WeekDayName(7) = "Saturday", "WeekDayName(7) = " & WeekDayName(7))
1097 Call ok(WeekDayName(1.1) = "Sunday", "WeekDayName(1.1) = " & WeekDayName(1.1))
1098 Call ok(WeekDayName(1, false) = "Sunday", "WeekDayName(1, false) = " & WeekDayName(1, false))
1099 Call ok(WeekDayName(1, true) = "Sun", "WeekDayName(1, true) = " & WeekDayName(1, true))
1100 Call ok(WeekDayName(1, 10) = "Sun", "WeekDayName(1, 10) = " & WeekDayName(1, 10))
1101 Call ok(WeekDayName(1, true, 2) = "Mon", "WeekDayName(1, true, 2) = " & WeekDayName(1, true, 2))
1102 Call ok(WeekDayName(1, true, 2.5) = "Mon", "WeekDayName(1, true, 2.5) = " & WeekDayName(1, true, 2.5))
1103 Call ok(WeekDayName(1, true, 1.5) = "Mon", "WeekDayName(1, true, 1.5) = " & WeekDayName(1, true, 1.5))
1104 Call ok(WeekDayName(1, true, 7) = "Sat", "WeekDayName(1, true, 7) = " & WeekDayName(1, true, 7))
1105 Call ok(WeekDayName(1, true, 7.1) = "Sat", "WeekDayName(1, true, 7.1) = " & WeekDayName(1, true, 7.1))
1107 Call ok(MonthName(1) = "January", "MonthName(1) = " & MonthName(1))
1108 Call ok(MonthName(12) = "December", "MonthName(12) = " & MonthName(12))
1109 Call ok(MonthName(1, 0) = "January", "MonthName(1, 0) = " & MonthName(1, 0))
1110 Call ok(MonthName(12, false) = "December", "MonthName(12, false) = " & MonthName(12, false))
1111 Call ok(MonthName(1, 10) = "Jan", "MonthName(1, 10) = " & MonthName(1, 10))
1112 Call ok(MonthName(12, true) = "Dec", "MonthName(12, true) = " & MonthName(12, true))
1113 end if
1115 Call ok(WeekDayName(1, true, 0) = WeekDayName(1, true, firstDayOfWeek), _
1116 "WeekDayName(1, true, 0) = " & WeekDayName(1, true, 0))
1118 Call ok(getVT(Now()) = "VT_DATE", "getVT(Now()) = " & getVT(Now()))
1120 Call ok(vbOKOnly = 0, "vbOKOnly = " & vbOKOnly)
1121 Call ok(getVT(vbOKOnly) = "VT_I2", "getVT(vbOKOnly) = " & getVT(vbOKOnly))
1122 Call ok(vbOKCancel = 1, "vbOKCancel = " & vbOKCancel)
1123 Call ok(getVT(vbOKCancel) = "VT_I2", "getVT(vbOKCancel) = " & getVT(vbOKCancel))
1124 Call ok(vbAbortRetryIgnore = 2, "vbAbortRetryIgnore = " & vbAbortRetryIgnore)
1125 Call ok(getVT(vbAbortRetryIgnore) = "VT_I2", "getVT(vbAbortRetryIgnore) = " & getVT(vbAbortRetryIgnore))
1126 Call ok(vbYesNoCancel = 3, "vbYesNoCancel = " & vbYesNoCancel)
1127 Call ok(getVT(vbYesNoCancel) = "VT_I2", "getVT(vbYesNoCancel) = " & getVT(vbYesNoCancel))
1128 Call ok(vbYesNo = 4, "vbYesNo = " & vbYesNo)
1129 Call ok(getVT(vbYesNo) = "VT_I2", "getVT(vbYesNo) = " & getVT(vbYesNo))
1130 Call ok(vbRetryCancel = 5, "vbRetryCancel = " & vbRetryCancel)
1131 Call ok(getVT(vbRetryCancel) = "VT_I2", "getVT(vbRetryCancel) = " & getVT(vbRetryCancel))
1133 Call ok(vbOK = 1, "vbOK = " & vbOK)
1134 Call ok(getVT(vbOK) = "VT_I2", "getVT(vbOK) = " & getVT(vbOK))
1135 Call ok(vbCancel = 2, "vbCancel = " & vbCancel)
1136 Call ok(getVT(vbCancel) = "VT_I2", "getVT(vbCancel) = " & getVT(vbCancel))
1137 Call ok(vbAbort = 3, "vbAbort = " & vbAbort)
1138 Call ok(getVT(vbAbort) = "VT_I2", "getVT(vbAbort) = " & getVT(vbAbort))
1139 Call ok(vbRetry = 4, "vbRetry = " & vbRetry)
1140 Call ok(getVT(vbRetry) = "VT_I2", "getVT(vbRetry) = " & getVT(vbRetry))
1141 Call ok(vbIgnore = 5, "vbIgnore = " & vbIgnore)
1142 Call ok(getVT(vbIgnore) = "VT_I2", "getVT(vbIgnore) = " & getVT(vbIgnore))
1143 Call ok(vbYes = 6, "vbYes = " & vbYes)
1144 Call ok(getVT(vbYes) = "VT_I2", "getVT(vbYes) = " & getVT(vbYes))
1145 Call ok(vbNo = 7, "vbNo = " & vbNo)
1146 Call ok(getVT(vbNo) = "VT_I2", "getVT(vbNo) = " & getVT(vbNo))
1148 Call ok(CInt(-36.75) = -37, "CInt(-36.75) = " & CInt(-36.75))
1149 Call ok(getVT(CInt(-36.75)) = "VT_I2", "getVT(CInt(-36.75)) = " & getVT(CInt(-36.75)))
1150 Call ok(CInt(-36.50) = -36, "CInt(-36.50) = " & CInt(-36.50))
1151 Call ok(getVT(CInt(-36.50)) = "VT_I2", "getVT(CInt(-36.50)) = " & getVT(CInt(-36.50)))
1152 Call ok(CInt(-36.25) = -36, "CInt(-36.25) = " & CInt(-36.25))
1153 Call ok(getVT(CInt(-36.25)) = "VT_I2", "getVT(CInt(-36.25)) = " & getVT(CInt(-36.25)))
1154 Call ok(CInt(-36) = -36, "CInt(-36) = " & CInt(-36))
1155 Call ok(getVT(CInt(-36)) = "VT_I2", "getVT(CInt(-36)) = " & getVT(CInt(-36)))
1156 Call ok(CInt(0) = 0, "CInt(0) = " & CInt(0))
1157 Call ok(getVT(CInt(0)) = "VT_I2", "getVT(CInt(0)) = " & getVT(CInt(0)))
1158 Call ok(CInt(0.0) = 0, "CInt(0.0) = " & CInt(0))
1159 Call ok(getVT(CInt(0.0)) = "VT_I2", "getVT(CInt(0.0)) = " & getVT(CInt(0.0)))
1160 Call ok(CInt(0.5) = 0, "CInt(0.5) = " & CInt(0))
1161 Call ok(getVT(CInt(0.5)) = "VT_I2", "getVT(CInt(0.5)) = " & getVT(CInt(0.5)))
1162 Call ok(CInt(36) = 36, "CInt(36) = " & CInt(36))
1163 Call ok(getVT(CInt(36)) = "VT_I2", "getVT(CInt(36)) = " & getVT(CInt(36)))
1164 Call ok(CInt(36.25) = 36, "CInt(36.25) = " & CInt(36.25))
1165 Call ok(getVT(CInt(36.25)) = "VT_I2", "getVT(CInt(36.25)) = " & getVT(CInt(36.25)))
1166 Call ok(CInt(36.50) = 36, "CInt(36.50) = " & CInt(36.50))
1167 Call ok(getVT(CInt(36.50)) = "VT_I2", "getVT(CInt(36.50)) = " & getVT(CInt(36.50)))
1168 Call ok(CInt(36.75) = 37, "CInt(36.75) = " & CInt(36.75))
1169 Call ok(getVT(CInt(36.75)) = "VT_I2", "getVT(CInt(36.75)) = " & getVT(CInt(36.75)))
1172 Call ok(CBool(5) = true, "CBool(5) = " & CBool(5))
1173 Call ok(getVT(CBool(5)) = "VT_BOOL", "getVT(CBool(5)) = " & getVT(CBool(5)))
1174 Call ok(CBool(0) = false, "CBool(0) = " & CBool(0))
1175 Call ok(getVT(CBool(0)) = "VT_BOOL", "getVT(CBool(0)) = " & getVT(CBool(0)))
1176 Call ok(CBool(-5) = true, "CBool(-5) = " & CBool(-5))
1177 Call ok(getVT(CBool(-5)) = "VT_BOOL", "getVT(CBool(-5)) = " & getVT(CBool(-5)))
1179 Sub testCBoolError(strings, error_num)
1180 on error resume next
1182 Call Err.clear()
1183 Call CBool(strings)
1184 Call ok(Err.number = error_num, "Err.number = " & Err.number)
1185 End Sub
1187 Class ValClass
1188 Public myval
1190 Public default Property Get defprop
1191 defprop = myval
1192 End Property
1193 End Class
1195 Dim MyObject
1196 Set MyObject = New ValClass
1198 Call ok(CBool(Empty) = False, "CBool(Empty) = " & CBool(Empty))
1199 Call ok(getVT(CBool(Empty)) = "VT_BOOL", "getVT(CBool(Empty)) = " & getVT(CBool(Empty)))
1200 Call ok(CBool(1) = True, "CBool(1) = " & CBool(1))
1201 Call ok(getVT(CBool(1)) = "VT_BOOL", "getVT(CBool(1)) = " & getVT(CBool(1)))
1202 Call ok(CBool(0) = False, "CBool(0) = " & CBool(0))
1203 Call ok(getVT(CBool(0)) = "VT_BOOL", "getVT(CBool(0)) = " & getVT(CBool(0)))
1204 Call ok(CBool(-0.56) = True, "CBool(-0.56) = " & CBool(-0.56))
1205 Call ok(getVT(CBool(-0.56)) = "VT_BOOL", "getVT(CBool(-0.56)) = " & getVT(CBool(-0.56)))
1206 Call testCBoolError("", 13)
1207 Call ok(CBool("0") = False, "CBool(""0"") = " & CBool("0"))
1208 Call ok(getVT(CBool("0")) = "VT_BOOL", "getVT(CBool(""0"")) = " & getVT(CBool("0")))
1209 If isEnglishLang Then
1210 Call ok(CBool("0.1") = True, "CBool(""0.1"") = " & CBool("0.1"))
1211 Call ok(getVT(CBool("0.1")) = "VT_BOOL", "getVT(CBool(""0.1"")) = " & getVT(CBool("0.1")))
1212 End If
1213 Call ok(CBool("true") = True, "CBool(""true"") = " & CBool("true"))
1214 Call ok(getVT(CBool("true")) = "VT_BOOL", "getVT(CBool(""true"")) = " & getVT(CBool("true")))
1215 Call ok(CBool("false") = False, "CBool(""false"") = " & CBool("false"))
1216 Call ok(getVT(CBool("false")) = "VT_BOOL", "getVT(CBool(""false"")) = " & getVT(CBool("false")))
1217 Call ok(CBool("TRUE") = True, "CBool(""TRUE"") = " & CBool("TRUE"))
1218 Call ok(getVT(CBool("TRUE")) = "VT_BOOL", "getVT(CBool(""TRUE"")) = " & getVT(CBool("TRUE")))
1219 Call ok(CBool("FALSE") = False, "CBool(""FALSE"") = " & CBool("FALSE"))
1220 Call ok(getVT(CBool("FALSE")) = "VT_BOOL", "getVT(CBool(""FALSE"")) = " & getVT(CBool("FALSE")))
1221 Call ok(CBool("#TRUE#") = True, "CBool(""#TRUE#"") = " & CBool("#TRUE#"))
1222 Call ok(getVT(CBool("#TRUE#")) = "VT_BOOL", "getVT(CBool(""#TRUE#"")) = " & getVT(CBool("#TRUE#")))
1223 Call ok(CBool("#FALSE#") = False, "CBool(""#FALSE#"") = " & CBool("#FALSE#"))
1224 Call ok(getVT(CBool("#FALSE#")) = "VT_BOOL", "getVT(CBool(""#FALSE#"")) = " & getVT(CBool("#FALSE#")))
1225 Call ok(CBool(MyObject) = False, "CBool(MyObject) = " & CBool(MyObject))
1226 Call ok(getVT(CBool(MyObject)) = "VT_BOOL", "getVT(CBool(MyObject)) = " & getVT(CBool(MyObject)))
1227 MyObject.myval = 1
1228 Call ok(CBool(MyObject) = True, "CBool(MyObject) = " & CBool(MyObject))
1229 Call ok(getVT(CBool(MyObject)) = "VT_BOOL", "getVT(CBool(MyObject)) = " & getVT(CBool(MyObject)))
1230 MyObject.myval = 0
1231 Call ok(CBool(MyObject) = False, "CBool(MyObject) = " & CBool(MyObject))
1232 Call ok(getVT(CBool(MyObject)) = "VT_BOOL", "getVT(CBool(MyObject)) = " & getVT(CBool(MyObject)))
1234 Sub testCByteError(strings, error_num1,error_num2)
1235 on error resume next
1236 Dim x
1238 Call Err.clear()
1239 x = CByte(strings)
1240 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1242 Call Err.clear()
1243 Call CByte(strings)
1244 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1245 End Sub
1247 Call ok(CByte(Empty) = 0, "CByte(Empty) = " & CByte(Empty))
1248 Call ok(getVT(CByte(Empty)) = "VT_UI1", "getVT(CByte(Empty)) = " & getVT(CByte(Empty)))
1249 Call ok(CByte(255) = 255, "CByte(255) = " & CByte(255))
1250 Call ok(getVT(CByte(255)) = "VT_UI1", "getVT(CByte(255)) = " & getVT(CByte(255)))
1251 Call ok(CByte(255.49) = 255, "CByte(255.49) = " & CByte(255.49))
1252 Call ok(getVT(CByte(255.49)) = "VT_UI1", "getVT(CByte(255.49)) = " & getVT(CByte(255.49)))
1253 Call testCByteError(1, 0, 458)
1254 Call testCByteError("", 13, 13)
1255 Call testCByteError("-1", 6, 6)
1256 Call testCByteError("258", 6, 6)
1257 Call testCByteError("TRUE", 13, 13)
1258 Call testCByteError("FALSE", 13, 13)
1259 Call testCByteError("#TRue#", 13, 13)
1260 Call testCByteError("#fAlSE#", 13, 13)
1261 If isEnglishLang Then
1262 Call ok(CByte("-0.5") = 0, "CByte(""-0.5"") = " & CByte("-0.5"))
1263 Call ok(getVT(CByte("-0.5")) = "VT_UI1", "getVT(CByte(""-0.5"")) = " & getVT(CByte("-0.5")))
1264 End If
1265 Call ok(CByte(True) = 255, "CByte(True) = " & CByte(True))
1266 Call ok(getVT(CByte(True)) = "VT_UI1", "getVT(CByte(True)) = " & getVT(CByte(True)))
1267 Call ok(CByte(False) = 0, "CByte(False) = " & CByte(False))
1268 Call ok(getVT(CByte(False)) = "VT_UI1", "getVT(CByte(False)) = " & getVT(CByte(False)))
1269 Call ok(CByte(MyObject) = 0, "CByte(MyObject) = " & CByte(MyObject))
1270 Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
1271 MyObject.myval = 1
1272 Call ok(CByte(MyObject) = 1, "CByte(MyObject) = " & CByte(MyObject))
1273 Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
1274 MyObject.myval = 0
1275 Call ok(CByte(MyObject) = 0, "CByte(MyObject) = " & CByte(MyObject))
1276 Call ok(getVT(CByte(MyObject)) = "VT_UI1", "getVT(CByte(MyObject)) = " & getVT(CByte(MyObject)))
1278 Sub testCCurError(strings, error_num1, error_num2)
1279 on error resume next
1280 Dim x
1282 Call Err.clear()
1283 x = CCur(strings)
1284 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1286 Call Err.clear()
1287 Call CCur(strings)
1288 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1289 End Sub
1291 Call ok(CCur(Empty) = 0, "CCur(Empty) = " & CCur(Empty))
1292 Call ok(getVT(CCur(Empty)) = "VT_CY", "getVT(CCur(Empty)) = " & getVT(CCur(Empty)))
1293 Call ok(CCur(-32768) = -32768, "CCur(-32768) = " & CCur(-32768))
1294 Call ok(getVT(CCur(-32768)) = "VT_CY", "getVT(CCur(-32768)) = " & getVT(CCur(-32768)))
1295 Call ok(CCur(32768) = 32768, "CCur(32768) = " & CCur(32768))
1296 Call ok(getVT(CCur(32768)) = "VT_CY", "getVT(CCur(32768)) = " & getVT(CCur(32768)))
1297 Call ok(CCur(0.000149) = 0.0001, "CCur(0.000149) = " & CCur(0.000149))
1298 Call ok(getVT(CCur(0.000149)) = "VT_CY", "getVT(CCur(0.000149)) = " & getVT(CCur(0.000149)))
1299 Call ok(CCur(2147483647.99) = 2147483647.99, "CCur(2147483647.99) = " & CCur(2147483647.99))
1300 Call ok(getVT(CCur(2147483647.99)) = "VT_CY", "getVT(CCur(2147483647.99)) = " & getVT(CCur(2147483647.99)))
1301 Call ok(CCur("-1") = -1, "CCur(""-1"") = " & CCur("-1"))
1302 Call ok(getVT(CCur("-1")) = "VT_CY", "getVT(CCur(""-1"")) = " & getVT(CCur("-1")))
1303 If isEnglishLang Then
1304 Call ok(CCur("-0.5") = -0.5, "CCur(""-0.5"") = " & CCur("-0.5"))
1305 Call ok(getVT(CCur("-0.5")) = "VT_CY", "getVT(CCur(""-0.5"")) = " & getVT(CCur("-0.5")))
1306 End If
1307 Call testCCurError("", 13, 13)
1308 Call testCCurError("-1", 0, 458)
1309 Call testCCurError("TRUE", 13, 13)
1310 Call testCCurError("FALSE", 13, 13)
1311 Call testCCurError("#TRue#", 13, 13)
1312 Call testCCurError("#fAlSE#", 13, 13)
1313 Call testCCurError(1, 0, 458)
1314 Call ok(CCur(True) = -1, "CCur(True) = " & CCur(True))
1315 Call ok(getVT(CCur(True)) = "VT_CY", "getVT(CCur(True)) = " & getVT(CCur(True)))
1316 Call ok(CCur(False) = 0, "CCur(False) = " & CCur(False))
1317 Call ok(getVT(CCur(False)) = "VT_CY", "getVT(CCur(False)) = " & getVT(CCur(False)))
1318 MyObject.myval = 0.1
1319 Call ok(CCur(MyObject) = 0.1, "CCur(MyObject) = " & CCur(MyObject))
1320 Call ok(getVT(CCur(MyObject)) = "VT_CY", "getVT(CCur(MyObject)) = " & getVT(CCur(MyObject)))
1321 MyObject.myval = 0
1322 Call ok(CCur(MyObject) = 0, "CCur(MyObject) = " & CCur(MyObject))
1323 Call ok(getVT(CCur(MyObject)) = "VT_CY", "getVT(CCur(MyObject)) = " & getVT(CCur(MyObject)))
1325 Sub testCDateError(strings, error_num1, error_num2)
1326 on error resume next
1327 Dim x
1329 Call Err.clear()
1330 x = CDate(strings)
1331 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1333 Call Err.clear()
1334 Call CDate(strings)
1335 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1336 End Sub
1338 Call ok(CDate(Empty) = 0, "CDate(Empty) = " & CDate(Empty))
1339 Call ok(getVT(CDate(Empty)) = "VT_DATE", "getVT(CDate(Empty)) = " & getVT(CDate(Empty)))
1340 Call ok(CDate(0) = 0, "CDate(0) = " & CDate(0))
1341 Call ok(getVT(CDate(0)) = "VT_DATE", "getVT(CDate(0)) = " & getVT(CDate(0)))
1342 Call ok(CDate(1) = #1899-12-31#, "CDate(1) = " & CDate(1))
1343 Call ok(getVT(CDate(1)) = "VT_DATE", "getVT(CDate(1)) = " & getVT(CDate(1)))
1344 Call ok(CDate("1") = #1899-12-31#, "CDate(""1"") = " & CDate("1"))
1345 Call ok(getVT(CDate("1")) = "VT_DATE", "getVT(CDate(""1"")) = " & getVT(CDate("1")))
1346 If isEnglishLang Then
1347 Call ok(CDate("1/1/2000") = #2000-1-1#, "CDate(""1/1/2000"") = " & CDate("1/1/2000"))
1348 Call ok(getVT(CDate("1/1/2000")) = "VT_DATE", "getVT(CDate(""1/1/2000"")) = " & getVT(CDate("1/1/2000")))
1349 End If
1350 Call ok(CDate(-1) = #1899-12-29#, "CDate(-1) = " & CDate(-1))
1351 Call ok(getVT(CDate(-1)) = "VT_DATE", "getVT(CDate(-1)) = " & getVT(CDate(-1)))
1352 Call ok(CDate(100000) = #2173-10-14#, "CDate(100000) = " & CDate(100000))
1353 Call ok(getVT(CDate(100000)) = "VT_DATE", "getVT(CDate(100000)) = " & getVT(CDate(100000)))
1354 Call testCDateError("", 13, 13)
1355 Call testCDateError(null, 94, 94)
1356 Call testCDateError(1, 0, 458)
1358 Sub testCDblError(strings, error_num1, error_num2)
1359 on error resume next
1360 Dim x
1362 Call Err.clear()
1363 x = CDbl(strings)
1364 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1366 Call Err.clear()
1367 Call CDbl(strings)
1368 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1369 End Sub
1371 Call ok(CDbl(Empty) = 0, "CDbl(Empty) = " & CDbl(Empty))
1372 Call ok(getVT(CDbl(Empty)) = "VT_R8", "getVT(CDbl(Empty)) = " & getVT(CDbl(Empty)))
1373 Call ok(CDbl(CByte(0)) = 0, "CDbl(CByte(0)) = " & CDbl(CByte(0)))
1374 Call ok(getVT(CDbl(CCur(0))) = "VT_R8", "getVT(CDbl(CCur(0))) = " & getVT(CDbl(CCur(0))))
1375 Call ok(CDbl(CCur(0)) = 0, "CDbl(CCur(0)) = " & CDbl(CCur(0)))
1376 Call ok(getVT(CDbl(CCur(0))) = "VT_R8", "getVT(CDbl(CCur(0))) = " & getVT(CDbl(CCur(0))))
1377 Call ok(CDbl(0) = 0, "CDbl(0) = " & CDbl(0))
1378 Call ok(getVT(CDbl(0)) = "VT_R8", "getVT(CDbl(0)) = " & getVT(CDbl(0)))
1379 Call ok(CDbl(32768) = 32768, "CDbl(32768) = " & CDbl(32768))
1380 Call ok(getVT(CDbl(32768)) = "VT_R8", "getVT(CDbl(32768)) = " & getVT(CDbl(32768)))
1381 Call ok(CDbl(0.001 * 0.001) = 0.000001, "CDbl(0.001 * 0.001) = " & CDbl(0.001 * 0.001))
1382 Call ok(getVT(CDbl(0.001 * 0.001)) = "VT_R8", "getVT(CDbl(0.001 * 0.001)) = " & getVT(CDbl(0.001 * 0.001)))
1383 Call ok(CDbl("-1") = -1, "CDbl(""-1"") = " & CDbl("-1"))
1384 Call ok(getVT(CDbl("-1")) = "VT_R8", "getVT(CDbl(""-1"")) = " & getVT(CDbl("-1")))
1385 If isEnglishLang Then
1386 Call ok(CDbl("-0.5") = -0.5, "CDbl(""-0.5"") = " & CDbl("-0.5"))
1387 Call ok(getVT(CDbl("-0.5")) = "VT_R8", "getVT(CDbl(""-0.5"")) = " & getVT(CDbl("-0.5")))
1388 End If
1389 Call testCDblError("", 13, 13)
1390 Call testCDblError("TRUE", 13, 13)
1391 Call testCDblError("FALSE", 13, 13)
1392 Call testCDblError("#TRue#", 13, 13)
1393 Call testCDblError("#fAlSE#", 13, 13)
1394 Call testCDblError(1, 0, 458)
1395 Call ok(CDbl(True) = -1, "CDbl(True) = " & CDbl(True))
1396 Call ok(getVT(CDbl(True)) = "VT_R8", "getVT(CDbl(True)) = " & getVT(CDbl(True)))
1397 Call ok(CDbl(False) = 0, "CDbl(False) = " & CDbl(False))
1398 Call ok(getVT(CDbl(False)) = "VT_R8", "getVT(CDbl(False)) = " & getVT(CDbl(False)))
1399 MyObject.myval = 0.1
1400 Call ok(CDbl(MyObject) = 0.1, "CDbl(MyObject) = " & CDbl(MyObject))
1401 Call ok(getVT(CDbl(MyObject)) = "VT_R8", "getVT(CDbl(MyObject)) = " & getVT(CDbl(MyObject)))
1402 MyObject.myval = 0
1403 Call ok(CDbl(MyObject) = 0, "CDbl(MyObject) = " & CDbl(MyObject))
1404 Call ok(getVT(CDbl(MyObject)) = "VT_R8", "getVT(CDbl(MyObject)) = " & getVT(CDbl(MyObject)))
1406 Sub testCLngError(strings, error_num1, error_num2)
1407 on error resume next
1408 Dim x
1410 Call Err.clear()
1411 x = CLng(strings)
1412 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1414 Call Err.clear()
1415 Call CLng(strings)
1416 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1417 End Sub
1419 Call ok(CLng(Empty) = 0, "CLng(Empty) = " & CLng(Empty))
1420 Call ok(getVT(CLng(Empty)) = "VT_I4", "getVT(CLng(Empty)) = " & getVT(CLng(Empty)))
1421 Call ok(CLng(CByte(0)) = 0, "CLng(CByte(0)) = " & CLng(CByte(0)))
1422 Call ok(getVT(CLng(CCur(0))) = "VT_I4", "getVT(CLng(CCur(0))) = " & getVT(CLng(CCur(0))))
1423 Call ok(CLng(CCur(0)) = 0, "CLng(CCur(0)) = " & CLng(CCur(0)))
1424 Call ok(getVT(CLng(CCur(0))) = "VT_I4", "getVT(CLng(CCur(0))) = " & getVT(CLng(CCur(0))))
1425 Call ok(CLng(0) = 0, "CLng(0) = " & CLng(0))
1426 Call ok(getVT(CLng(0)) = "VT_I4", "getVT(CLng(0)) = " & getVT(CLng(0)))
1427 Call ok(CLng(0.49) = 0, "CLng(0.49) = " & CLng(0.49))
1428 Call ok(getVT(CLng(0.49)) = "VT_I4", "getVT(CLng(0.49)) = " & getVT(CLng(0.49)))
1429 Call ok(CLng(0.5) = 0, "CLng(0.5) = " & CLng(0.5))
1430 Call ok(getVT(CLng(0.5)) = "VT_I4", "getVT(CLng(0.5)) = " & getVT(CLng(0.5)))
1431 Call ok(CLng(0.51) = 1, "CLng(0.51) = " & CLng(0.51))
1432 Call ok(getVT(CLng(0.51)) = "VT_I4", "getVT(CLng(0.51)) = " & getVT(CLng(0.51)))
1433 Call ok(CLng(1.49) = 1, "CLng(1.49) = " & CLng(1.49))
1434 Call ok(getVT(CLng(1.49)) = "VT_I4", "getVT(CLng(1.49)) = " & getVT(CLng(1.49)))
1435 Call ok(CLng(1.5) = 2, "CLng(1.5) = " & CLng(1.5))
1436 Call ok(getVT(CLng(1.5)) = "VT_I4", "getVT(CLng(1.5)) = " & getVT(CLng(1.5)))
1437 Call ok(CLng(1.51) = 2, "CLng(1.51) = " & CLng(1.51))
1438 Call ok(getVT(CLng(1.51)) = "VT_I4", "getVT(CLng(1.51)) = " & getVT(CLng(1.51)))
1439 Call ok(CLng("-1") = -1, "CLng(""-1"") = " & CLng("-1"))
1440 Call ok(getVT(CLng("-1")) = "VT_I4", "getVT(CLng(""-1"")) = " & getVT(CLng("-1")))
1441 If isEnglishLang Then
1442 Call ok(CLng("-0.5") = 0, "CLng(""-0.5"") = " & CLng("-0.5"))
1443 Call ok(getVT(CLng("-0.5")) = "VT_I4", "getVT(CLng(""-0.5"")) = " & getVT(CLng("-0.5")))
1444 End If
1445 Call testCLngError("", 13, 13)
1446 Call testCLngError("TRUE", 13, 13)
1447 Call testCLngError("FALSE", 13, 13)
1448 Call testCLngError("#TRue#", 13, 13)
1449 Call testCLngError("#fAlSE#", 13, 13)
1450 Call testCLngError(1, 0, 458)
1451 Call ok(CLng(True) = -1, "CLng(True) = " & CLng(True))
1452 Call ok(getVT(CLng(True)) = "VT_I4", "getVT(CLng(True)) = " & getVT(CLng(True)))
1453 Call ok(CLng(False) = 0, "CLng(False) = " & CLng(False))
1454 Call ok(getVT(CLng(False)) = "VT_I4", "getVT(CLng(False)) = " & getVT(CLng(False)))
1455 MyObject.myval = 1
1456 Call ok(CLng(MyObject) = 1, "CLng(MyObject) = " & CLng(MyObject))
1457 Call ok(getVT(CLng(MyObject)) = "VT_I4", "getVT(CLng(MyObject)) = " & getVT(CLng(MyObject)))
1458 MyObject.myval = 0
1459 Call ok(CLng(MyObject) = 0, "CLng(MyObject) = " & CLng(MyObject))
1460 Call ok(getVT(CLng(MyObject)) = "VT_I4", "getVT(CLng(MyObject)) = " & getVT(CLng(MyObject)))
1462 Sub testCIntError(strings, error_num1, error_num2)
1463 on error resume next
1464 Dim x
1466 Call Err.clear()
1467 x = CInt(strings)
1468 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1470 Call Err.clear()
1471 Call CInt(strings)
1472 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1473 End Sub
1475 Call ok(CInt(Empty) = 0, "CInt(Empty) = " & CInt(Empty))
1476 Call ok(getVT(CInt(Empty)) = "VT_I2", "getVT(CInt(Empty)) = " & getVT(CInt(Empty)))
1477 Call ok(CInt(CByte(0)) = 0, "CInt(CByte(0)) = " & CInt(CByte(0)))
1478 Call ok(getVT(CInt(CByte(0))) = "VT_I2", "getVT(CInt(CByte(0))) = " & getVT(CInt(CByte(0))))
1479 Call ok(CInt(CCur(0)) = 0, "CInt(CCur(0)) = " & CInt(CCur(0)))
1480 Call ok(getVT(CInt(CCur(0))) = "VT_I2", "getVT(CInt(CCur(0))) = " & getVT(CInt(CCur(0))))
1481 Call ok(CInt(0.49) = 0, "CInt(0.49) = " & CInt(0.49))
1482 Call ok(getVT(CInt(0.49)) = "VT_I2", "getVT(CInt(0.49)) = " & getVT(CInt(0.49)))
1483 Call ok(CInt(0.5) = 0, "CInt(0.5) = " & CInt(0.5))
1484 Call ok(getVT(CInt(0.5)) = "VT_I2", "getVT(CInt(0.5)) = " & getVT(CInt(0.5)))
1485 Call ok(CInt(0.51) = 1, "CInt(0.51) = " & CInt(0.51))
1486 Call ok(getVT(CInt(0.51)) = "VT_I2", "getVT(CInt(0.51)) = " & getVT(CInt(0.51)))
1487 Call ok(CInt(1.49) = 1, "CInt(0.49) = " & CInt(0.49))
1488 Call ok(getVT(CInt(0.49)) = "VT_I2", "getVT(CInt(0.49)) = " & getVT(CInt(0.49)))
1489 Call ok(CInt(1.5) = 2, "CInt(1.5) = " & CInt(1.5))
1490 Call ok(getVT(CInt(1.5)) = "VT_I2", "getVT(CInt(1.5)) = " & getVT(CInt(1.5)))
1491 Call ok(CInt(1.51) = 2, "CInt(1.51) = " & CInt(1.51))
1492 Call ok(getVT(CInt(1.51)) = "VT_I2", "getVT(CInt(1.51)) = " & getVT(CInt(1.51)))
1493 Call ok(CInt("-1") = -1, "CInt(""-1"") = " & CInt("-1"))
1494 Call ok(getVT(CInt("-1")) = "VT_I2", "getVT(CInt(""-1"")) = " & getVT(CInt("-1")))
1495 If isEnglishLang Then
1496 Call ok(CInt("-0.5") = 0, "CInt(""-0.5"") = " & CInt("-0.5"))
1497 Call ok(getVT(CInt("-0.5")) = "VT_I2", "getVT(CInt(""-0.5"")) = " & getVT(CInt("-0.5")))
1498 End If
1499 Call testCIntError("", 13, 13)
1500 Call testCIntError("-1", 0, 458)
1501 Call testCIntError("TRUE", 13, 13)
1502 Call testCIntError("FALSE", 13, 13)
1503 Call testCIntError("#TRue#", 13, 13)
1504 Call testCIntError("#fAlSE#", 13, 13)
1505 Call testCIntError(1, 0, 458)
1506 Call testCIntError(32767.49, 0, 458)
1507 Call testCIntError(32767.5, 6, 6)
1508 Call testCIntError(-32768.5, 0, 458)
1509 Call testCIntError(-32768.51, 6, 6)
1510 Call ok(CInt(True) = -1, "CInt(True) = " & CInt(True))
1511 Call ok(getVT(CInt(True)) = "VT_I2", "getVT(CInt(True)) = " & getVT(CInt(True)))
1512 Call ok(CInt(False) = 0, "CInt(False) = " & CInt(False))
1513 Call ok(getVT(CInt(False)) = "VT_I2", "getVT(CInt(False)) = " & getVT(CInt(False)))
1514 MyObject.myval = 2.5
1515 Call ok(CInt(MyObject) = 2, "CInt(MyObject) = " & CInt(MyObject))
1516 Call ok(getVT(CInt(MyObject)) = "VT_I2", "getVT(CInt(MyObject)) = " & getVT(CInt(MyObject)))
1517 MyObject.myval = 1.5
1518 Call ok(CInt(MyObject) = 2, "CInt(MyObject) = " & CInt(MyObject))
1519 Call ok(getVT(CInt(MyObject)) = "VT_I2", "getVT(CInt(MyObject)) = " & getVT(CInt(MyObject)))
1521 Sub testCSngError(strings, error_num1, error_num2)
1522 on error resume next
1523 Dim x
1525 Call Err.clear()
1526 x = CSng(strings)
1527 Call ok(Err.number = error_num1, "Err.number = " & Err.number)
1529 Call Err.clear()
1530 Call CSng(strings)
1531 Call ok(Err.number = error_num2, "Err.number = " & Err.number)
1532 End Sub
1534 Call ok(CSng(Empty) = 0, "CSng(Empty) = " & CSng(Empty))
1535 Call ok(getVT(CSng(Empty)) = "VT_R4", "getVT(CSng(Empty)) = " & getVT(CSng(Empty)))
1536 Call ok(CSng(CByte(0)) = 0, "CSng(CByte(0)) = " & CSng(CByte(0)))
1537 Call ok(getVT(CSng(CCur(0))) = "VT_R4", "getVT(CSng(CCur(0))) = " & getVT(CSng(CCur(0))))
1538 Call ok(CSng(CCur(0)) = 0, "CSng(CCur(0)) = " & CSng(CCur(0)))
1539 Call ok(getVT(CSng(CCur(0))) = "VT_R4", "getVT(CSng(CCur(0))) = " & getVT(CSng(CCur(0))))
1540 Call ok(CSng(0) = 0, "CSng(0) = " & CSng(0))
1541 Call ok(getVT(CSng(0)) = "VT_R4", "getVT(CSng(0)) = " & getVT(CSng(0)))
1542 Call ok(CSng(32768) = 32768, "CSng(32768) = " & CSng(32768))
1543 Call ok(getVT(CSng(32768)) = "VT_R4", "getVT(CSng(32768)) = " & getVT(CSng(32768)))
1544 Call ok(CSng(0.001 * 0.001) = 0.000001, "CSng(0.001 * 0.001) = " & CSng(0.001 * 0.001))
1545 Call ok(getVT(CSng(0.001 * 0.001)) = "VT_R4", "getVT(CSng(0.001 * 0.001)) = " & getVT(CSng(0.001 * 0.001)))
1546 Call ok(CSng("-1") = -1, "CSng(""-1"") = " & CSng("-1"))
1547 Call ok(getVT(CSng("-1")) = "VT_R4", "getVT(CSng(""-1"")) = " & getVT(CSng("-1")))
1548 If isEnglishLang Then
1549 Call ok(CSng("-0.5") = -0.5, "CSng(""-0.5"") = " & CSng("-0.5"))
1550 Call ok(getVT(CSng("-0.5")) = "VT_R4", "getVT(CSng(""-0.5"")) = " & getVT(CSng("-0.5")))
1551 End If
1552 Call testCSngError("", 13, 13)
1553 Call testCSngError("TRUE", 13, 13)
1554 Call testCSngError("FALSE", 13, 13)
1555 Call testCSngError("#TRue#", 13, 13)
1556 Call testCSngError("#fAlSE#", 13, 13)
1557 Call testCSngError(1, 0, 458)
1558 Call ok(CSng(True) = -1, "CSng(True) = " & CSng(True))
1559 Call ok(getVT(CSng(True)) = "VT_R4", "getVT(CSng(True)) = " & getVT(CSng(True)))
1560 Call ok(CSng(False) = 0, "CSng(False) = " & CSng(False))
1561 Call ok(getVT(CSng(False)) = "VT_R4", "getVT(CSng(False)) = " & getVT(CSng(False)))
1562 MyObject.myval = 0.1
1563 Call ok(CSng(MyObject) = 0.1, "CSng(MyObject) = " & CSng(MyObject))
1564 Call ok(getVT(CSng(MyObject)) = "VT_R4", "getVT(CSng(MyObject)) = " & getVT(CSng(MyObject)))
1565 MyObject.myval = 0
1566 Call ok(CSng(MyObject) = 0, "CSng(MyObject) = " & CSng(MyObject))
1567 Call ok(getVT(CSng(MyObject)) = "VT_R4", "getVT(CSng(MyObject)) = " & getVT(CSng(MyObject)))
1569 Call ok(TypeName(Empty) = "Empty", "TypeName(MyEmpty) = " & TypeName(Empty))
1570 Call ok(getVT(TypeName(Empty)) = "VT_BSTR", "getVT(TypeName(Empty)) = " & getVT(TypeName(Empty)))
1571 Call ok(TypeName(Null) = "Null", "TypeName(Null) = " & TypeName(Null))
1572 Call ok(getVT(TypeName(Null)) = "VT_BSTR", "getVT(TypeName(Null)) = " & getVT(TypeName(Null)))
1573 Call ok(TypeName(CByte(255)) = "Byte", "TypeName(CByte(255)) = " & TypeName(CByte(255)))
1574 Call ok(getVT(TypeName(CByte(255))) = "VT_BSTR", "getVT(TypeName(CByte(255))) = " & getVT(TypeName(CByte(255))))
1575 Call ok(TypeName(255) = "Integer", "TypeName(255) = " & TypeName(255))
1576 Call ok(getVT(TypeName(255)) = "VT_BSTR", "getVT(TypeName(255)) = " & getVT(TypeName(255)))
1577 Call ok(TypeName(32768) = "Long", "TypeName(32768) = " & TypeName(32768))
1578 Call ok(getVT(TypeName(32768)) = "VT_BSTR", "getVT(TypeName(32768)) = " & getVT(TypeName(32768)))
1579 Call ok(TypeName(CSng(0.5)) = "Single", "TypeName(CSng(0.5)) = " & TypeName(CSng(0.5)))
1580 Call ok(getVT(TypeName(CSng(0.5))) = "VT_BSTR", "getVT(TypeName(CSng(0.5))) = " & getVT(TypeName(CSng(0.5))))
1581 Call ok(TypeName(-0.5) = "Double", "TypeName(-0.5) = " & TypeName(-0.5))
1582 Call ok(getVT(TypeName(-0.5)) = "VT_BSTR", "getVT(TypeName(-0.5)) = " & getVT(TypeName(-0.5)))
1583 Call ok(TypeName(CCur(0.5)) = "Currency", "TypeName(CCur(0.5)) = " & TypeName(CCur(0.5)))
1584 Call ok(getVT(TypeName(CCur(0.5))) = "VT_BSTR", "getVT(TypeName(CCur(0.5))) = " & getVT(TypeName(CCur(0.5))))
1585 Call ok(TypeName(CStr(0.5)) = "String", "TypeName(CStr(0.5)) = " & TypeName(CStr(0.5)))
1586 Call ok(getVT(TypeName(CStr(0.5))) = "VT_BSTR", "getVT(TypeName(CStr(0.5))) = " & getVT(TypeName(CStr(0.5))))
1587 Call ok(TypeName(True) = "Boolean", "TypeName(True) = " & TypeName(True))
1588 Call ok(getVT(TypeName(True)) = "VT_BSTR", "getVT(TypeName(True)) = " & getVT(TypeName(True)))
1589 Call ok(TypeName(arr) = "Variant()", "TypeName(arr) = " & TypeName(arr))
1590 Call ok(getVT(TypeName(arr)) = "VT_BSTR", "getVT(TypeName(arr)) = " & getVT(TypeName(arr)))
1591 Call ok(TypeName(collectionObj) = "Object", "TypeName(collectionObj) = " & TypeName(collectionObj))
1592 Dim regex
1593 set regex = new RegExp
1594 Call ok(TypeName(regex) = "IRegExp2", "TypeName(regex) = " & TypeName(regex))
1596 Call ok(VarType(Empty) = vbEmpty, "VarType(Empty) = " & VarType(Empty))
1597 Call ok(getVT(VarType(Empty)) = "VT_I2", "getVT(VarType(Empty)) = " & getVT(VarType(Empty)))
1598 Call ok(VarType(Null) = vbNull, "VarType(Null) = " & VarType(Null))
1599 Call ok(getVT(VarType(Null)) = "VT_I2", "getVT(VarType(Null)) = " & getVT(VarType(Null)))
1600 Call ok(VarType(255) = vbInteger, "VarType(255) = " & VarType(255))
1601 Call ok(getVT(VarType(255)) = "VT_I2", "getVT(VarType(255)) = " & getVT(VarType(255)))
1602 set x = new EmptyClass
1603 Call ok(VarType(x) = vbObject, "VarType(x) = " & VarType(x))
1604 Call ok(getVT(VarType(x)) = "VT_I2", "getVT(VarType(x)) = " & getVT(VarType(x)))
1605 Call ok(VarType(32768) = vbLong, "VarType(32768) = " & VarType(32768))
1606 Call ok(getVT(VarType(32768)) = "VT_I2", "getVT(VarType(32768)) = " & getVT(VarType(32768)))
1607 Call ok(VarType(CSng(0.5)) = vbSingle, "VarType(CSng(0.5)) = " & VarType(CSng(0.5)))
1608 Call ok(getVT(VarType(CSng(0.5))) = "VT_I2", "getVT(VarType(CSng(0.5))) = " & getVT(VarType(CSng(0.5))))
1609 Call ok(VarType(-0.5) = vbDouble, "VarType(-0.5) = " & VarType(-0.5))
1610 Call ok(getVT(VarType(-0.5)) = "VT_I2", "getVT(VarType(-0.5)) = " & getVT(VarType(-0.5)))
1611 Call ok(VarType(CCur(0.5)) = vbCurrency, "VarType(CCur(0.5)) = " & VarType(CCur(0.5)))
1612 Call ok(getVT(VarType(CCur(0.5))) = "VT_I2", "getVT(VarType(CCur(0.5))) = " & getVT(VarType(CCur(0.5))))
1613 Call ok(VarType(CStr(0.5)) = vbString, "VarType(CStr(0.5)) = " & VarType(CStr(0.5)))
1614 Call ok(getVT(VarType(CStr(0.5))) = "VT_I2", "getVT(VarType(CStr(0.5))) = " & getVT(VarType(CStr(0.5))))
1615 Call ok(VarType(CBool(0.5)) = vbBoolean, "VarType(CBool(0.5)) = " & VarType(CBool(0.5)))
1616 Call ok(getVT(VarType(CBool(0.5))) = "VT_I2", "getVT(VarType(CBool(0.5))) = " & getVT(VarType(CBool(0.5))))
1617 Call ok(VarType(CByte(255)) = vbByte, "VarType(CByte(255)) = " & VarType(CByte(255)))
1618 Call ok(getVT(VarType(CByte(255))) = "VT_I2", "getVT(VarType(CByte(255))) = " & getVT(VarType(CByte(255))))
1619 Call ok(VarType(arr) = (vbArray or vbVariant), "VarType(arr) = " & VarType(arr))
1620 Call ok(getVT(VarType(arr)) = "VT_I2", "getVT(VarType(arr)) = " & getVT(VarType(arr)))
1622 Call ok(Sgn(Empty) = 0, "Sgn(MyEmpty) = " & Sgn(Empty))
1623 Call ok(getVT(Sgn(Empty)) = "VT_I2", "getVT(Sgn(MyEmpty)) = " & getVT(Sgn(Empty)))
1624 Call ok(Sgn(0) = 0, "Sgn(0) = " & Sgn(0))
1625 Call ok(getVT(Sgn(0)) = "VT_I2", "getVT(Sgn(0)) = " & getVT(Sgn(0)))
1626 Call ok(Sgn(-32769) = -1, "Sgn(-32769) = " & Sgn(-32769))
1627 Call ok(getVT(Sgn(-32769)) = "VT_I2", "getVT(Sgn(-32769)) = " & getVT(Sgn(-32769)))
1628 Call ok(Sgn(CSng(-0.5)) = -1, "Sgn(CSng(-0.5)) = " & Sgn(CSng(-0.5)))
1629 Call ok(getVT(Sgn(CSng(-0.5))) = "VT_I2", "getVT(Sgn(CSng(-0.5))) = " & getVT(Sgn(CSng(-0.5))))
1630 Call ok(Sgn(0.5) = 1, "Sgn(0.5) = " & Sgn(0.5))
1631 Call ok(getVT(Sgn(0.5)) = "VT_I2", "getVT(Sgn(0.5)) = " & getVT(Sgn(0.5)))
1632 Call ok(Sgn(CCur(-1)) = -1, "Sgn(CCur(-1)) = " & Sgn(CCur(-1)))
1633 Call ok(getVT(Sgn(CCur(-1))) = "VT_I2", "getVT(Sgn(CCur(-1))) = " & getVT(Sgn(CCur(-1))))
1634 Call ok(Sgn(CStr(-1)) = -1, "Sgn(CStr(-1)) = " & Sgn(CStr(-1)))
1635 Call ok(getVT(Sgn(CStr(-1))) = "VT_I2", "getVT(Sgn(CStr(-1))) = " & getVT(Sgn(CStr(-1))))
1636 Call ok(Sgn(False) = 0, "Sgn(False) = " & Sgn(False))
1637 Call ok(getVT(Sgn(False)) = "VT_I2", "getVT(Sgn(False)) = " & getVT(Sgn(False)))
1638 Call ok(Sgn(True) = -1, "Sgn(True) = " & Sgn(True))
1639 Call ok(getVT(Sgn(True)) = "VT_I2", "getVT(Sgn(True)) = " & getVT(Sgn(True)))
1640 Call ok(Sgn(CByte(1)) = 1, "Sgn(CByte(1)) = " & Sgn(CByte(1)))
1641 Call ok(getVT(Sgn(CByte(1))) ="VT_I2", "getVT(Sgn(CByte(1))) = " & getVT(Sgn(CByte(1))))
1643 Sub testSgnError(strings, error_num)
1644 on error resume next
1646 Call Err.clear()
1647 Call Sgn(strings)
1648 Call ok(Err.number = error_num, "Err.number = " & Err.number)
1649 End Sub
1651 Call testSgnError(Null, 94)
1653 Call ok(Abs(Empty) = 0, "Abs(Empty) = " & Abs(Empty))
1654 Call ok(getVT(Abs(Empty)) = "VT_I2", "getVT(Abs(Empty)) = " & getVT(Abs(Empty)))
1655 Call ok(IsNull(Abs(Null)), "Is Abs(Null) not Null?")
1656 Call ok(getVT(Abs(Null)) = "VT_NULL", "getVT(Abs(Null)) = " & getVT(Abs(Null)))
1657 Call ok(Abs(0) = 0, "Abs(0) = " & Abs(0))
1658 Call ok(getVT(Abs(0)) = "VT_I2", "getVT(Abs(0)) = " & getVT(Abs(0)))
1659 Call ok(Abs(-32769) = 32769, "Abs(-32769) = " & Abs(-32769))
1660 Call ok(getVT(Abs(-32769)) = "VT_I4", "getVT(Abs(-32769)) = " & getVT(Abs(-32769)))
1661 Call ok(Abs(CSng(-0.5)) = 0.5, "Abs(CSng(-0.5)) = " & Abs(CSng(-0.5)))
1662 Call ok(getVT(Abs(CSng(-0.5))) = "VT_R4", "getVT(Abs(CSng(-0.5))) = " & getVT(Abs(CSng(-0.5))))
1663 Call ok(Abs(0.5) = 0.5, "Abs(0.5) = " & Abs(0.5))
1664 Call ok(getVT(Abs(0.5)) = "VT_R8", "getVT(Abs(0.5)) = " & getVT(Abs(0.5)))
1665 Call ok(Abs(CCur(-1)) = 1, "Abs(CCur(-1)) = " & Abs(CCur(-1)))
1666 Call ok(getVT(Abs(CCur(-1))) = "VT_CY", "getVT(Abs(CCur(-1))) = " & getVT(Abs(CCur(-1))))
1667 Call ok(Abs("-1") = 1, "Abs(""-1"") = " & Abs("-1"))
1668 Call ok(getVT(Abs("-1")) = "VT_R8", "getVT(Abs(""-1"")) = " & getVT(Abs("-1")))
1669 Call ok(Abs(False) = 0, "Abs(False) = " & Abs(False))
1670 Call ok(getVT(Abs(False)) = "VT_I2", "getVT(Abs(False)) = " & getVT(Abs(False)))
1671 Call ok(Abs(True) = 1, "Abs(True) = " & Abs(True))
1672 Call ok(getVT(Abs(True)) = "VT_I2", "getVT(Abs(True)) = " & getVT(Abs(True)))
1673 Call ok(Abs(CByte(1)) = 1, "Abs(CByte(1)) = " & Abs(CByte(1)))
1674 Call ok(getVT(Abs(CByte(1))) = "VT_UI1", "getVT(Abs(CByte(1))) = " & getVT(Abs(CByte(1))))
1675 Call ok(Abs("30000") = 30000, "Abs(""30000"") = " & Abs("30000"))
1677 Sub testAbsError(strings, error_num1, error_num2)
1678 on error resume next
1679 Dim x
1681 Call Err.clear()
1682 x = Abs(strings)
1683 Call ok(Err.number = error_num1, "Err.number1 = " & Err.number)
1685 Call Err.clear()
1686 Call Abs(strings)
1687 Call ok(Err.number = error_num2, "Err.number2 = " & Err.number)
1688 End Sub
1690 Call testAbsError("strings", 13, 13)
1691 Call testAbsError(-4, 0, 0)
1693 Call ok(ScriptEngine = "VBScript", "Is scriptengine not VBScript?")
1694 Call ok(getVT(ScriptEngine) = "VT_BSTR", "getVT(ScriptEngine) = " & getVT(ScriptEngine))
1696 Call ok(getVT(ScriptEngineBuildVersion) = "VT_I4", "getVT(ScriptEngineBuildVersion) = " & getVT(ScriptEngineBuildVersion))
1698 Call ok(getVT(ScriptEngineMajorVersion) = "VT_I4", "getVT(ScriptEngineMajorVersion) = " & getVT(ScriptEngineMajorVersion))
1700 Call ok(getVT(ScriptEngineMinorVersion) = "VT_I4", "getVT(ScriptEngineMinorVersion) = " & getVT(ScriptEngineMinorVersion))
1702 Call ok(Fix(Empty) = 0, "Fix(Empty) = " & Fix(Empty))
1703 Call ok(getVT(Fix(Empty)) = "VT_I2", "getVT(Fix(Empty)) = " & getVT(Fix(Empty)))
1704 Call ok(Fix(CCur(-0.99)) = 0, "Fix(CCur(-0.99)) = " & Fix(CCur(-0.99)))
1705 Call ok(getVT(Fix(CCur(-0.99))) = "VT_CY", "getVT(Fix(CCur(-0.99))) = " & getVT(Fix(CCur(-0.99))))
1706 Call ok(Fix(1.99) = 1, "Fix(1.99) = " & Fix(1.99))
1707 Call ok(getVT(Fix(1.99)) = "VT_R8", "getVT(Fix(1.99)) = " & getVT(Fix(1.99)))
1708 Call ok(Fix(-1.99) = -1, "Fix(-1.99) = " & Fix(-1.99))
1709 Call ok(getVT(Fix(-1.99)) = "VT_R8", "getVT(Fix(-1.99)) = " & getVT(Fix(-1.99)))
1710 If isEnglishLang Then
1711 Call ok(Fix("1.99") = 1, "Fix(""1.99"") = " & Fix("1.99"))
1712 Call ok(getVT(Fix("1.99")) = "VT_R8", "getVT(Fix(""1.99"")) = " & getVT(Fix("1.99")))
1713 Call ok(Fix("-1.99") = -1, "Fix(""-1.99"") = " & Fix("-1.99"))
1714 Call ok(getVT(Fix("-1.99")) = "VT_R8", "getVT(Fix(""-1.99"")) = " & getVT(Fix("-1.99")))
1715 End If
1716 Call ok(Fix(True) = -1, "Fix(True) = " & Fix(True))
1717 Call ok(getVT(Fix(True)) = "VT_I2", "getVT(Fix(True)) = " & getVT(Fix(True)))
1718 Call ok(Fix(False) = 0, "Fix(False) = " & Fix(False))
1719 Call ok(getVT(Fix(False)) = "VT_I2", "getVT(Fix(False)) = " & getVT(Fix(False)))
1720 MyObject.myval = 2.5
1721 Call ok(Fix(MyObject) = 2, "Fix(MyObject) = " & Fix(MyObject))
1722 Call ok(getVT(Fix(MyObject)) = "VT_R8", "getVT(Fix(MyObject)) = " & getVT(Fix(MyObject)))
1723 MyObject.myval = -2.5
1724 Call ok(Fix(MyObject) = -2, "Fix(MyObject) = " & Fix(MyObject))
1725 Call ok(getVT(Fix(MyObject)) = "VT_R8", "getVT(Fix(MyObject)) = " & getVT(Fix(MyObject)))
1727 Call ok(Int(Empty) = 0, "Int(Empty) = " & Int(Empty))
1728 Call ok(getVT(Int(Empty)) = "VT_I2", "getVT(Int(Empty)) = " & getVT(Int(Empty)))
1729 Call ok(Int(CCur(-0.99)) = -1, "Int(CCur(-0.99)) = " & Int(CCur(-0.99)))
1730 Call ok(getVT(Int(CCur(-0.99))) = "VT_CY", "getVT(Int(CCur(-0.99))) = " & getVT(Int(CCur(-0.99))))
1731 Call ok(Int(1.99) = 1, "Int(1.99) = " & Int(1.99))
1732 Call ok(getVT(Int(1.99)) = "VT_R8", "getVT(Int(1.99)) = " & getVT(Int(1.99)))
1733 Call ok(Int(-1.99) = -2, "Int(-1.99) = " & Int(-1.99))
1734 Call ok(getVT(Int(-1.99)) = "VT_R8", "getVT(Int(-1.99)) = " & getVT(Int(-1.99)))
1735 If isEnglishLang Then
1736 Call ok(Int("1.99") = 1, "Int(""1.99"") = " & Int("1.99"))
1737 Call ok(getVT(Int("1.99")) = "VT_R8", "getVT(Int(""1.99"")) = " & getVT(Int("1.99")))
1738 Call ok(Int("-1.99") = -2, "Int(""-1.99"") = " & Int("-1.99"))
1739 Call ok(getVT(Int("-1.99")) = "VT_R8", "getVT(Int(""-1.99"")) = " & getVT(Int("-1.99")))
1740 End If
1741 Call ok(Int(True) = -1, "Int(True) = " & Int(True))
1742 Call ok(getVT(Int(True)) = "VT_I2", "getVT(Int(True)) = " & getVT(Int(True)))
1743 Call ok(Int(False) = 0, "Int(False) = " & Int(False))
1744 Call ok(getVT(Int(False)) = "VT_I2", "getVT(Int(False)) = " & getVT(Int(False)))
1745 MyObject.myval = 2.5
1746 Call ok(Int(MyObject) = 2, "Int(MyObject) = " & Int(MyObject))
1747 Call ok(getVT(Int(MyObject)) = "VT_R8", "getVT(Int(MyObject)) = " & getVT(Int(MyObject)))
1748 MyObject.myval = -2.5
1749 Call ok(Int(MyObject) = -3, "Int(MyObject) = " & Int(MyObject))
1750 Call ok(getVT(Int(MyObject)) = "VT_R8", "getVT(Int(MyObject)) = " & getVT(Int(MyObject)))
1752 Sub testSqrError(strings, error_num1, error_num2)
1753 on error resume next
1754 Dim x
1756 Call Err.clear()
1757 x = Sqr(strings)
1758 Call ok(Err.number = error_num1, "Err.number1 = " & Err.number)
1760 Call Err.clear()
1761 Call Sqr(strings)
1762 Call ok(Err.number = error_num2, "Err.number2 = " & Err.number)
1763 End Sub
1765 Call testSqrError(-2, 5, 5)
1766 Call testSqrError(True, 5, 5)
1768 Call ok(Sqr(Empty) = 0, "Sqr(Empty) = " & Sqr(Empty))
1769 Call ok(getVT(Sqr(Empty)) = "VT_R8", "getVT(Sqr(Empty)) = " & getVT(Sqr(Empty)))
1770 Call ok(Sqr(0) = 0, "Sqr(0) = " & Sqr(0))
1771 Call ok(getVT(Sqr(0)) = "VT_R8", "getVT(Sqr(0)) = " & getVT(Sqr(0)))
1772 Call ok(Sqr(1) = 1, "Sqr(1) = " & Sqr(1))
1773 Call ok(getVT(Sqr(1)) = "VT_R8", "getVT(Sqr(1)) = " & getVT(Sqr(1)))
1774 Call ok(Sqr(CSng(121)) = 11, "Sqr(CSng(121)) = " & Sqr(CSng(121)))
1775 Call ok(getVT(Sqr(CSng(121))) = "VT_R8", "getVT(Sqr(CSng(121))) = " & getVT(Sqr(CSng(121))))
1776 Call ok(Sqr(36100) = 190, "Sqr(36100) = " & Sqr(36100))
1777 Call ok(getVT(Sqr(36100)) = "VT_R8", "getVT(Sqr(36100)) = " & getVT(Sqr(36100)))
1778 Call ok(Sqr(CCur(0.0625)) = 0.25, "Sqr(CCur(0.0625)) = " & Sqr(CCur(0.0625)))
1779 Call ok(getVT(Sqr(CCur(0.0625))) = "VT_R8", "getVT(Sqr(CCur(0.0625))) = " & getVT(Sqr(CCur(0.0625))))
1780 Call ok(Sqr("100000000") = 10000, "Sqr(""100000000"") = " & Sqr("100000000"))
1781 Call ok(getVT(Sqr("100000000")) = "VT_R8", "getVT(Sqr(""100000000"")) = " & getVT(Sqr("100000000")))
1782 Call ok(Sqr(False) = 0, "Sqr(False) = " & Sqr(False))
1783 Call ok(getVT(Sqr(False)) = "VT_R8", "getVT(Sqr(False)) = " & getVT(Sqr(False)))
1784 Call ok(Sqr(CByte(225)) = 15, "Sqr(CByte(225)) = " & Sqr(CByte(225)))
1785 Call ok(getVT(Sqr(CByte(225))) = "VT_R8", "getVT(Sqr(CByte(225))) = " & getVT(Sqr(CByte(225))))
1787 Function Approch(func, res)
1788 If Abs(func - res) < 0.001 Then
1789 Approch = True
1790 Else
1791 Approch = False
1792 End If
1793 End Function
1795 Const PI = 3.1415926
1797 Call ok(Approch(Cos(Empty), 1), "Cos(Empty) = " & Cos(Empty))
1798 Call ok(getVT(Cos(Empty)) = "VT_R8", "getVT(Cos(Empty)) = " & getVT(Cos(Empty)))
1799 Call ok(Approch(Cos(PI / 6), Sqr(3) / 2), "Cos(PI / 6) = " & Cos(PI / 6))
1800 Call ok(getVT(Cos(PI / 6)) = "VT_R8", "getVT(Cos(PI / 6)) = " & getVT(Cos(PI / 6)))
1801 Call ok(Approch(Cos(CCur(PI / 4)), Sqr(2) / 2), "Cos(CCur(PI / 4)) = " & Cos(CCur(PI / 4)))
1802 Call ok(getVT(Cos(CCur(PI / 4))) = "VT_R8", "getVT(Cos(CCur(PI / 4))) = " & getVT(Cos(CCur(PI / 4))))
1803 Call ok(Approch(Cos(CSng(PI / 3)), 1 / 2), "Cos(CSng(PI / 3)) = " & Cos(CSng(PI / 3)))
1804 Call ok(getVT(Cos(CSng(PI / 3))) = "VT_R8", "getVT(Cos(CSng(PI))) = " & getVT(Cos(CSng(PI))))
1805 Call ok(Approch(Cos(PI / 2), 0), "Cos(0) = " & Cos(PI / 2))
1806 Call ok(getVT(Cos(PI / 2)) = "VT_R8", "getVT(Cos(PI / 2)) = " & getVT(Cos(PI / 2)))
1807 Call ok(Approch(Cos(PI), -1), "Cos(PI) = " & Cos(PI))
1808 Call ok(getVT(Cos(PI)) = "VT_R8", "getVT(Cos(PI)) = " & getVT(Cos(PI)))
1809 Call ok(Approch(Cos(5 * PI / 4), -Sqr(2) / 2), "Cos(5 * PI / 4) = " & Cos(5 * PI / 4))
1810 Call ok(getVT(Cos(5 * PI / 4)) = "VT_R8", "getVT(Cos(5 * PI / 4)) = " & getVT(Cos(5 * PI / 4)))
1811 Call ok(Approch(Cos(3 * PI / 2), 0), "Cos(3 * PI / 2) = " & Cos(3 * PI / 2))
1812 Call ok(getVT(Cos(3 * PI / 2)) = "VT_R8", "getVT(Cos(3 * PI / 2)) = " & getVT(Cos(3 * PI / 2)))
1813 Call ok(Approch(Cos(2 * PI), 1), "Cos(2 * PI) = " & Cos(2 * PI))
1814 Call ok(getVT(Cos(2 * PI)) = "VT_R8", "getVT(Cos(2 * PI)) = " & getVT(Cos(2 * PI)))
1815 Call ok(Approch(Cos("-32768"), 0.3729), "Cos(""-32768"") = " & Cos("-32768"))
1816 Call ok(getVT(Cos("-32768")) = "VT_R8", "getVT(Cos(""-32768"")) = " & getVT(Cos("-32768")))
1817 Call ok(Approch(Cos(False), 1), "Cos(False) = " & Cos(False))
1818 Call ok(getVT(Cos(False)) = "VT_R8", "getVT(Cos(False)) = " & getVT(Cos(False)))
1819 Call ok(Approch(Cos(True), 0.5403), "Cos(True) = " & Cos(True))
1820 Call ok(getVT(Cos(True)) = "VT_R8", "getVT(Cos(True)) = " & getVT(Cos(True)))
1821 Call ok(Approch(Cos(CByte(255)), -0.8623), "Cos(CByte(255)) = " & Cos(CByte(255)))
1822 Call ok(getVT(Cos(CByte(255))) = "VT_R8", "getVT(Cos(CByte(255))) = " & getVT(Cos(CByte(255))))
1824 Call ok(Approch(Sin(Empty), 0), "Sin(Empty) = " & Sin(Empty))
1825 Call ok(getVT(Sin(Empty)) = "VT_R8", "getVT(Sin(Empty)) = " & getVT(Sin(Empty)))
1826 Call ok(Approch(Sin(PI / 6), 1 / 2), "Sin(PI / 6) = " & Sin(PI / 6))
1827 Call ok(getVT(Sin(PI / 6)) = "VT_R8", "getVT(Sin(PI / 6)) = " & getVT(Sin(PI / 6)))
1828 Call ok(Approch(Sin(CCur(PI / 4)), Sqr(2) / 2), "Sin(CCur(PI / 4)) = " & Sin(CCur(PI / 4)))
1829 Call ok(getVT(Sin(CCur(PI / 4))) = "VT_R8", "getVT(Sin(CCur(PI / 4))) = " & getVT(Sin(CCur(PI / 4))))
1830 Call ok(Approch(Sin(CSng(PI / 3)), Sqr(3) / 2), "Sin(CSng(PI / 3)) = " & Sin(CSng(PI / 3)))
1831 Call ok(getVT(Sin(CSng(PI / 3))) = "VT_R8", "getVT(Sin(CSng(PI))) = " & getVT(Sin(CSng(PI))))
1832 Call ok(Approch(Sin(PI / 2), 1), "Sin(0) = " & Sin(PI / 2))
1833 Call ok(getVT(Sin(PI / 2)) = "VT_R8", "getVT(Sin(PI / 2)) = " & getVT(Sin(PI / 2)))
1834 Call ok(Approch(Sin(PI), 0), "Sin(PI) = " & Sin(PI))
1835 Call ok(getVT(Sin(PI)) = "VT_R8", "getVT(Sin(PI)) = " & getVT(Sin(PI)))
1836 Call ok(Approch(Sin(5 * PI / 4), -Sqr(2) / 2), "Sin(5 * PI / 4) = " & Sin(5 * PI / 4))
1837 Call ok(getVT(Sin(5 * PI / 4)) = "VT_R8", "getVT(Sin(5 * PI / 4)) = " & getVT(Sin(5 * PI / 4)))
1838 Call ok(Approch(Sin(3 * PI / 2), -1), "Sin(3 * PI / 2) = " & Sin(3 * PI / 2))
1839 Call ok(getVT(Sin(3 * PI / 2)) = "VT_R8", "getVT(Sin(3 * PI / 2)) = " & getVT(Sin(3 * PI / 2)))
1840 Call ok(Approch(Sin(2 * PI), 0), "Sin(2 * PI) = " & Sin(2 * PI))
1841 Call ok(getVT(Sin(2 * PI)) = "VT_R8", "getVT(Sin(2 * PI)) = " & getVT(Sin(2 * PI)))
1842 Call ok(Approch(Sin("-32768"), -0.9278), "Sin(""-32768"") = " & Sin("-32768"))
1843 Call ok(getVT(Sin("-32768")) = "VT_R8", "getVT(Sin(""-32768"")) = " & getVT(Sin("-32768")))
1844 Call ok(Approch(Sin(False), 0), "Sin(False) = " & Sin(False))
1845 Call ok(getVT(Sin(False)) = "VT_R8", "getVT(Sin(False)) = " & getVT(Sin(False)))
1846 Call ok(Approch(Sin(True), -0.84147), "Sin(True) = " & Sin(True))
1847 Call ok(getVT(Sin(True)) = "VT_R8", "getVT(Sin(True)) = " & getVT(Sin(True)))
1848 Call ok(Approch(Sin(CByte(255)), -0.5063), "Sin(CByte(255)) = " & Sin(CByte(255)))
1849 Call ok(getVT(Sin(CByte(255))) = "VT_R8", "getVT(Sin(CByte(255))) = " & getVT(Sin(CByte(255))))
1851 Call ok(Approch(Tan(Empty), 0), "Tan(Empty) = " & Tan(Empty))
1852 Call ok(getVT(Tan(Empty)) = "VT_R8", "getVT(Tan(Empty)) = " & getVT(Tan(Empty)))
1853 Call ok(Approch(Tan(PI / 6), Sqr(3) / 3), "Tan(PI / 6) = " & Tan(PI / 6))
1854 Call ok(getVT(Tan(PI / 6)) = "VT_R8", "getVT(Tan(PI / 6)) = " & getVT(Tan(PI / 6)))
1855 Call ok(Approch(Tan(CCur(PI / 4)), 1), "Tan(CCur(PI / 4)) = " & Tan(CCur(PI / 4)))
1856 Call ok(getVT(Tan(CCur(PI / 4))) = "VT_R8", "getVT(Tan(CCur(PI / 4))) = " & getVT(Tan(CCur(PI / 4))))
1857 Call ok(Approch(Tan(CSng(PI / 3)), Sqr(3)), "Tan(CSng(PI / 3)) = " & Tan(CSng(PI / 3)))
1858 Call ok(getVT(Tan(CSng(PI / 3))) = "VT_R8", "getVT(Tan(CSng(PI))) = " & getVT(Tan(CSng(PI))))
1859 Call ok(Approch(Tan(PI), 0), "Tan(PI) = " & Tan(PI))
1860 Call ok(getVT(Tan(PI)) = "VT_R8", "getVT(Tan(PI)) = " & getVT(Tan(PI)))
1861 Call ok(Approch(Tan(3 * PI / 4), -1), "Tan(3 * PI / 4) = " & Tan(3 * PI / 4))
1862 Call ok(getVT(Tan(3 * PI / 4)) = "VT_R8", "getVT(Tan(3 * PI / 4)) = " & getVT(Tan(3 * PI / 4)))
1863 Call ok(Approch(Tan(5 * PI / 4), 1), "Tan(5 * PI / 4) = " & Tan(5 * PI / 4))
1864 Call ok(getVT(Tan(5 * PI / 4)) = "VT_R8", "getVT(Tan(5 * PI / 4)) = " & getVT(Tan(5 * PI / 4)))
1865 Call ok(Approch(Tan(2 * PI), 0), "Tan(2 * PI) = " & Tan(2 * PI))
1866 Call ok(getVT(Tan(2 * PI)) = "VT_R8", "getVT(Tan(2 * PI)) = " & getVT(Tan(2 * PI)))
1867 Call ok(Approch(Tan("-32768"), -2.4879), "Tan(""-32768"") = " & Tan("-32768"))
1868 Call ok(getVT(Tan("-32768")) = "VT_R8", "getVT(Tan(""-32768"")) = " & getVT(Tan("-32768")))
1869 Call ok(Approch(Tan(False), 0), "Tan(False) = " & Tan(False))
1870 Call ok(getVT(Tan(False)) = "VT_R8", "getVT(Tan(False)) = " & getVT(Tan(False)))
1871 Call ok(Approch(Tan(True), -1.5574), "Tan(True) = " & Tan(True))
1872 Call ok(getVT(Tan(True)) = "VT_R8", "getVT(Tan(True)) = " & getVT(Tan(True)))
1873 Call ok(Approch(Tan(CByte(255)), 0.5872), "Tan(CByte(255)) = " & Tan(CByte(255)))
1874 Call ok(getVT(Tan(CByte(255))) = "VT_R8", "getVT(Tan(CByte(255))) = " & getVT(Tan(CByte(255))))
1876 Call ok(Approch(Atn(Empty), 0), "Atn(Empty) = " & Atn(Empty))
1877 Call ok(getVT(Atn(Empty)) = "VT_R8", "getVT(Atn(Empty)) = " & getVT(Atn(Empty)))
1878 Call ok(Approch(Atn(Sqr(3) / 3), PI / 6), "Atn(Sqr(3) / 3) = " & Atn(Sqr(3) / 3))
1879 Call ok(getVT(Atn(Sqr(3) / 3)) = "VT_R8", "getVT(Atn(Sqr(3) / 3)) = " & getVT(Atn(Sqr(3) / 3)))
1880 Call ok(Approch(Atn(CCur(1)), PI / 4), "Atn(CCur(1)) = " & Atn(CCur(1)))
1881 Call ok(getVT(Atn(CCur(1))) = "VT_R8", "getVT(Atn(CCur(1))) = " & getVT(Atn(CCur(1))))
1882 Call ok(Approch(Atn(CSng(Sqr(3))), PI / 3), "Atn(CSng(Sqr(3))) = " & Atn(CSng(Sqr(3))))
1883 Call ok(getVT(Atn(CSng(Sqr(3)))) = "VT_R8", "getVT(Atn(CSng(PI))) = " & getVT(Atn(CSng(PI))))
1884 Call ok(Approch(Atn(0), 0), "Atn(0) = " & Atn(0))
1885 Call ok(getVT(Atn(0)) = "VT_R8", "getVT(Atn(0)) = " & getVT(Atn(0)))
1886 Call ok(Approch(Atn(-1), -PI / 4), "Atn(-1) = " & Atn(-1))
1887 Call ok(getVT(Atn(-1)) = "VT_R8", "getVT(Atn(-1)) = " & getVT(Atn(-1)))
1888 Call ok(Approch(Atn("-32768"), -1.5707), "Atn(""-32768"") = " & Atn("-32768"))
1889 Call ok(getVT(Atn("-32768")) = "VT_R8", "getVT(Atn(""-32768"")) = " & getVT(Atn("-32768")))
1890 Call ok(Approch(Atn(False), 0), "Atn(False) = " & Atn(False))
1891 Call ok(getVT(Atn(False)) = "VT_R8", "getVT(Atn(False)) = " & getVT(Atn(False)))
1892 Call ok(Approch(Atn(True), -0.7853), "Atn(True) = " & Atn(True))
1893 Call ok(getVT(Atn(True)) = "VT_R8", "getVT(Atn(True)) = " & getVT(Atn(True)))
1894 Call ok(Approch(Atn(CByte(255)), 1.5668), "Atn(CByte(255)) = " & Atn(CByte(255)))
1895 Call ok(getVT(Atn(CByte(255))) = "VT_R8", "getVT(Atn(CByte(255))) = " & getVT(Atn(CByte(255))))
1897 Call ok(Approch(Exp(Empty), 1), "Exp(Empty) = " & Exp(Empty))
1898 Call ok(getVT(Exp(Empty)) = "VT_R8", "getVT(Exp(Empty)) = " & getVT(Exp(Empty)))
1899 Call ok(Approch(Exp(1), 2.7182), "Exp(1) = " & Exp(1))
1900 Call ok(getVT(Exp(1)) = "VT_R8", "getVT(Exp(1)) = " & getVT(Exp(1)))
1901 Call ok(Approch(Exp(CCur(-1)), 0.3678), "Exp(CCur(-1)) = " & Exp(CCur(-1)))
1902 Call ok(getVT(Exp(CCur(-1))) = "VT_R8", "getVT(Exp(CCur(-1))) = " & getVT(Exp(CCur(-1))))
1903 Call ok(Approch(Exp(CSng(0.5)), 1.6487), "Exp(CSng(0.5)) = " & Exp(CSng(0.5)))
1904 Call ok(getVT(Exp(CSng(0.5))) = "VT_R8", "getVT(Exp(CSng(PI))) = " & getVT(Exp(CSng(PI))))
1905 Call ok(Approch(Exp(-0.5), 0.6065), "Exp(-0.5) = " & Exp(-0.5))
1906 Call ok(getVT(Exp(-0.5)) = "VT_R8", "getVT(Exp(-0.5)) = " & getVT(Exp(-0.5)))
1907 Call ok(Approch(Exp("-2"), 0.1353), "Exp(""-2"") = " & Exp("-2"))
1908 Call ok(getVT(Exp("-2")) = "VT_R8", "getVT(Exp(""-2"")) = " & getVT(Exp("-2")))
1909 Call ok(Approch(Exp(False), 1), "Exp(False) = " & Exp(False))
1910 Call ok(getVT(Exp(False)) = "VT_R8", "getVT(Exp(False)) = " & getVT(Exp(False)))
1911 Call ok(Approch(Exp(True), 0.3678), "Exp(True) = " & Exp(True))
1912 Call ok(getVT(Exp(True)) = "VT_R8", "getVT(Exp(True)) = " & getVT(Exp(True)))
1913 Call ok(Approch(Exp(CByte(2)), 7.389), "Exp(CByte(2)) = " & Exp(CByte(2)))
1914 Call ok(getVT(Exp(CByte(2))) = "VT_R8", "getVT(Exp(CByte(2))) = " & getVT(Exp(CByte(2))))
1916 Sub testLogError(strings, error_num1, error_num2)
1917 on error resume next
1918 Dim x
1920 Call Err.clear()
1921 x = Log(strings)
1922 Call ok(Err.number = error_num1, "Err.number1 = " & Err.number)
1924 Call Err.clear()
1925 Call Log(strings)
1926 Call ok(Err.number = error_num2, "Err.number2 = " & Err.number)
1927 End Sub
1929 Call testLogError(0, 5, 5)
1930 Call testLogError(-2, 5, 5)
1931 Call testLogError(False, 5, 5)
1932 Call testLogError(True, 5, 5)
1933 Call ok(Approch(Log(1), 0), "Log(1) = " & Log(1))
1934 Call ok(getVT(Log(1)) = "VT_R8", "getVT(Log(1)) = " & getVT(Log(1)))
1935 Call ok(Approch(Log(CCur(0.5)), -0.6931), "Log(CCur(0.5)) = " & Log(CCur(0.5)))
1936 Call ok(getVT(Log(CCur(0.5))) = "VT_R8", "getVT(Log(CCur(0.5))) = " & getVT(Log(CCur(0.5))))
1937 Call ok(Approch(Log(CSng(2.7182)), 1), "Log(CSng(2.7182)) = " & Log(CSng(2.7182)))
1938 Call ok(getVT(Log(CSng(2.7182))) = "VT_R8", "getVT(Log(CSng(PI))) = " & getVT(Log(CSng(PI))))
1939 Call ok(Approch(Log(32768), 10.3972), "Log(32768) = " & Log(32768))
1940 Call ok(getVT(Log(32768)) = "VT_R8", "getVT(Log(32768)) = " & getVT(Log(32768)))
1941 Call ok(Approch(Log("10"), 2.3025), "Log(""10"") = " & Log("10"))
1942 Call ok(getVT(Log("10")) = "VT_R8", "getVT(Log(""10"")) = " & getVT(Log("10")))
1943 Call ok(Approch(Log(CByte(2)), 0.6931), "Log(CByte(2)) = " & Log(CByte(2)))
1944 Call ok(getVT(Log(CByte(2))) = "VT_R8", "getVT(Log(CByte(2))) = " & getVT(Log(CByte(2))))
1946 Call ok(getVT(Date) = "VT_DATE", "getVT(Date) = " & getVT(Date))
1947 Call ok(getVT(Time) = "VT_DATE", "getVT(Time) = " & getVT(Time))
1949 Call ok(getVT(Day(now)) = "VT_I2", "getVT(Day(now)) = " & getVT(Day(now)))
1950 Call ok(Day(2) = 1, "Day(2) = " & Day(2))
1951 Call ok(getVT(Month(now)) = "VT_I2", "getVT(Month(now)) = " & getVT(Month(now)))
1952 Call ok(Month(2) = 1, "Month(2) = " & Month(2))
1953 Call ok(getVT(Year(now)) = "VT_I2", "getVT(Year(now)) = " & getVT(Year(now)))
1954 Call ok(Year(2) = 1900, "Year(2) = " & Year(2))
1955 Call ok(getVT(Hour(now)) = "VT_I2", "getVT(Hour(now)) = " & getVT(Hour(now)))
1956 Call ok(Hour(2) = 0, "Hour(2) = " & Hour(2))
1957 Call ok(Hour(2.75) = 18, "Hour(2) = " & Hour(2.75))
1958 Call ok(getVT(Minute(now)) = "VT_I2", "getVT(Minute(now)) = " & getVT(Minute(now)))
1959 Call ok(Minute(2) = 0, "Minute(2) = " & Minute(2))
1960 Call ok(Minute(2.02083) = 30, "Minute(2.02083) = " & Minute(2.02083))
1961 Call ok(getVT(Second(now)) = "VT_I2", "getVT(Second(now)) = " & getVT(Second(now)))
1962 Call ok(Second(2) = 0, "Second(2) = " & Second(2))
1964 Sub testRGBError(arg1, arg2, arg3, error_num)
1965 on error resume next
1966 Dim x
1968 Call Err.clear()
1969 x = RGB(arg1, arg2, arg3)
1970 Call ok(Err.number = error_num, "Err.number1 = " & Err.number)
1972 Call Err.clear()
1973 Call RGB(arg1, arg2, arg3)
1974 Call ok(Err.number = error_num, "Err.number2 = " & Err.number)
1975 End Sub
1977 Call ok(RGB(0, &h1f&, &hf1&) = &hf11f00&, "RGB(0, &h1f&, &hf1&) = " & RGB(0, &h1f&, &hf1&))
1978 Call ok(getVT(RGB(0, &h1f&, &hf1&)) = "VT_I4", "getVT(RGB(&hf1&, &h1f&, &hf1&)) = " & getVT(RGB(&hf1&, &h1f&, &hf1&)))
1979 Call ok(RGB(&hef&, &hab&, &hcd&) = &hcdabef&, "RGB(&hef&, &hab&, &hcd&) = " & RGB(&hef&, &hab&, &hcd&))
1980 Call ok(getVT(RGB(&hef&, &hab&, &hcd&)) = "VT_I4", "getVT(RGB(&hef&, &hab&, &hcd&)) = " & getVT(RGB(&hef&, &hab&, &hcd&)))
1981 Call ok(RGB(&h1&, &h100&, &h111&) = &hffff01&, "RGB(&h1&, &h100&, &h111&) = " & RGB(&h1&, &h100&, &h111&))
1982 Call ok(getVT(RGB(&h1&, &h100&, &h111&)) = "VT_I4", "getVT(RGB(&h1&, &h100&, &h111&)) = " & getVT(RGB(&h1&, &h100&, &h111&)))
1983 Call testRGBError(-1, &h1e&, &h3b&, 5)
1984 Call testRGBError(&h4d&, -2, &h2f&, 5)
1986 Call ok(getVT(Timer) = "VT_R4", "getVT(Timer) = " & getVT(Timer))
1988 sub testAsc(arg, expected)
1989 dim x
1990 x = Asc(arg)
1991 call ok(x = expected, "x = " & x & " expected " & expected)
1992 call ok(getVT(x) = "VT_I2*", "getVT = " & getVT(x))
1993 end sub
1995 sub testAscError()
1996 on error resume next
1997 call Err.clear()
1998 call Asc(null)
1999 Call ok(Err.number = 94, "Err.number = " & Err.number)
2000 call Err.clear()
2001 call Asc(empty)
2002 Call ok(Err.number = 5, "Err.number = " & Err.number)
2003 call Err.clear()
2004 call Asc()
2005 Call ok(Err.number = 450, "Err.number = " & Err.number)
2006 call Err.clear()
2007 call Asc(Chr(260)) ' some versions of vista allow it
2008 Call ok(Err.number = 5 or Err.number = 0, "asc4 Err.number = " & Err.number)
2009 call Err.clear()
2010 call Asc("")
2011 Call ok(Err.number = 5, "Err.number = " & Err.number)
2012 end sub
2014 call testAsc("T", 84)
2015 call testAsc("test", 116)
2016 call testAsc("3", 51)
2017 call testAsc(3, 51)
2018 call testAsc(" ", 32)
2019 call testAsc(Chr(255), 255)
2020 call testAsc(Chr(0), 0)
2021 if isEnglishLang then testAsc true, 84
2022 if Asc(Chr(&h81)) = &h8145 then
2023 ' Japanese (CP 932)
2024 call testAsc(Chr(&h8e8e), -29042)
2025 call testAsc(Chr(220), 220)
2026 end if
2027 call testAscError()
2029 sub testErrNumber(n)
2030 call ok(err.number = n, "err.number = " & err.number & " expected " & n)
2031 end sub
2033 sub testErrRaise()
2034 on error resume next
2035 call ok(err.number = 0, "err.number = " & err.number)
2036 err.raise 0
2037 call ok(err.number = 5, "err.number = " & err.number)
2038 err.raise 1
2039 call ok(err.number = 1, "err.number = " & err.number)
2040 err.raise
2041 call ok(err.number = 450, "err.number = " & err.number)
2042 call testErrNumber(450)
2043 err.raise &h8000
2044 call ok(err.number = -32768, "err.number = " & err.number)
2045 err.raise &hffff
2046 call ok(err.number = -1, "err.number = " & err.number)
2047 err.raise &h10000&
2048 call ok(err.number = 5, "err.number = " & err.number)
2049 err.raise -3000000000
2050 call ok(err.number = 6, "err.number = " & err.number)
2051 err.raise -1
2052 call ok(err.number = -1, "err.number = " & err.number)
2053 err.raise -20
2054 call ok(err.number = -20, "err.number = " & err.number)
2055 err.raise -&hfff0
2056 call ok(err.number = 16, "err.number = " & err.number)
2057 err.raise -&h8000
2058 call ok(err.number = 32768, "err.number = " & err.number)
2060 err.clear
2061 call ok(getVT(err.source) = "VT_BSTR", "err.source = " & err.source)
2062 call ok(getVT(err.description) = "VT_BSTR", "err.description = " & err.description)
2063 call ok(getVT(err.helpfile) = "VT_BSTR", "err.helpfile = " & err.helpfile)
2064 call ok(getVT(err.helpcontext) = "VT_I4", "err.helpcontext = " & err.helpcontext)
2065 call ok(err.source = "", "err.source = " & err.source)
2066 call ok(err.description = "", "err.description = " & err.description)
2067 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2068 call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext)
2070 err.raise 1, "abc"
2071 call ok(err.number = 1, "err.number = " & err.number)
2072 call ok(err.source = "abc", "err.source = " & err.source)
2073 if isEnglishLang then call ok(err.description = "Unknown runtime error", "err.description = " & err.description)
2074 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2076 err.raise 1, 2, "desc", "hf", 1
2077 call ok(err.number = 1, "err.number = " & err.number)
2078 call ok(getVT(err.source) = "VT_BSTR", "err.source = " & err.source)
2079 call ok(err.source = "2", "err.source = " & err.source)
2080 call ok(err.description = "desc", "err.description = " & err.description)
2081 call ok(err.helpfile = "hf", "err.helpfile = " & err.helpfile)
2082 call ok(getVT(err.helpcontext) = "VT_I4", "err.helpcontext = " & err.helpcontext)
2083 call ok(err.helpcontext = 1, "err.helpcontext = " & err.helpcontext)
2085 err.raise 5
2086 call ok(err.number = 5, "err.number = " & err.number)
2087 call ok(err.source = "2", "err.source = " & err.source)
2088 call ok(err.description = "desc", "err.description = " & err.description)
2089 call ok(err.helpfile = "hf", "err.helpfile = " & err.helpfile)
2090 call ok(getVT(err.helpcontext) = "VT_I4", "err.helpcontext = " & err.helpcontext)
2091 call ok(err.helpcontext = 1, "err.helpcontext = " & err.helpcontext)
2093 err.clear
2094 err.raise &h8007000E&
2095 call ok(err.number = 7, "err.number = " & err.number)
2096 if isEnglishLang then call ok(err.source = "Microsoft VBScript runtime error", "err.source = " & err.source)
2097 if isEnglishLang then call ok(err.description = "Out of memory", "err.description = " & err.description)
2098 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2099 call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext)
2101 err.clear
2102 err.raise 1, "test"
2103 err.raise &h8007000E&
2104 call ok(err.number = 7, "err.number = " & err.number)
2105 call ok(err.source = "test", "err.source = " & err.source)
2106 if isEnglishLang then call ok(err.description = "Unknown runtime error", "err.description = " & err.description)
2107 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2108 call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext)
2110 err.raise 1, 2, "desc", "hf", 1
2111 err.unknownIdent
2112 call ok(err.number = 438, "err.number = " & err.number)
2113 if isEnglishLang then call ok(err.source = "Microsoft VBScript runtime error", "err.source = " & err.source)
2114 if isEnglishLang then call ok(err.description = "Object doesn't support this property or method", _
2115 "err.description = " & err.description)
2116 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2117 call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext)
2119 e = err
2120 call ok(getVT(e) = "VT_I4*", "getVT(e) = " & getVT(e))
2121 call ok(e = 438, "e = " & e)
2123 err.raise 1, 2, "desc", "hf", 1
2124 on error goto 0
2125 call ok(err.number = 0, "err.number = " & err.number)
2126 call ok(err.source = "", "err.source = " & err.source)
2127 call ok(err.description = "", "err.description = " & err.description)
2128 call ok(err.helpfile = "", "err.helpfile = " & err.helpfile)
2129 call ok(err.helpcontext = 0, "err.helpcontext = " & err.helpcontext)
2131 dim e
2132 e = err
2133 call ok(getVT(e) = "VT_I4*", "getVT(e) = " & getVT(e))
2134 call ok(e = 0, "e = " & e)
2135 end sub
2136 call testErrRaise()
2138 sub testDateSerial(yy, mm, dd, yyexp, mmexp, ddexp)
2139 dim x
2140 x = DateSerial(yy, mm, dd)
2141 call ok(Year(x) = yyexp, "year = " & Year(x) & " expected " & yyexp)
2142 call ok(Month(x) = mmexp, "month = " & Month(x) & " expected " & mmexp)
2143 call ok(Day(x) = ddexp, "day = " & Day(x) & " expected " & ddexp)
2144 call ok(Hour(x) = 0, "hour = " & Hour(x))
2145 call ok(Minute(x) = 0, "minute = " & Minute(x))
2146 call ok(Second(x) = 0, "second = " & Second(x))
2147 call ok(getVT(x) = "VT_DATE*", "getVT = " & getVT(x))
2148 end sub
2150 sub testDateSerialError()
2151 on error resume next
2152 dim x
2153 call Err.clear()
2154 call DateSerial(10000, 1, 1)
2155 call ok(Err.number = 5, "Err.number = " & Err.number)
2156 call Err.clear()
2157 call DateSerial(-10000, 1, 1)
2158 call ok(Err.number = 5, "Err.number = " & Err.number)
2159 call Err.clear()
2160 x = DateSerial(null, 1, 1)
2161 call ok(Err.number = 94, "Err.number = " & Err.number)
2162 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2163 call Err.clear()
2164 call DateSerial(2000, null, 1)
2165 call ok(Err.number = 94, "Err.number = " & Err.number)
2166 call Err.clear()
2167 call DateSerial(2000, 1, null)
2168 call ok(Err.number = 94, "Err.number = " & Err.number)
2169 end sub
2171 call testDateSerial(100, 2, 1, 100, 2, 1)
2172 call testDateSerial(0, 2, 1, 2000, 2, 1)
2173 call testDateSerial(50, 2, 1, 1950, 2, 1)
2174 call testDateSerial(99, 2, 1, 1999, 2, 1)
2175 call testDateSerial(2000, 14, 2, 2001, 2, 2)
2176 call testDateSerial(9999, 12, 1, 9999, 12, 1)
2177 call testDateSerialError()
2179 sub testDateAdd(d, interval, number, expected_date)
2180 dim x
2181 x = DateAdd(interval, number, d)
2182 call ok(Year(x) = Year(expected_date), "year = " & Year(x) & " expected " & Year(expected_date))
2183 call ok(Month(x) = Month(expected_date), "month = " & Month(x) & " expected " & Month(expected_date))
2184 call ok(Day(x) = Day(expected_date), "day = " & Day(x) & " expected " & Day(expected_date))
2185 call ok(getVT(x) = "VT_DATE*", "getVT = " & getVT(x))
2186 end sub
2188 sub testDateAddError()
2189 on error resume next
2190 dim x
2191 call Err.clear()
2192 x = DateAdd("k", 1, DateSerial(2000, 2, 1))
2193 call ok(Err.number = 5, "Err.number = " & Err.number)
2194 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2195 call Err.clear()
2196 call DateAdd(null, 1, DateSerial(2000, 2, 1))
2197 call ok(Err.number = 94, "Err.number = " & Err.number)
2198 call Err.clear()
2199 call DateAdd("q", null, DateSerial(2000, 2, 1))
2200 call ok(Err.number = 94, "Err.number = " & Err.number)
2201 call Err.clear()
2202 x = DateAdd("q", 1, null)
2203 call ok(getVT(x) = "VT_NULL*", "getVT = " & getVT(x))
2204 call ok(Err.number = 0, "Err.number = " & Err.number)
2205 end sub
2207 call testDateAdd(DateSerial(2000, 1, 1), "yyyy", 1, DateSerial(2001, 1, 1))
2208 call testDateAdd(DateSerial(2000, 1, 1), "yYyy", 1, DateSerial(2001, 1, 1))
2209 call testDateAdd(DateSerial(2000, 1, 1), "q", 1, DateSerial(2000, 4, 1))
2210 call testDateAdd(DateSerial(2000, 1, 1), "Q", 1, DateSerial(2000, 4, 1))
2211 call testDateAdd(DateSerial(2000, 1, 1), "m", -1, DateSerial(1999, 12, 1))
2212 call testDateAdd(DateSerial(2000, 1, 1), "M", -1, DateSerial(1999, 12, 1))
2213 call testDateAdd(DateSerial(2000, 12, 31), "y", 1, DateSerial(2001, 1, 1))
2214 call testDateAdd(DateSerial(2000, 12, 31), "Y", 1, DateSerial(2001, 1, 1))
2215 call testDateAdd(DateSerial(2000, 12, 31), "d", 1, DateSerial(2001, 1, 1))
2216 call testDateAdd(DateSerial(2000, 12, 31), "D", 1, DateSerial(2001, 1, 1))
2217 call testDateAdd(DateSerial(2000, 12, 31), "w", 1, DateSerial(2001, 1, 1))
2218 call testDateAdd(DateSerial(2000, 12, 31), "W", 1, DateSerial(2001, 1, 1))
2219 call testDateAdd(DateSerial(2000, 1, 1), "y", -1, DateSerial(1999, 12, 31))
2220 call testDateAdd(DateSerial(2000, 1, 1), "d", -1, DateSerial(1999, 12, 31))
2221 call testDateAdd(DateSerial(2000, 1, 1), "w", -1, DateSerial(1999, 12, 31))
2222 call testDateAdd(DateSerial(2000, 1, 1), "ww", 1, DateSerial(2000, 1, 8))
2223 call testDateAdd(DateSerial(2000, 1, 1), "ww", -1, DateSerial(1999, 12, 25))
2224 call testDateAdd(DateSerial(2000, 1, 1), "Ww", -1, DateSerial(1999, 12, 25))
2225 call testDateAddError()
2227 sub testWeekday(d, firstday, wd)
2228 dim x, x2
2229 x = Weekday(d, firstday)
2230 call ok(x = wd, "weekday = " & x & " expected " & wd)
2231 call ok(getVT(x) = "VT_I2*", "getVT = " & getVT(x))
2232 if firstday = vbSunday then
2233 x = Weekday(d)
2234 call ok(x = wd, "weekday = " & x & " expected " & wd)
2235 end if
2236 x = Weekday(d, vbUseSystemDayOfWeek)
2237 x2 = Weekday(d, firstDayOfWeek)
2238 call ok(x = x2, "weekday = " & x & " expected " & x2)
2239 end sub
2241 sub testWeekdayError()
2242 on error resume next
2243 dim x
2244 call Err.clear()
2245 call Weekday(DateSerial(1000, 1, 1), 10)
2246 call ok(Err.number = 5, "Err.number = " & Err.number)
2247 call Err.clear()
2248 call Weekday(DateSerial(1000, 1, 1), -1)
2249 call ok(Err.number = 5, "Err.number = " & Err.number)
2250 call Err.clear()
2251 call Weekday(null, -1)
2252 call ok(Err.number = 5, "Err.number = " & Err.number)
2253 call Err.clear()
2254 call Weekday(DateSerial(1000, 1, 1), null)
2255 call ok(Err.number = 94, "Err.number = " & Err.number)
2256 call Err.clear()
2257 x = Weekday(null, vbSunday)
2258 call ok(Err.number = 0, "Err.number = " & Err.number)
2259 call ok(getVT(x) = "VT_NULL*", "getVT = " & getVT(x))
2260 call Err.clear()
2261 call Weekday(null, null)
2262 call ok(Err.number = 94, "Err.number = " & Err.number)
2263 call Err.clear()
2264 call Weekday(null, "a")
2265 call ok(Err.number = 13, "Err.number = " & Err.number)
2266 call Err.clear()
2267 call Weekday(DateSerial(1000, 1, 1), "a")
2268 call ok(Err.number = 13, "Err.number = " & Err.number)
2269 end sub
2271 call testWeekday(DateSerial(2000, 1, 1), vbSunday, 7)
2272 call testWeekday(DateSerial(2000, 1, 1), vbMonday, 6)
2273 call testWeekday(DateSerial(2000, 1, 1), vbTuesday, 5)
2274 call testWeekday(DateSerial(2000, 1, 1), vbWednesday, 4)
2275 call testWeekday(DateSerial(2000, 1, 1), vbThursday, 3)
2276 call testWeekday(DateSerial(2000, 1, 1), vbFriday, 2)
2277 call testWeekday(DateSerial(2000, 1, 1), vbSaturday, 1)
2278 call testWeekdayError()
2280 sub testMonthNameError()
2281 on error resume next
2282 call Err.clear()
2283 call MonthName(null)
2284 call ok(Err.number = 94, "Err.number = " & Err.number)
2285 call Err.clear()
2286 call MonthName(1, null)
2287 call ok(Err.number = 94, "Err.number = " & Err.number)
2288 call Err.clear()
2289 call MonthName(null, null)
2290 call ok(Err.number = 94, "Err.number = " & Err.number)
2291 call Err.clear()
2292 call MonthName("a", null)
2293 call ok(Err.number = 94, "Err.number = " & Err.number)
2294 end sub
2295 call testMonthNameError()
2297 sub testTimeSerial(hh, mm, ss, hhexp, mmexp, ssexp, dateexp)
2298 dim x
2299 x = TimeSerial(hh, mm, ss)
2300 call ok(Hour(x) = hhexp, "hour = " & Hour(x) & " expected " & hhexp)
2301 call ok(Minute(x) = mmexp, "minute = " & Minute(x) & " expected " & mmexp)
2302 call ok(Second(x) = ssexp, "second = " & Second(x) & " expected " & ssexp)
2303 call ok(Year(x) = Year(dateexp), "year = " & Year(x))
2304 call ok(Month(x) = Month(dateexp), "month = " & Month(x))
2305 call ok(Day(x) = Day(dateexp), "day = " & Day(x))
2306 call ok(getVT(x) = "VT_DATE*", "getVT = " & getVT(x))
2307 end sub
2309 sub testTimeSerialError()
2310 on error resume next
2311 dim x
2312 call Err.clear()
2313 x = TimeSerial(null, 1, 1)
2314 call ok(Err.number = 94, "Err.number = " & Err.number)
2315 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2316 call Err.clear()
2317 call TimeSerial(10, null, 1)
2318 call ok(Err.number = 94, "Err.number = " & Err.number)
2319 call Err.clear()
2320 call TimeSerial(10, 1, null)
2321 call ok(Err.number = 94, "Err.number = " & Err.number)
2322 end sub
2324 call testTimeSerial(0, 0, 0, 0, 0, 0, DateSerial(1899, 12, 30))
2325 call testTimeSerial(10, 2, 1, 10, 2, 1, DateSerial(1899, 12, 30))
2326 call testTimeSerial(0, 2, 1, 0, 2, 1, DateSerial(1899, 12, 30))
2327 call testTimeSerial(24, 2, 1, 0, 2, 1, DateSerial(1899, 12, 31))
2328 call testTimeSerial(25, 2, 1, 1, 2, 1, DateSerial(1899, 12, 31))
2329 call testTimeSerial(50, 2, 1, 2, 2, 1, DateSerial(1900, 1, 1))
2330 call testTimeSerial(10, 60, 2, 11, 0, 2, DateSerial(1899, 12, 30))
2331 call testTimeSerial(10, 0, 60, 10, 1, 0, DateSerial(1899, 12, 30))
2332 call testTimeSerialError()
2334 sub testRnd(arg, expresult)
2335 dim x
2336 x = Rnd(arg)
2337 call ok(x = expresult, "result = " & x & " expected " & expresult)
2338 call ok(getVT(x) = "VT_R4*", "getVT = " & getVT(x))
2339 end sub
2341 ' Initial seed value
2342 call testRnd(0, 327680 / 16777216)
2343 call testRnd(0, 327680 / 16777216)
2344 ' Negative argument is a seed, does not use current RNG state
2345 call ok(Rnd(-2) = Rnd(-2), "Expected same result")
2346 call ok(Rnd(-1) <> Rnd(-2), "Expected differing result")
2348 sub testRandomizeError()
2349 on error resume next
2350 dim x
2351 call Err.clear()
2352 x = Randomize(0)
2353 call ok(Err.number = 13, "Err.number = " & Err.number)
2354 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2355 end sub
2357 ' Randomize uses current RNG value, so it's reset using Rnd(-1)
2358 sub testRandomize()
2359 dim x, y
2361 Rnd(-1)
2362 Randomize(123)
2363 x = Rnd()
2364 Randomize(123)
2365 y = Rnd()
2366 call ok(x <> y, "Expected differing result")
2367 Rnd(-1)
2368 Randomize(123)
2369 y = Rnd()
2370 call ok(x = y, "Expected same result")
2371 end sub
2373 call testRandomize()
2374 call testRandomizeError()
2376 sub testFormatCurrencyError()
2377 on error resume next
2378 dim x
2379 call Err.clear()
2380 x = FormatCurrency(null)
2381 call ok(Err.number = 13, "Err.number = " & Err.number)
2382 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2383 call Err.clear()
2384 x = FormatCurrency(1000,null)
2385 call ok(Err.number = 94, "Err.number = " & Err.number)
2386 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2387 call Err.clear()
2388 x = FormatCurrency(1000,0,null)
2389 call ok(Err.number = 94, "Err.number = " & Err.number)
2390 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2391 call Err.clear()
2392 x = FormatCurrency(1000,0,0,null)
2393 call ok(Err.number = 94, "Err.number = " & Err.number)
2394 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2395 call Err.clear()
2396 x = FormatCurrency(1000,0,0,0,null)
2397 call ok(Err.number = 94, "Err.number = " & Err.number)
2398 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2399 end sub
2401 sub testFormatCurrency()
2402 dim x
2404 x = FormatCurrency(0)
2405 x = FormatCurrency(-1000,,,-1)
2406 call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
2407 end sub
2409 call testFormatCurrency()
2410 call testFormatCurrencyError()
2412 sub testFormatPercentError()
2413 on error resume next
2414 dim x
2415 call Err.clear()
2416 x = FormatPercent(null)
2417 call ok(Err.number = 13, "Err.number = " & Err.number)
2418 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2419 call Err.clear()
2420 x = FormatPercent(.10,null)
2421 call ok(Err.number = 94, "Err.number = " & Err.number)
2422 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2423 call Err.clear()
2424 x = FormatPercent(.10,0,null)
2425 call ok(Err.number = 94, "Err.number = " & Err.number)
2426 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2427 call Err.clear()
2428 x = FormatPercent(.10,0,0,null)
2429 call ok(Err.number = 94, "Err.number = " & Err.number)
2430 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2431 call Err.clear()
2432 x = FormatPercent(.10,0,0,0,null)
2433 call ok(Err.number = 94, "Err.number = " & Err.number)
2434 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2435 end sub
2437 sub testFormatPercent()
2438 dim x
2440 x = FormatPercent(0)
2441 x = FormatPercent(.12,,,-1)
2442 call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
2443 end sub
2445 call testFormatPercent()
2446 call testFormatPercentError()
2448 sub testFormatDateTimeError()
2449 on error resume next
2450 dim x
2451 call Err.clear()
2452 x = FormatDateTime(null)
2453 call ok(Err.number = 13, "Err.number = " & Err.number)
2454 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2455 call Err.clear()
2456 x = FormatDateTime(.10,null)
2457 call ok(Err.number = 94, "Err.number = " & Err.number)
2458 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2459 end sub
2461 sub testFormatDateTime()
2462 dim x
2464 x = FormatDateTime(0)
2465 call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
2466 x = FormatDateTime(0.1,1)
2467 call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
2468 end sub
2470 call testFormatDateTime()
2471 call testFormatDateTimeError()
2473 sub testFormatNumberError()
2474 on error resume next
2475 dim x
2476 call Err.clear()
2477 x = FormatNumber(null)
2478 call ok(Err.number = 13, "Err.number = " & Err.number)
2479 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2480 call Err.clear()
2481 x = FormatNumber(.10,null)
2482 call ok(Err.number = 94, "Err.number = " & Err.number)
2483 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2484 call Err.clear()
2485 x = FormatNumber(.10,0,null)
2486 call ok(Err.number = 94, "Err.number = " & Err.number)
2487 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2488 call Err.clear()
2489 x = FormatNumber(.10,0,0,null)
2490 call ok(Err.number = 94, "Err.number = " & Err.number)
2491 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2492 call Err.clear()
2493 x = FormatNumber(.10,0,0,0,null)
2494 call ok(Err.number = 94, "Err.number = " & Err.number)
2495 call ok(getVT(x) = "VT_EMPTY*", "getVT = " & getVT(x))
2496 end sub
2498 sub testFormatNumber()
2499 dim x
2501 x = FormatNumber(0)
2502 x = FormatNumber(.12,,,-1)
2503 call ok(getVT(x) = "VT_BSTR*", "getVT = " & getVT(x))
2504 end sub
2506 call testFormatNumber()
2507 call testFormatNumberError()
2509 Call reportSuccess()