Skip to content

Commit 2e3a685

Browse files
authored
Merge pull request #615 from witheve/test-floats
Special case testing floats to account for rounding/platform differences
2 parents 9afe634 + ca57134 commit 2e3a685

File tree

2 files changed

+136
-111
lines changed

2 files changed

+136
-111
lines changed

test/math.ts

Lines changed: 95 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,67 @@
11
import * as test from "tape";
2-
import {evaluate,verify,dedent,testSingleExpressionByList} from "./shared_functions";
2+
import {evaluate, verify, dedent, testSingleExpressionByList, valueTest} from "./shared_functions";
33

44
// Test Constants
5-
// Would this fail on different architectures than mine? Not according to dcmumentation Maybe we Should
5+
// Would this fail on different architectures than mine? Not according to documentation Maybe we Should
66
// flush out that implicit assumption.
77

8-
let constants_list : any = [
9-
{"Expression":"pi[]", "Value":"3.141592653589793"},
10-
{"Expression":"e[]", "Value":"2.718281828459045"},
11-
{"Expression":"ln2[]", "Value":"0.6931471805599453"},
12-
{"Expression":"log2e[]", "Value":"1.4426950408889634"},
13-
{"Expression":"log10e[]", "Value":"0.4342944819032518"},
14-
{"Expression":"sqrt1/2[]", "Value":"0.7071067811865476"},
15-
{"Expression":"sqrt2[]", "Value":"1.4142135623730951"}
8+
let delta = 0.00000000001;
9+
10+
let constants_list : valueTest[] = [
11+
{expression: "pi[]", expectedValue: 3.141592653589793},
12+
{expression: "e[]", expectedValue: 2.718281828459045},
13+
{expression: "ln2[]", expectedValue: 0.6931471805599453},
14+
{expression: "log2e[]", expectedValue: 1.4426950408889634},
15+
{expression: "log10e[]", expectedValue: 0.4342944819032518},
16+
{expression: "sqrt1/2[]", expectedValue: 0.7071067811865476},
17+
{expression: "sqrt2[]", expectedValue: 1.4142135623730951}
1618
]
1719
testSingleExpressionByList(constants_list);
1820

1921
// Test Power Function
20-
let pow_list : any = [
21-
{"Expression":"pow[ value:2 by:3 ]", "Value":"8"},
22-
{"Expression":"pow[ value:9 by:1 / 2 ]", "Value":"3"}]
22+
let pow_list : valueTest[] = [
23+
{expression: "pow[ value:2 by:3 ]", expectedValue: 8},
24+
{expression: "pow[ value:9 by:1 / 2 ]", expectedValue: 3}]
2325
testSingleExpressionByList(pow_list);
2426

2527
// Test Log Function
26-
let log_list : any = [
27-
{"Expression":"log[ value: e[] ]", "Value":"1"},
28-
{"Expression":"log[ value: 10 base: 10 ]", "Value":"1"}]
28+
let log_list : valueTest[] = [
29+
{expression: "log[ value: e[] ]", expectedValue: 1},
30+
{expression: "log[ value: 10 base: 10 ]", expectedValue: 1}]
2931
testSingleExpressionByList(log_list);
3032

3133
// Test Exp Function
32-
let exp_list : any = [
33-
{"Expression":"exp[ value: 1 ]", "Value":"2.718281828459045"}]
34+
let exp_list : valueTest[] = [
35+
{expression: "exp[ value: 1 ]", expectedValue: 2.718281828459045}]
3436
testSingleExpressionByList(exp_list);
3537

3638
// Test Trig Functions
37-
let trig_list : any = [
38-
{"Expression":"sin[ radians: 1 ]", "Value":"0.8414709848078965"},
39-
{"Expression":"cos[ radians: 1 ]", "Value":"0.5403023058681398"},
40-
{"Expression":"tan[ radians: 1 ]", "Value":"1.5574077246549023"}
39+
let trig_list : valueTest[] = [
40+
{expression: "sin[ radians: 1 ]", expectedValue: 0.8414709848078965},
41+
{expression: "cos[ radians: 1 ]", expectedValue: 0.5403023058681398},
42+
{expression: "tan[ radians: 1 ]", expectedValue: 1.5574077246549023}
4143
]
4244
testSingleExpressionByList(trig_list);
4345

4446

4547
test("Should be able to use the sin function with degrees and radians", (assert) => {
4648
let expected = {
4749
insert: [
48-
["a", "tag", "div"],
49-
["a", "text", "1"],
50-
["b", "tag", "div"],
51-
["b", "text", "0.9999996829318346"],
50+
["a", "floatTest", "1"],
51+
["b", "floatTest", "0.9999996829318346"],
5252
],
5353
remove: [],
5454
};
5555

5656
evaluate(assert, expected, `
57-
Now consider this:
58-
5957
~~~
6058
search
6159
y = sin[degrees: 90]
6260
x = sin[radians: 3.14 / 2]
6361
64-
bind @browser
65-
[#div text: y]
66-
[#div text: x]
62+
bind
63+
[floatTest: y]
64+
[floatTest: x]
6765
~~~
6866
`);
6967
assert.end();
@@ -72,25 +70,21 @@ test("Should be able to use the sin function with degrees and radians", (assert)
7270
test("Should be able to use the cos function with degrees and radians", (assert) => {
7371
let expected = {
7472
insert: [
75-
["a", "tag", "div"],
76-
["a", "text", "1"],
77-
["b", "tag", "div"],
78-
["b", "text", "-0.9999987317275395"],
73+
["a", "floatTest", "1"],
74+
["b", "floatTest", "-0.9999987317275395"],
7975
],
8076
remove: [],
8177
};
8278

8379
evaluate(assert, expected, `
84-
Now consider this:
85-
8680
~~~
8781
search
8882
y = cos[degrees: 0]
8983
x = cos[radians: 3.14]
9084
91-
bind @browser
92-
[#div text: y]
93-
[#div text: x]
85+
bind
86+
[floatTest: y]
87+
[floatTest: x]
9488
~~~
9589
`);
9690
assert.end();
@@ -99,122 +93,129 @@ test("Should be able to use the cos function with degrees and radians", (assert)
9993
test("Should be able to use the tan function with degrees and radians", (assert) => {
10094
let expected = {
10195
insert: [
102-
["a", "tag", "div"],
103-
["a", "text", "0.5773502691896257"],
104-
["b", "tag", "div"],
105-
["b", "text", "0.5463024898437905"],
96+
["a", "floatTest", "0.5773502691896257"],
97+
["b", "floatTest", "0.5463024898437905"],
10698
],
10799
remove: [],
108100
};
109101

110102
evaluate(assert, expected, `
111-
Now consider this:
112-
113103
~~~
114104
search
115105
y = tan[degrees: 30]
116106
x = tan[radians: 0.5]
117107
118-
bind @browser
119-
[#div text: y]
120-
[#div text: x]
108+
bind
109+
[floatTest: y]
110+
[floatTest: x]
121111
~~~
122112
`);
123113
assert.end();
124114
})
125115

126116
// Test inverse Trig
127-
let atrig_list : any = [
128-
{"Expression":"asin[ value: 0.8414709848078965 ]", "Value":"1"},
129-
// Does Eve need an implicit round under the hood? The below should be 1
130-
{"Expression":"acos[ value: 0.5403023058681398 ]", "Value":"0.9999999999999999"},
131-
{"Expression":"atan[ value: 1.5574077246549023 ]", "Value":"1"},
117+
let atrig_list : valueTest[] = [
118+
{expression: "asin[ value: 0.8414709848078965 ]", expectedValue: 1},
119+
{expression: "acos[ value: 0.5403023058681398 ]", expectedValue: 0.9999999999999999},
120+
{expression: "atan[ value: 1.5574077246549023 ]", expectedValue: 1},
132121
]
133122
testSingleExpressionByList(atrig_list);
134123

135124
// Test Hyperbolic Functions
136-
let hyp_list : any = [
137-
{"Expression":"sinh[ value: 1 ]", "Value":"1.1752011936438014"},
138-
{"Expression":"cosh[ value: 1 ]", "Value":"1.5430806348152437"},
139-
{"Expression":"tanh[ value: 1 ]", "Value":"0.7615941559557649"},
125+
let hyp_list : valueTest[] = [
126+
{expression: "sinh[ value: 1 ]", expectedValue: 1.1752011936438014},
127+
{expression: "cosh[ value: 1 ]", expectedValue: 1.5430806348152437},
128+
{expression: "tanh[ value: 1 ]", expectedValue: 0.7615941559557649},
140129
]
141130
testSingleExpressionByList(hyp_list);
142131

143132
// Test Inverse Hyperbolic Functions
144-
let ahyp_list : any = [
145-
{"Expression":"asinh[ value: 1.1752011936438014 ]", "Value":"1"},
146-
{"Expression":"acosh[ value: 1.5430806348152437 ]", "Value":"1"},
147-
{"Expression":"atanh[ value: 0.7615941559557649 ]", "Value":"0.9999999999999999"},
133+
let ahyp_list : valueTest[] = [
134+
{expression: "asinh[ value: 1.1752011936438014 ]", expectedValue: 1},
135+
{expression: "acosh[ value: 1.5430806348152437 ]", expectedValue: 1},
136+
{expression: "atanh[ value: 0.7615941559557649 ]", expectedValue: 0.9999999999999999},
148137
]
149138
testSingleExpressionByList(ahyp_list);
150139

151-
test("Range and function within function", (assert) => {
140+
test("Test range", (assert) => {
152141
let expected = {
153142
insert: [
154-
["a", "tag", "div"],
155-
["a", "text", "1"],
156-
["b", "tag", "div"],
157-
["b", "text", "2"],
158-
["c", "tag", "div"],
159-
["c", "text", "3"],
143+
["a", "result", "1"],
144+
["b", "result", "2"],
145+
["c", "result", "3"],
160146
],
161147
remove: [],
162148
};
163149

164150
evaluate(assert, expected, `
165-
Now consider this:
151+
~~~
152+
search
153+
x = range[from:1 to: 3 increment: 1 ]
166154
155+
bind
156+
[result: x]
157+
~~~
158+
`);
159+
assert.end();
160+
})
161+
162+
test("Test nested functions", (assert) => {
163+
let expected = {
164+
insert: [
165+
["a", "floatTest", "1"],
166+
],
167+
remove: [],
168+
};
169+
170+
evaluate(assert, expected, `
167171
~~~
168172
search
169-
x = range[from:1 to: pi[] increment: 1 ]
173+
x = sin[radians: pi[] / 2]
170174
171-
bind @browser
172-
[#div text:x]
175+
bind
176+
[floatTest: x]
173177
~~~
174178
`);
175179
assert.end();
176180
})
177181

178182
// Test Floor Function
179-
let floor_list : any = [
180-
{"Expression":"floor[ value: 1.0000000000000001 ]", "Value":"1"},
181-
{"Expression":"floor[ value: 1.999999999999999 ]", "Value":"1"},
183+
let floor_list : valueTest[] = [
184+
{expression: "floor[ value: 1.0000000000000001 ]", expectedValue: 1},
185+
{expression: "floor[ value: 1.999999999999999 ]", expectedValue: 1},
182186
]
183187
testSingleExpressionByList(floor_list);
184188

185189
// Test Ceiling Function
186-
let ceiling_list : any = [
187-
{"Expression":"ceiling[ value: 1.000000000000001 ]", "Value":"2"},
188-
{"Expression":"ceiling[ value: 1.999999999999999 ]", "Value":"2"},
190+
let ceiling_list : valueTest[] = [
191+
{expression: "ceiling[ value: 1.000000000000001 ]", expectedValue: 2},
192+
{expression: "ceiling[ value: 1.999999999999999 ]", expectedValue: 2},
189193
]
190194
testSingleExpressionByList(ceiling_list);
191195

192-
193196
// Test ABS Function
194-
let abs_list : any = [
195-
{"Expression":"abs[ value: -1 ]", "Value":"1"},
196-
{"Expression":"abs[ value: 1 ]", "Value":"1"},
197+
let abs_list : valueTest[] = [
198+
{expression: "abs[ value: -1 ]", expectedValue: 1},
199+
{expression: "abs[ value: 1 ]", expectedValue: 1},
197200
]
198201
testSingleExpressionByList(abs_list);
199202

200-
201203
// Test Mod Function
202-
let mod_list : any = [
203-
{"Expression":"mod[ value: 7 by: 3]", "Value":"1"},
204-
{"Expression":"mod[ value: 6 by: 3]", "Value":"0"},
204+
let mod_list : valueTest[] = [
205+
{expression: "mod[ value: 7 by: 3]", expectedValue: 1},
206+
{expression: "mod[ value: 6 by: 3]", expectedValue: 0},
205207
]
206208
testSingleExpressionByList(mod_list);
207209

208-
209210
// Test Round Function
210-
let round_list : any = [
211-
{"Expression":"round[ value: 1.49999999999999 ]", "Value":"1"},
212-
{"Expression":"round[ value: 1.5 ]", "Value":"2"}
211+
let round_list : valueTest[] = [
212+
{expression: "round[ value: 1.49999999999999 ]", expectedValue: 1},
213+
{expression: "round[ value: 1.5 ]", expectedValue: 2}
213214
]
214215
testSingleExpressionByList(round_list);
215216

216217
// Test Round Function
217-
let toFixed_list : any = [
218-
{"Expression":"to-fixed[ value: 1.499 places:2 ]", "Value":"1.50"},
218+
let toFixed_list : valueTest[] = [
219+
{expression: "to-fixed[ value: 1.499 places: 2 ]", expectedValue: 1.50},
219220
]
220-
testSingleExpressionByList(toFixed_list );
221+
testSingleExpressionByList(toFixed_list );

0 commit comments

Comments
 (0)