[コンパイラ]テストスクリプト

test.sh

#!bin/bash
assert(){
	expected="$1"
	input="$2"

	./9cc "$input" > tmp.s
	gcc -o tmp tmp.s
	./tmp
	actual="$?"

	if [ "$actual" = "$expected" ]; then
		echo "$input => $actual"
	else
		echo "$input => $expected expected, but got $actual"
		exit 1
	fi
}

assert 0 0
assert 42 42

echo OK

$ ls
9cc 9cc.c test.sh tmp tmp.s
$ sudo chmod a+x test.sh
$ sh test.sh
0 => 0
42 => 42
OK

Makefile

CFLAGS=-std=c11 -g -static

9cc: 9cc.c

test: 9cc
	sh test.sh

clean:
	rm -f 9cc *.o *~ tmp*

.PHONY: test clean