Skip to content

Commit 0e5fe9b

Browse files
authored
feat: add tests for number semantics (microsoft#555)
1 parent 0e9e34a commit 0e5fe9b

2 files changed

Lines changed: 148 additions & 1 deletion

File tree

tests/interpreter/cases/arithmetic/mod.rs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,64 @@ fn basic() -> Result<()> {
2727
div {
2828
21 / 5 == 4.2
2929
}
30+
31+
eq1 { 1 == 1.0 }
32+
eq2 { 1 == 1.00 }
33+
neq1 { 1 != 1.0001 }
34+
35+
sum { 0.1 + 0.2 == 0.3 }
36+
diff { 0.3 - 0.2 == 0.1 }
37+
product { 0.1 * 0.2 == 0.02 }
38+
quotient { 0.3 / 0.1 == 3.0 }
39+
40+
lt { 1 < 1.0001 }
41+
le { 1 <= 1.0 }
42+
gt { 1.0001 > 1 }
43+
ge { 1.0 >= 1 }
44+
neg_lt { -1 < 0 }
45+
neg_le { -1 <= -1 }
46+
47+
div1 { 1 / 2 == 0.5 }
48+
div2 { 5 / 2 == 2.5 }
49+
50+
neg1 { -1 == -1 }
51+
neg2 { -1 + 2 == 1 }
52+
neg3 { -(2 + 3) == -5 }
53+
neg4 { 1 - -1 == 2 }
54+
55+
big1 { 1000000000000000000000 + 1 == 1000000000000000000001 }
56+
big2 { 2 * 1000000000000000000000 == 2000000000000000000000 }
57+
big3 { 2 / 1e18 == 2e-18 }
3058
"#;
3159

3260
let expected = vec![Value::from_json_str(
3361
r#" {
3462
"add" : true,
3563
"sub" : true,
3664
"mul" : true,
37-
"div" : true
65+
"div" : true,
66+
"eq1": true,
67+
"eq2": true,
68+
"neq1": true,
69+
"sum": true,
70+
"diff": true,
71+
"product": true,
72+
"quotient": true,
73+
"lt": true,
74+
"le": true,
75+
"gt": true,
76+
"ge": true,
77+
"neg_lt": true,
78+
"neg_le": true,
79+
"div1": true,
80+
"div2": true,
81+
"neg1": true,
82+
"neg2": true,
83+
"neg3": true,
84+
"neg4": true,
85+
"big1": true,
86+
"big2": true,
87+
"big3": true
3888
}"#,
3989
)?];
4090

tests/interpreter/cases/arithmetic/tests.yaml

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,100 @@ cases:
1919
c: 1
2020
d: -2
2121

22+
- note: integer-float-equality
23+
data: {}
24+
modules:
25+
- |
26+
package test
27+
28+
eq1 = 1 == 1.0
29+
eq2 = 1 == 1.00
30+
neq1 = 1 != 1.0001
31+
query: data.test
32+
want_result:
33+
eq1: true
34+
eq2: true
35+
neq1: true
36+
37+
- note: float-precision
38+
data: {}
39+
modules:
40+
- |
41+
package test
42+
43+
sum = 0.1 + 0.2
44+
diff = 0.3 - 0.2
45+
product = 0.1 * 0.2
46+
quotient = 0.3 / 0.1
47+
query: data.test
48+
want_result:
49+
sum: 0.30000000000000004
50+
diff: 0.09999999999999998
51+
product: 0.020000000000000004
52+
quotient: 2.9999999999999996
53+
54+
- note: numeric-comparisons
55+
data: {}
56+
modules:
57+
- |
58+
package test
59+
60+
lt = 1 < 1.0001
61+
le = 1 <= 1.0
62+
gt = 1.0001 > 1
63+
ge = 1.0 >= 1
64+
neg_lt = -1 < 0
65+
neg_le = -1 <= -1
66+
query: data.test
67+
want_result:
68+
lt: true
69+
le: true
70+
gt: true
71+
ge: true
72+
neg_lt: true
73+
neg_le: true
74+
75+
- note: division
76+
data: {}
77+
modules:
78+
- |
79+
package test
80+
81+
div1 = 1 / 2
82+
div2 = 5 / 2
83+
query: data.test
84+
want_result:
85+
div1: 0.5
86+
div2: 2.5
87+
88+
- note: negative-number-arithmetic
89+
data: {}
90+
modules:
91+
- |
92+
package test
93+
94+
neg1 = -1
95+
neg2 = -1 + 2
96+
neg3 = 0 - (2 + 3)
97+
neg4 = 1 - -1
98+
query: data.test
99+
want_result:
100+
neg1: -1
101+
neg2: 1
102+
neg3: -5
103+
neg4: 2
104+
105+
- note: big-numbers
106+
data: {}
107+
modules:
108+
- |
109+
package test
110+
111+
big1 = 1000000000000000000000 + 1
112+
big2 = 2 * 1000000000000000000000
113+
big3 = 2 / 1e18
114+
query: data.test
115+
want_result:
116+
big1: 1000000000000000000001
117+
big2: 2000000000000000000000
118+
big3: 2e-18

0 commit comments

Comments
 (0)