x = InStr("abcd", "bc")
Call ok(x = 2, "InStr returned " & x)
+Call ok(getVT(x) = "VT_I4*", "getVT(InStr) returned " & getVT(x))
x = InStr("abc", "bc")
Call ok(x = 2, "InStr returned " & x)
x = InStr(2.6, "abcd", "bc")
Call ok(x = 0, "InStr returned " & x)
+
+x = InStrRev("bcabcd", "bc")
+Call ok(x = 4, "InStrRev returned " & x)
+Call ok(getVT(x) = "VT_I4*", "getVT(InStrRev) returned " & getVT(x))
+
+x = InStrRev("bcabcd", "bc", 6)
+Call ok(x = 4, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bcx")
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 3)
+Call ok(x = 2, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 2)
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "b", 2)
+Call ok(x = 2, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 5)
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 15)
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = "abcd"
+x = InStrRev(x, "bc")
+Call ok(x = 2, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 1.3)
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 2.3)
+Call ok(x = 0, "InStrRev returned " & x)
+
+x = InStrRev("abcd", "bc", 2.6)
+Call ok(x = 2, "InStrRev returned " & x)
+
+x = InStrRev("1234", 34)
+Call ok(x = 3, "InStrRev returned " & x)
+
+x = InStrRev(1234, 34)
+Call ok(x = 3, "InStrRev returned " & x)
+
+Sub testInStrRevError(arg1, arg2, arg3, error_num)
+ on error resume next
+ Dim x
+
+ Call Err.clear()
+ x = InStrRev(arg1, arg2, arg3)
+ Call ok(Err.number = error_num, "Err.number = " & Err.number)
+End Sub
+
+call testInStrRevError("abcd", null, 2, 94)
+call testInStrRevError(null, "abcd", 2, 94)
+call testInStrRevError("abcd", "abcd", null, 94)
+
Sub TestMid(str, start, len, ex)
x = Mid(str, start, len)
Call ok(x = ex, "Mid(" & str & ", " & start & ", " & len & ") = " & x & " expected " & ex)
Call ok(Len(1) = 1, "Len(1) = " & Len(1))
Call ok(isNull(Len(null)), "Len(null) = " & Len(null))
Call ok(Len(empty) = 0, "Len(empty) = " & Len(empty))
+Call ok(getVT(Len("abc")) = "VT_I4", "getVT(Len(abc)) = " & getVT(Len("abc")))
Call ok(Space(1) = " ", "Space(1) = " & Space(1) & """")
Call ok(Space(0) = "", "Space(0) = " & Space(0) & """")
Call ok(getVT(Date) = "VT_DATE", "getVT(Date) = " & getVT(Date))
Call ok(getVT(Time) = "VT_DATE", "getVT(Time) = " & getVT(Time))
+Sub testRGBError(arg1, arg2, arg3, error_num)
+ on error resume next
+ Dim x
+
+ Call Err.clear()
+ x = RGB(arg1, arg2, arg3)
+ Call ok(Err.number = error_num, "Err.number1 = " & Err.number)
+
+ Call Err.clear()
+ Call RGB(arg1, arg2, arg3)
+ Call ok(Err.number = error_num, "Err.number2 = " & Err.number)
+End Sub
+
+Call ok(RGB(0, &h1f&, &hf1&) = &hf11f00&, "RGB(0, &h1f&, &hf1&) = " & RGB(0, &h1f&, &hf1&))
+Call ok(getVT(RGB(0, &h1f&, &hf1&)) = "VT_I4", "getVT(RGB(&hf1&, &h1f&, &hf1&)) = " & getVT(RGB(&hf1&, &h1f&, &hf1&)))
+Call ok(RGB(&hef&, &hab&, &hcd&) = &hcdabef&, "RGB(&hef&, &hab&, &hcd&) = " & RGB(&hef&, &hab&, &hcd&))
+Call ok(getVT(RGB(&hef&, &hab&, &hcd&)) = "VT_I4", "getVT(RGB(&hef&, &hab&, &hcd&)) = " & getVT(RGB(&hef&, &hab&, &hcd&)))
+Call ok(RGB(&h1&, &h100&, &h111&) = &hffff01&, "RGB(&h1&, &h100&, &h111&) = " & RGB(&h1&, &h100&, &h111&))
+Call ok(getVT(RGB(&h1&, &h100&, &h111&)) = "VT_I4", "getVT(RGB(&h1&, &h100&, &h111&)) = " & getVT(RGB(&h1&, &h100&, &h111&)))
+Call testRGBError(-1, &h1e&, &h3b&, 5)
+Call testRGBError(&h4d&, -2, &h2f&, 5)
+
+Call ok(getVT(Timer) = "VT_R4", "getVT(Timer) = " & getVT(Timer))
+
Call reportSuccess()