TinyRubyコンパイラ/テストスクリプトの追加
#TinyRuby
from TinyRubyコンパイラ
機能が増えてきたので、低レイヤを知りたい人のためのCコンパイラ作成入門の自動テストスクリプトを参考に、TinyRubyコンパイラにもテストスクリプトを追加する。
code:test.sh
#!/bin/bash
assert() {
expected="$1"
input="$2"
echo "$input" > tmp.rb
ruby tinyrubyc.rb tmp.rb > tmp.s
docker run --platform linux/amd64 --rm -v ${PWD}:/app -w /app gcc gcc -z noexecstack tmp.s libtinyruby.c -o tmp
actual=docker run --platform linux/amd64 --rm -v ${PWD}:/app -w /app gcc ./tmp
if $actual = $expected ; then
echo "$input => $actual"
else
echo "$input => $expected expected, but got $actual"
exit 1
fi
}
# 四則演算
assert 33 'p 99 / 3'
assert 200 'p 10 * 20'
assert 40 'p 30 + 20 - 10'
assert 60 'p 10 + 20 + 30'
assert 20 'p 10 + 20 - 30 * 4 / 12'
# 整数リテラル
assert 4649 'p 4649'
echo OK
テストに成功すると OK が出力される。
code:sh
$ ./test.sh
p 99 / 3 => 33
p 10 * 20 => 200
p 30 + 20 - 10 => 40
p 10 + 20 + 30 => 60
p 10 + 20 - 30 * 4 / 12 => 20
p 4649 => 4649
OK
失敗した場合は、以下のように期待値と実際に返ってきた値が表示される。
code:sh
$ ./test.sh
p 99 / 3 => 33
p 10 * 20 => 200
p 30 + 20 - 10 => 40
p 10 + 20 + 30 => 60
p 10 + 20 - 30 * 4 / 12 => 9999 expected, but got 20