-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.sh
126 lines (97 loc) · 5.34 KB
/
test.sh
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
#!/bin/bash
assert(){
expected="$1"
input="$2"
./wcc "$input"
gcc -g -static -o tmp code.S
./tmp
actual="$?"
if [ "$actual" = "$expected" ]; then
echo "$input => $actual"
else
echo "$input => $expected expected, but got $actual"
exit 1
fi
}
assert 3 'int main() { int x[3]; *x=3; x[1]=4; x[2]=5; return *x; }'
assert 4 'int main() { int x[3]; *x=3; x[1]=4; x[2]=5; return *(x+1); }'
assert 5 'int main() { int x[3]; *x=3; x[1]=4; x[2]=5; return *(x+2); }'
assert 5 'int main() { int x[3]; *x=3; x[1]=4; x[2]=5; return *(x+2); }'
assert 5 'int main() { int x[3]; *x=3; x[1]=4; 2[x]=5; return *(x+2); }'
assert 0 'int main() { int x[2][3]; int *y=x[0]; y[0]=0; return x[0][0]; }'
assert 1 'int main() { int x[2][3]; int *y=x[0]; y[1]=1; return x[0][1]; }'
assert 2 'int main() { int x[2][3]; int *y=x[0]; y[2]=2; return x[0][2]; }'
assert 3 'int main() { int x[2][3]; int *y=x[0]; y[3]=3; return x[1][0]; }'
assert 4 'int main() { int x[2][3]; int *y=x[0]; y[4]=4; return x[1][1]; }'
assert 5 'int main() { int x[2][3]; int *y=x[0]; y[5]=5; return x[1][2]; }'
assert 6 'int main() { int x[2][3]; int *y=x[0]; y[6]=6; return x[2][0]; }'
assert 3 'int main() { int x[2]; int *y=x; *y=3; return *x; }'
assert 3 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *x; }'
assert 4 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *(x+1); }'
assert 5 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *(x+2); }'
assert 0 'int main() { return 0; }'
assert 42 'int main() { return 42; }'
assert 21 'int main() { return 5+20-4; }'
assert 41 'int main() { return 12 + 34 - 5 ; }'
assert 47 'int main() { return 5+6*7; }'
assert 15 'int main() { return 5*(9-6); }'
assert 4 'int main() { return (3+5)/2; }'
assert 10 'int main() { return -10+20; }'
assert 10 'int main() { return - -10; }'
assert 10 'int main() { return - - +10; }'
assert 0 'int main() { return 0==1; }'
assert 1 'int main() { return 42==42; }'
assert 1 'int main() { return 0!=1; }'
assert 0 'int main() { return 42!=42; }'
assert 1 'int main() { return 0<1; }'
assert 0 'int main() { return 1<1; }'
assert 0 'int main() { return 2<1; }'
assert 1 'int main() { return 0<=1; }'
assert 1 'int main() { return 1<=1; }'
assert 0 'int main() { return 2<=1; }'
assert 1 'int main() { return 1>0; }'
assert 0 'int main() { return 1>1; }'
assert 0 'int main() { return 1>2; }'
assert 1 'int main() { return 1>=0; }'
assert 1 'int main() { return 1>=1; }'
assert 0 'int main() { return 1>=2; }'
assert 3 'int main() { int a; a=3; return a; }'
assert 8 'int main() { int a; int z; a=3; z=5; return a+z; }'
assert 3 'int main() { int a=3; return a; }'
assert 8 'int main() { int a=3; int z=5; return a+z; }'
assert 1 'int main() { return 1; 2; 3; }'
assert 2 'int main() { 1; return 2; 3; }'
assert 3 'int main() { 1; 2; return 3; }'
assert 3 'int main() { int foo=3; return foo; }'
assert 8 'int main() { int foo123=3; int bar=5; return foo123+bar; }'
assert 3 'int main() { if (0) return 2; return 3; }'
assert 3 'int main() { if (1-1) return 2; return 3; }'
assert 2 'int main() { if (1) return 2; return 3; }'
assert 2 'int main() { if (2-1) return 2; return 3; }'
assert 3 'int main() { {1; {2;} return 3;} }'
assert 10 'int main() { int i=0; i=0; while(i<10) i=i+1; return i; }'
assert 55 'int main() { int i=0; int j=0; while(i<=10) {j=i+j; i=i+1;} return j; }'
assert 55 'int main() { int i=0; int j=0; for (i=0; i<=10; i=i+1) j=i+j; return j; }'
assert 3 'int main() { for (;;) return 3; return 5; }'
assert 3 'int ret3() { return 3; }int ret5() { return 5; }int add(int x, int y) { return x+y; }int sub(int x, int y) { return x-y; }int main() { return ret3(); }'
assert 5 'int ret3() { return 3; }int ret5() { return 5; }int add(int x, int y) { return x+y; }int sub(int x, int y) { return x-y; }int main() { return ret5(); }'
assert 8 'int ret3() { return 3; }int ret5() { return 5; }int add(int x, int y) { return x+y; }int sub(int x, int y) { return x-y; }int main() { return add(3, 5); }'
assert 2 'int ret3() { return 3; }int ret5() { return 5; }int add(int x, int y) { return x+y; }int sub(int x, int y) { return x-y; }int main() { return sub(5, 3); }'
assert 21 'int add6(int a, int b, int c, int d, int e, int f) {return a+b+c+d+e+f;}int main() { return add6(1,2,3,4,5,6); }'
assert 32 'int ret32() { return 32; }int main() { return ret32(); } '
assert 7 'int add2(int x, int y) { return x+y; }int main() { return add2(3,4); } '
assert 1 'int sub2(int x, int y) { return x-y; }int main() { return sub2(4,3); } '
assert 55 'int fib(int x) { if (x<=1) return 1; return fib(x-1) + fib(x-2);} int main() { return fib(9); } '
assert 3 'int main() { int x=3; return *&x; }'
assert 3 'int main() { int x=3; int *y=&x; int **z=&y; return **z; }'
assert 5 'int main() { int y=5; int x=3; return *(&x+1); }'
assert 5 'int main() { int y=5; int x=3; return *(1+&x); }'
assert 3 'int main() { int y=5; int x=3; return *(&y-1); }'
assert 2 'int main() { int x=3; return (&x+2)-&x; }'
assert 5 'int main() { int y=5; int x=3; int *z=&x; return *(z+1); }'
assert 3 'int main() { int y=5; int x=3; int *z=&y; return *(z-1); }'
assert 5 'int main() { int x=3; int *y=&x; *y=5; return x; }'
assert 7 'int main() { int y=5; int x=3; *(&x+1)=7; return y; }'
assert 7 'int main() { int y=5; int x=3; *(&y-1)=7; return x; }'
assert 8 'int foo(int *x, int y) { return *x + y; } int main() { int y=5; int x=3; return foo(&x, y); } '
echo OK