-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.fl
158 lines (116 loc) · 2.54 KB
/
test.fl
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//val _ = print "Executing regression tests"
// Literals:
val anInt = 100
val aDouble = 3.14
val aString = "Hello World!"
val literals=(nil,123,123.1234,"Hello World!",true,false, class java.util.ArrayList)
// Lists
begin
assert(rest[1,2,3]=[2,3]);
assert(first[1,2,3]=1)
end
// case pattern matching
val _ = let val v = case (1,2) of
0 => "null"
|
(x,y) => x+y
|
x=>"irgend"
in
assert(v=3)
end
val _ = let val f = fn x => x+1
val g = fn x => x*2
in
assert(((f o g) 2) = 5)
end
val _ = let
val (1::x::nil) = [1,2]
in
assert (x=2)
end
val _ = let
val compose = fn (f,g) => fn(x) => f (g x)
val f = fn x => x + 1
val g = fn x => x*2
val f_after_g = 5
val g_after_f = 6
in
assert( ((f o g) 2 ) = f_after_g );
assert( ((g o f) 2 ) = g_after_f );
assert( (compose(f,g) 2 ) = f_after_g );
assert( (compose(g,f) 2 ) = g_after_f )
end
val _ = let
datatype bar = FOO
| bee of Integer*String
| cee of Integer*String
val fff = fn FOO=>0
| cee(x,y) => y
| bee(x,y)=>x
in
assert (fff FOO = 0) ;
assert (fff (cee(1,"2")) = "2") ;
assert (fff (bee(1,"2")) = 1)
end
val _ = let
val rec factorial = fn 0 => 1
| n=> n * factorial (n-1)
in
assert ( (factorial 0)=1 ) ;
assert ( (factorial 1)=1 ) ;
assert ( (factorial 10)=3628800 )
end
// folds:
val _ = assert(
foldl(cons,nil,[1,2,3])
= [3,2,1])
val _ = assert(
foldl(fn (a,b) => string [a,b],"",[1,2,3,4])
= "4321")
// various
val _ = assert ( #1 (1,2) = 1)
val _ = assert((begin 2;1 end) = 1)
val _ = let
val eval = fn (NUM x) => x
| (IF(b,t,e)) => if eval(b) then eval(t) else eval(e)
| (BOOL b) => b
| (_) => "?"
in
assert(eval((IF (BOOL false, NUM 1, NUM 2)))=2);
assert(eval(read("if true then 1 else 2"))=1);
assert(eval(read("lalal"))="?")
end
// java:
val _ = let
val System = class java.lang.System
val ArrayList = class java.util.ArrayList
val arrayList=ArrayList.new()
in
arrayList.add(1);
assert(1=arrayList.get(0))
end
// fun keyword:
val _ = let
fun foo 1 y = 1 + y
| foo x y = x
in
assert (101=(foo 1 100));
assert (2 = (foo 2 123))
end
val _ = let
fun add x y = x + y
fun mul x y = x * y
val succ = add 1
val times2 = mul 2
in
assert (101=(succ 100));
assert (6 = (times2 3))
end
val _ = let
fun sumList s = case s of [] => 0 | h::t => h + (sumList t)
val list = [1,2,3,4,5]
in
assert(15=sumList list);
assert(16=foldl (addi, 1, list))
end