You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

A1880

Intermediate

  • "A1880" is male
  • "A1880" started this thread

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

1

Thursday, January 15th 2009, 8:49pm

Jabaco expressions and operators

Hi all,

I used the following to try out Jabaco's way of dealing with operators:

Source code

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Option Explicit 
Private errorCount As Integer = 0 
Private sErr As String = "" 
Public Sub main(ByJava args() As String) 
Call operatorCheck() 
End Sub 
Private Sub operatorCheck 
Dim obj As Object = New Object 

t "a", "&", "b", "a" & "b", "ab", "string concatenation" 
t "", "&", "b", "" & "b", "b", "string concatenation" 
t "a", "&", "", "a" & "", "a", "string concatenation" 
t "Null", "&", "b", Null & "b", "b", "String concatenation" 
t "a", "&", "Null", "a" & Null, "a", "String concatenation" 
t "Nothing", "&", "b", Nothing & "b", "b", "String concatenation" 
t "a", "&", "Nothing", "a" & Nothing, "a", "String concatenation" 

t "1", "*", "1", 1*1, 1, "multiply" 

' allowed neither in VB6 nor in Jabaco 
' t "Null", "*", "1", Null*1, Null, "multiply" 
' t "1", "*", "Null", 1*Null, Null, "multiply" 
' t "Null", "*", "Null", Null * Null, Null, "multiply" 

' t "Nothing", "*", "1", Nothing*1, Nothing, "multiply" 
' VB6 grumbles about overflow here 
t "20000", "*", "4", 20000 * 4, 80000, "multiply" 
' VB6 grumbles about overflow here 
t "70000", "*", "70000", 70000 * 70000, 4900000000, "multiply" 
' VB6 grumbles about overflow here 
t "70000", "*", "70000", 70000.0 * 70000.0, 4900000000, "multiply" 
t "70000", "*", "70000", CLng(70000) * CLng(70000), CLng(4900000000), "multiply" 

t "1", "+", "1", 1 + 1, 2, "add" 
' allowed neither in VB6 nor in Jabaco 
' t "Null", "+", "1", Null + 1, Null, "add" 

t "1", "-", "1", 1 - 1, 0, "subtract" 
' allowed neither in VB6 nor in Jabaco 
' t "Null", "-", "1", Null - 1, Null, "subtract" 
t "20", "/", "80", 20 / 80, 0.25, "float divide" 
t "20", "", "80", 20 \ 80, 0, "integer divide" 
t "2", "^", "10", CLng(2 ^ 10), CLng(1024), "power" 
t "25", "^", "0.5", CLng(25 ^ 0.5), CLng(5), "power" 
t "2", "^", "-1", 2 ^ -1, 0.5, "power" 

t "a", "=", "b", "a" = "b", False, "equals" 
t "a", "=", "a", "a" = "a", True, "equals" 
t "a", "<>", "b", "a" <> "b", True, "unequals" 
t "a", "<>", "a", "a" <> "a", False, "equals" 

t "12", "and", "10", 12 And 10, 8, "bitwise and" 
t "false", "and", "true", False And True, False, "and" 
t "true", "and", "false", True And False, False, "and" 
t "false", "and", "false", False And False, False, "and" 
t "true", "and", "true", True And True, True, "and" 


' allowed in VB6 but not implemented in Jabaco 
' t "Obj", "is", "Obj", obj Is obj, True, "is comparison" 

' t "a", "like", "[b-z]", "a" Like "[b-z]", False, "like comparison" 

' t "12", "eqv", "10", 12 eqv 10, -7, "eqv equivalence" 
' t "12", "imp", "10", 12 imp 10, -5, "imp implication" 

t "10", "mod", "5", 10 Mod 5, 0, "mod modulo" 
t "10", "mod", "3", 10 Mod 3, 1, "mod modulo" 
t "12", "mod", "4.3", round(12 Mod 4.3, 2), round(0.00, 2), "mod modulo" 
t "12.6", "mod", "5", round(12.6 Mod 5, 2), round(3.00, 2), "mod modulo" 

t "12", "not", "", Not 12, -12 - 1, "bitwise not" 
t "10", "not", "", Not 10, -10 - 1, "bitwise not" 

t "12", "or", "10", 12 Or 10, 14, "bitwise or" 
t "false", "or", "true", False Or True, True, "or" 
t "true", "or", "false", True Or False, True, "or" 
t "false", "or", "false", False Or False, False, "or" 
t "true", "or", "true", True Or True, True, "or" 
t "12", "xor", "10", 12 XOr 10, 6, "bitwise xor" 
t "false", "xor", "true", False XOr True, True, "xor" 
t "true", "xor", "false", True XOr False, True, "xor" 
t "false", "xor", "false", False XOr False, False, "or" 
t "true", "xor", "true", True XOr True, False, "xor" 
If ErrorCount > 0 Then 
msgbox "Errors: " & ErrorCount & vbcrlf & "-------------" & sErr 
End If 
End Sub 
Private Sub t(lVal As String, op As String, rVal As String, res As String, resComp As String, remark As String) 
Dim s As String 

If res <> resComp Then 
s = lVal & " " & op & " " & rVal & " = " & res & " <> " & resComp & " " & remark 
sErr = sErr & vbCrLf & s 
errorCount = errorCount + 1 
End If 
End Sub


The test shows that Jabaco handles most operators identically to VB6

Not implemented operators in Jabaco: eqv, imp, like, is

The "mod" operator of Jabaco behaves differently to that of VB6 if operands are non-integers. Well, that shouldn't be the case in well-behaved programs anyhow :)

Jabaco and VB6 behave differently in case of Null operands and in some overflow situations. Be aware of that!

Happy experimenting!

A1880

Manuel

Administrator

  • "Manuel" is male

Posts: 256

Date of registration: Jul 16th 2008

Location: Erlangen, Germany

Occupation: Software Developer

Hobbies: Jabaco, game theory, text-mining

  • Send private message

2

Thursday, January 15th 2009, 9:10pm

That was a good test. I'll implement the missing operators in a future version.

Rate this thread
WoltLab Burning Board