summaryrefslogtreecommitdiff
path: root/testing.sh
blob: dee5b12ebf42358c22050ead20983d3a9bbca846 (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
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/sh

test() {
	QUIET="$1"
	CODE="$2"
	echo "--- $CODE ---"
	printf '%s' "$CODE" >"build/tmp.golem"
	./build/golemc "build/tmp.golem" >"build/tmp.orgaasm"
	[ "$QUIET" != "-q" ] && cat "build/tmp.orgaasm"
	orgaasm "build/tmp.orgaasm" "build/tmp.rom"
	orgaemu "build/tmp.rom"
	[ "$QUIET" != "-q" ] && echo ""
}

tup -q || ./build.sh || exit 1
test "$1" "main() {5 + 2; return 4;}"
test "$1" "main() {6 + 3;}"
test "$1" "main() {'a' - 'b';}"
test "$1" "main() { buzz(); } buzz() { return 42; }"
test "$1" "main() { fizz(50 + buzz() - 3) * 4; } fizz() { return 3; } buzz() { return 42; }"
test "$1" "global abc; main(){ return abc; }"
test "$1" "global abc = 5; main() { dbg abc; return abc; }"
test "$1" "main() { return abc; } global abc = 5;"
test "$1" "global abc = 5; main(){ inc(); return abc; } inc() { abc = abc + 1; }"
test "$1" "main() { wrt('H'); wrt('e'); wrt('l'); wrt('l'); wrt('o'); wrt('!'); wrt('\n'); }"
test "$1" "main() { a(a(0)); } a(x) { return x + 1; }"
test "$1" "main() { wrt(inc(inc('0'))); wrt('\n'); } inc(x) { return x + 1; }"
test "$1" "main() { wrt(up('u')); wrt('w'); wrt(up('u')); wrt('\n'); } up(c) { return c + 'A' - 'a'; }"
test "$1" "main() { wrt(add('A' - 'a', 'u')); wrt('\n'); } add(a, b) { return a + b; }"
test "$1" "main() return 0;"
test "$1" "main() { { wrt('c'); } { wrt('b'); { wrt('A'); } wrt('B'); } wrt('\n'); }"
test "$1" "main() { local i; i = '0'; loop { wrt i; i = i + 1; if (i > '9') break; } wrt '\n'; }"
test "$1" "global a[5] = 4; main() { wrt([a] + '0'); wrt '\n'; }"
test "$1" "global a[5] = 4; main() { wrt([a + 1] + '0'); wrt '\n'; }"
test "$1" "global a[5] = 4; main() { wrt([a + 4] + '0'); wrt '\n'; }"
test "$1" "global a[5] = 4; main() { wrt([a + 5] + '0'); wrt '\n'; }"
test "$1" "global a[3]; main() { [a] = 'U'; [a+1] = 'w'; [a+2] = '\n'; wrt[a]; wrt[a+1]; wrt[a]; wrt[a+2]; }"
test "$1" "main() { wrt('0' + div(6, 3)); wrt('\n'); } div(a, b) { return a / b; }"
test "$1" "main() { \"uwu\"; \"owo\"; }"
test "$1" "main() { wrt('0' + (5 < 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (7 < 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (9 < 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (5 > 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (7 > 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (9 > 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (5 <= 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (7 <= 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (9 <= 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (5 >= 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (7 >= 7)); wrt '\n'; }"
test "$1" "main() { wrt('0' + (9 >= 7)); wrt '\n'; }"
test "$1" "main() { local a; dbg a; inc(&a); dbg a; } inc(p) { [p] = [p] + 1; }"
test "$1" "global a; main() { dbg a; inc(&a); dbg a; } inc(p) { [p] = [p] + 1; }"
test "$1" "main() 0; //ayayayayayayaya comment"
test "$1" "main() return;"
test "$1" "main() { local a; a = 5; dbg a; a++; dbg a; }"
test "$1" "main() { local a; a = 5; dbg a; a--; dbg a; }"
test "$1" "main() { local a = 5; dbg a; a--; dbg a; }"
test "$1" "main() { wrt [\"(\"]; wrt '\n'; }"
test "$1" "main() { wrt inc('0') |> dec() |> inc() |> inc(); wrt '\n'; } inc(a) return a + 1; dec(a) return a - 1;"
test "$1" "main();"
test "$1" "main() {}"
test "$1" "main() {;;;;;;;;;;;;;;;;;}"
test "$1" "global a = 8, b, c = 4; main() { dbg a; dbg c; }"
test "$1" "global a, b = 6, c = 4; main() { dbg b; dbg c; }"
test "$1" "main() { local a = 5, b = 7, c; dbg a; dbg b; }"
test "$1" "main() { dbg 5 % 3; }"
test "$1" "main() { dbg [{1, 2, 3} + 2]; dbg [{1, 2, 3}]; }"
test "$1" "main() { err 'u'; }"
test "$1" "enum a, b, c; main() { dbg a; dbg b; dbg c; }"
test "$1" 'main() { dbg `howdy; }'
test "$1" 'main() { dbg v(1) |> i |> d(2) |> i; } v(a)=>a;i(a)=>d(a,1);d(a,b)=>a+b;'
rm -f build/tmp.*