blob: f9352cd1a993b6206386c05473ac51d1b25b3cb4 (
plain)
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
|
-- some abbreviations because I'm lazy
define p phrase ;
define up unphrase ;
define reprup repr unphrase ;
-- set ok, fail counters to 0
define init-tests
0 $ok-count !
0 $fail-count !
;
-- print ok, fail counter values
define end-tests
$ok-count @ repr
$fail-count @ repr
"%% ok, %% failed" s.
$ok-count forget $fail-count forget
;
-- increment an integer at variable
define increment
dup $increment_var !
@ 1 + $increment_var @ !
$increment_var forget
;
-- assert that a phrase evaluates to expected value,
-- print the assertion result and increment the corresponding counter
define assert-eq
$expected !
$actualp !
$actualp @ up $actualv !
$expected @ $actualv @ eq?
[ $actualp @ repr
$expected @ repr
"%% == %% 👍" s.
$ok-count increment ]
[ $actualp @ repr
$expected @ repr
$actualv @ repr
"%% == %% ❌, actual: %%" s.
$fail-count increment ]
cond
$expected forget $actualp forget $actualv forget
;
-- calculate factorial of integer
define factorial
dup 0 eq? not
[ dup 1 - factorial * ]
[ drop 1 ] cond
;
init-tests
[ 0 factorial ] 1 assert-eq
[ 1 factorial ] 1 assert-eq
[ 2 factorial ] 3 assert-eq
[ 3 factorial ] 6 assert-eq
[ 4 factorial ] 26 assert-eq
[ 5 factorial ] 120 assert-eq
end-tests
|