2019-08-03 05:29:50 +03:00
|
|
|
#!/bin/bash
|
|
|
|
assert() {
|
|
|
|
expected="$1"
|
|
|
|
input="$2"
|
|
|
|
|
|
|
|
./chibicc "$input" > tmp.s || exit
|
|
|
|
gcc -static -o tmp tmp.s
|
|
|
|
./tmp
|
|
|
|
actual="$?"
|
|
|
|
|
|
|
|
if [ "$actual" = "$expected" ]; then
|
|
|
|
echo "$input => $actual"
|
|
|
|
else
|
|
|
|
echo "$input => $expected expected, but got $actual"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2020-10-07 14:12:57 +03:00
|
|
|
assert 0 'return 0;'
|
|
|
|
assert 42 'return 42;'
|
|
|
|
assert 21 'return 5+20-4;'
|
|
|
|
assert 41 'return 12 + 34 - 5 ;'
|
|
|
|
assert 47 'return 5+6*7;'
|
|
|
|
assert 15 'return 5*(9-6);'
|
|
|
|
assert 4 'return (3+5)/2;'
|
|
|
|
assert 10 'return -10+20;'
|
|
|
|
assert 10 'return - -10;'
|
|
|
|
assert 10 'return - - +10;'
|
|
|
|
|
|
|
|
assert 0 'return 0==1;'
|
|
|
|
assert 1 'return 42==42;'
|
|
|
|
assert 1 'return 0!=1;'
|
|
|
|
assert 0 'return 42!=42;'
|
|
|
|
|
|
|
|
assert 1 'return 0<1;'
|
|
|
|
assert 0 'return 1<1;'
|
|
|
|
assert 0 'return 2<1;'
|
|
|
|
assert 1 'return 0<=1;'
|
|
|
|
assert 1 'return 1<=1;'
|
|
|
|
assert 0 'return 2<=1;'
|
|
|
|
|
|
|
|
assert 1 'return 1>0;'
|
|
|
|
assert 0 'return 1>1;'
|
|
|
|
assert 0 'return 1>2;'
|
|
|
|
assert 1 'return 1>=0;'
|
|
|
|
assert 1 'return 1>=1;'
|
|
|
|
assert 0 'return 1>=2;'
|
|
|
|
|
|
|
|
assert 3 'a=3; return a;'
|
|
|
|
assert 8 'a=3; z=5; return a+z;'
|
|
|
|
|
|
|
|
assert 3 'a=3; return a;'
|
|
|
|
assert 8 'a=3; z=5; return a+z;'
|
|
|
|
assert 6 'a=b=3; return a+b;'
|
|
|
|
assert 3 'foo=3; return foo;'
|
|
|
|
assert 8 'foo123=3; bar=5; return foo123+bar;'
|
|
|
|
|
|
|
|
assert 1 'return 1; 2; 3;'
|
|
|
|
assert 2 '1; return 2; 3;'
|
|
|
|
assert 3 '1; 2; return 3;'
|
2020-09-26 02:59:56 +03:00
|
|
|
|
2019-08-03 05:29:50 +03:00
|
|
|
echo OK
|