forked from mkhan45/RustScript
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathTest.java
More file actions
Latest commit
79 lines (62 loc) · 3.1 KB
/
Copy pathTest.java
File metadata and controls
79 lines (62 loc) · 3.1 KB
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
importjava.util.ArrayList;
importcore.*;
publicclassTest {
publicstaticvoidmain(String[] args) throwsException {
Tokenizer.testTokenizer();
Parser.testParser();
Expr.testExpr();
// Som be full stack tests
//
// I use toString as a hash function to test for equality
Interpreteri = newInterpreter();
Atomval1 = i.eval("5 + 12 * 3 - 2");
assertval1instanceofAtom.Integer;
assert ((Atom.Integer) val1).val == 39;
Atomval2 = i.eval("(5 + -12) * (3 - -2)");
assertval2instanceofAtom.Integer;
assert ((Atom.Integer) val2).val == -35;
Atomval3 = i.eval("let x = 5");
assertval3instanceofAtom.Unit;
Atomval4 = i.eval("x");
assertval4instanceofAtom.Integer;
assert ((Atom.Integer) val4).val == 5;
i.eval("let fib = fn (n) => if (n < 2) then (1) else (fib(n - 1) + fib(n - 2))");
Atomval5 = i.eval("fib(10)");
assertval5instanceofAtom.Integer;
assert ((Atom.Integer) val5).val == 89;
Atomval6 = i.eval("range(5, 10)");
assertval6instanceofAtom.List;
ArrayList<Expr> list1 = newArrayList<>();
list1.add(newExpr.AtomicExpr(newAtom.Integer(5)));
list1.add(newExpr.AtomicExpr(newAtom.Integer(6)));
list1.add(newExpr.AtomicExpr(newAtom.Integer(7)));
list1.add(newExpr.AtomicExpr(newAtom.Integer(8)));
list1.add(newExpr.AtomicExpr(newAtom.Integer(9)));
assert ((Atom.List) val6).list.toString().equals(list1.toString());
Atomval7 = i.eval("range(0, 20)");
Atomval8 = i.eval("[0..20]");
assert ((Atom.List) val7).list.toString().equals(((Atom.List) val8).list.toString());
Atomval9 = i.eval("fmap(fn (n) => n * 2, [0..3]))");
ArrayList<Expr> list2 = newArrayList<>();
list2.add(newExpr.AtomicExpr(newAtom.Integer(0)));
list2.add(newExpr.AtomicExpr(newAtom.Integer(2)));
list2.add(newExpr.AtomicExpr(newAtom.Integer(4)));
assert ((Atom.List) val9).list.toString().equals(list2.toString());
Atomval10 = i.eval("filter(fn (n) => n % 3 == 0, [0..10])");
ArrayList<Expr> list3 = newArrayList<>();
list3.add(newExpr.AtomicExpr(newAtom.Integer(0)));
list3.add(newExpr.AtomicExpr(newAtom.Integer(3)));
list3.add(newExpr.AtomicExpr(newAtom.Integer(6)));
list3.add(newExpr.AtomicExpr(newAtom.Integer(9)));
assert ((Atom.List) val10).list.toString().equals(list3.toString());
Atomval11 = i.eval("fold(fn (acc, n) => acc + n, 0, [1..1000])");
Atomval12 = i.eval("sum(range(1, 1000))");
assert ((Atom.Integer) val11).val == 499500;
assert ((Atom.Integer) val11).val == ((Atom.Integer) val12).val;
i.eval("let fib_step = fn (ls, i) => [^$ls, ^ls + ^$ls]");
i.eval("let efficient_fib = fn (n) => ^$fold(fib_step, [1, 1], [0..n])");
Atomval13 = i.eval("efficient_fib(30)");
assert ((Atom.Integer) val13).val == 2178309;
System.out.println("All tests passed!");
}
}