From: j8takagi Date: Wed, 10 Nov 2010 10:25:35 +0000 (+0900) Subject: テストのサンプルとして、hoc1を追加 X-Git-Tag: 0.2p3~62 X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a17395f30c6ac4ec18acba4a99db4f34495747db;p=autotest_mk.git テストのサンプルとして、hoc1を追加 --- diff --git a/sample/hoc1/Makefile b/sample/hoc1/Makefile new file mode 100644 index 0000000..be721c6 --- /dev/null +++ b/sample/hoc1/Makefile @@ -0,0 +1,10 @@ +CC = gcc +CFLAGS = -g +.PHPNY: clean +hoc1: hoc.o + $(CC) $(CFLAGS) -o $@ $^ +clean: + rm -f hoc1 hoc.tab.c *.o + make clean -sC test +check: + @make -sC test diff --git a/sample/hoc1/hoc.y b/sample/hoc1/hoc.y new file mode 100644 index 0000000..1762895 --- /dev/null +++ b/sample/hoc1/hoc.y @@ -0,0 +1,68 @@ +%{ +#define YYSTYPE double /* data type of yacc stack */ +#include +#include +%} + +%token NUMBER +%left '+' '-' /* left associative, same precedence */ +%left '*' '/' '%' /* left associative, higher precedence */ +%left UNARYMINUS UNARYPLUS +%% +list: /* nothing */ + | list '\n' + | list expr '\n' { printf("\t%.8g\n", $2); } +; +expr: NUMBER { $$ = $1; } + | expr '+' expr { $$ = $1 + $3; } + | expr '-' expr { $$ = $1 - $3; } + | expr '*' expr { $$ = $1 * $3; } + | expr '/' expr { $$ = $1 / $3; } + | expr '%' expr { $$ = (int)$1 % (int)$3; } + | '(' expr ')'{ $$ = $2; } + | '-' expr %prec UNARYMINUS { $$ = -$2; } + | '+' expr %prec UNARYPLUS { $$ = $2; } +; +%% /* end of grammer */ + +char *progname; /* for error messages */ +int lineno = 1; + +int main(int argc, char *argv[]) { + progname = argv[0]; + yyparse(); +} + +int yylex(){ + int c; + while((c = getchar()) == ' ' || c == '\t') { + ; + } + if(c == EOF) { + return 0; + } + /* number */ + if(c == '.' || isdigit(c)) { + ungetc(c, stdin); + scanf("%lf", &yylval); + return NUMBER; + } + if(c == '\n') { + lineno++; + } + return c; +} + +/* called for yacc syntax error */ +int yyerror(char *s) { + warning(s, (char *)0); +} + +/* print warning message */ +int warning(char *s, char *t) { + fprintf(stderr, "%s: %s", progname, s); + if(t) { + fprintf(stderr, " %s", t); + } + fprintf(stderr, " near line %d\n", lineno); +} diff --git a/sample/hoc1/test/Define.mk b/sample/hoc1/test/Define.mk new file mode 100644 index 0000000..e114af6 --- /dev/null +++ b/sample/hoc1/test/Define.mk @@ -0,0 +1,75 @@ +###################################################################### +# テストテンプレートのディレクトリー +###################################################################### +# テストグループのMakefileとしてコピーされるファイル +GROUP_MAKEFILE = Group.mk + +###################################################################### +# テストグループのディレクトリー +###################################################################### +# グループディレクトリー +GROUP_DIR = $(shell pwd) + +# グループ名。ディレクトリ名から取得 +GROUP = $(notdir $(GROUP_DIR)) + +# テスト名。カレントディレクトリー内の、名前が大文字または.以外で始まるディレクトリー +TESTS = $(notdir $(shell find -maxdepth 1 -name "[^A-Z.]*" -type d)) + +# テストグループとテストの両方で使う変数を定義したファイル +DEF_FILE = Define.mk + +# テストのMakefileにインクルードするファイル +TEST_MAKEFILE = Test.mk + +# テストグループログファイル +GROUP_LOG_FILE = $(shell echo $(GROUP) | tr '[a-z]' '[A-Z]').log + +# 成功したテストの数。テストグループログファイルから取得 +SUCCESS_TEST = $(shell grep "^[^A-Z.].*: Test Success" $(GROUP_LOG_FILE) | wc -l) + +# 失敗したテストの数。テストグループログファイルから取得 +FAIL_TEST = $(shell grep "^[^A-Z.].*: Test Failure" $(GROUP_LOG_FILE) | wc -l) + +# すべてのテストの数。 +ALL_TEST = $(shell expr $(SUCCESS_TEST) + $(FAIL_TEST)) + +###################################################################### +# テストのディレクトリー +###################################################################### +# テスト名。カレントディレクトリー名から取得 +TEST = $(notdir $(shell pwd)) + +# テストコマンドファイル +CMD_FILE = cmd + +# テスト説明ファイル +DESC_FILE = desc.txt + +# テスト想定結果ファイル +TEST0_FILE = 0.txt + +# テスト結果ファイル +TEST1_FILE = 1.txt + +# テストの、想定結果と結果の差分ファイル +DIFF_FILE = diff.txt + +# テストエラーファイル +ERR_FILE = err.txt + +# テストログファイル +LOG_FILE = test.log + +# 現在の日時 +DATE = `date +"%F %T"` + +# テスト実行コマンド。CMD_FILEを実行する。 +# ファイルの内容と、テスト結果を表す標準出力を、ターゲットファイルに保存。 +# エラー発生時は、エラー出力をターゲットファイルとERR_FILEに保存。 +# ターゲットファイルは、TEST0_FILEまたはTEST1_FILE +CMD = \ + chmod u+x $(CMD_FILE); \ + cat $(CMD_FILE) >$@; \ + ./$(CMD_FILE) >>$@ 2>$(ERR_FILE); \ + if test -s $(ERR_FILE); then cat $(ERR_FILE) >>$@; else rm -f $(ERR_FILE); fi diff --git a/sample/hoc1/test/Makefile b/sample/hoc1/test/Makefile new file mode 100644 index 0000000..934b867 --- /dev/null +++ b/sample/hoc1/test/Makefile @@ -0,0 +1,48 @@ +# autotest.mk > template > Group.mk +# テストグループのMakefile +# +# オペレーター +# make : すべてのテストを実施し、ログファイルを作成 +# make check : ↓ +# make create : TESTNAMEで指定されたテストを新規に作成 +# make set : すべてのテストの、想定結果を出力 +# make checkeach: すべてのテストを実施 +# make report : ログファイルから、テストの結果をレポート +# make clean : すべてのテストで、"make" で生成されたファイルをクリア +# make cleanall: すべてのテストで、"make" と "make set" で生成されたファイルをクリア + +include Define.mk + +.PHONY: check create set checkeach report clean cleanall + +check: checkeach report + +create: +ifndef TEST + @echo "no test created. set TEST." +else + @mkdir $(TEST) + @for ifile in $(DEF_FILE) $(TEST_MAKEFILE); do echo "include ../$$ifile" >>$(TEST)/Makefile; done +endif + +set: + @for target in $(TESTS); do $(MAKE) set -C $$target; done + +checkeach: + @rm -f $(GROUP_LOG_FILE) + @for target in $(TESTS); do $(MAKE) check -C $$target; done + +$(GROUP_LOG_FILE): + @for target in $(TESTS); do cat <$$target/$(LOG_FILE) >>$@ || echo $$target ": no log." >>$@; done + +report: $(GROUP_LOG_FILE) + @echo "$(GROUP): $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in `pwd`/$(GROUP_LOG_FILE)"; \ + if test $(FAIL_TEST) -eq 0; then echo "$(GROUP): All tests are succeded."; fi + +clean: + @for target in $(TESTS); do $(MAKE) clean -C $$target; done + @rm -f $(GROUP_LOG_FILE) + +cleanall: + @for target in $(TESTS); do $(MAKE) cleanall -C $$target; done + @rm -f $(GROUP_LOG_FILE) diff --git a/sample/hoc1/test/Test.mk b/sample/hoc1/test/Test.mk new file mode 100644 index 0000000..cf5979b --- /dev/null +++ b/sample/hoc1/test/Test.mk @@ -0,0 +1,35 @@ +# autotest.mk > test_template > test.mk +# 自動テスト用のMakefile +# +# 要: Define.mk +# +# オペレーター +# make : CMDで設定されたコマンドを実行した出力結果を1.txtに出力し、0.txtと比較し、レポート +# make check : ↓ +# make prepare : CMDで設定されたコマンドを実行した出力結果を0.txt(テストの想定結果)に出力 +# make clean : 「make」で生成されたファイルをクリア +# make cleanall: 「make」と「make prepare」で生成されたファイルをクリア + +.PHONY: check set reset clean cleanall + +check: clean $(LOG_FILE) + +set: $(TEST0_FILE) + +reset: cleanall $(TEST0_FILE) + +clean: + @rm -f $(TEST1_FILE) $(DIFF_FILE) $(LOG_FILE) $(ERR_FILE) + +cleanall: clean + @rm -f $(TEST0_FILE) + +$(TEST0_FILE) $(TEST1_FILE): + @if test ! -s $(CMD_FILE); then echo "set command file: $(CMD_FILE)."; else $(CMD); fi + +$(DIFF_FILE): $(TEST1_FILE) + @-diff -c $(TEST0_FILE) $(TEST1_FILE) >$@ 2>&1 + +$(LOG_FILE): $(DIFF_FILE) + @if test -s $(DESC_FILE); then cat $(DESC_FILE) >>$@; fi; + @if test ! -s $^; then echo "$(TEST): Test Success $(DATE)" >>$@; else echo "$(TEST): Test Failure $(DATE)" >>$@; fi; diff --git a/sample/hoc1/test/add/0.txt b/sample/hoc1/test/add/0.txt new file mode 100644 index 0000000..65ca41c --- /dev/null +++ b/sample/hoc1/test/add/0.txt @@ -0,0 +1,13 @@ +cat in.txt && ../../hoc1 < in.txt +1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +1.23456789 + 0.123456789 +1000000 + .1 +10000000 + .1 +1.2345678901e100 + 1.2345678901e91 ++1 + 55 + 1.3580247 + 1000000.1 + 10000000 + 1.2345679e+100 + 1 diff --git a/sample/hoc1/test/add/Makefile b/sample/hoc1/test/add/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/add/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/add/cmd b/sample/hoc1/test/add/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/add/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/add/desc.txt b/sample/hoc1/test/add/desc.txt new file mode 100644 index 0000000..410b8ee --- /dev/null +++ b/sample/hoc1/test/add/desc.txt @@ -0,0 +1 @@ +hoc1 - 足し算のテスト diff --git a/sample/hoc1/test/add/in.txt b/sample/hoc1/test/add/in.txt new file mode 100644 index 0000000..e346f76 --- /dev/null +++ b/sample/hoc1/test/add/in.txt @@ -0,0 +1,6 @@ +1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +1.23456789 + 0.123456789 +1000000 + .1 +10000000 + .1 +1.2345678901e100 + 1.2345678901e91 ++1 diff --git a/sample/hoc1/test/div/0.txt b/sample/hoc1/test/div/0.txt new file mode 100644 index 0000000..509339e --- /dev/null +++ b/sample/hoc1/test/div/0.txt @@ -0,0 +1,21 @@ +cat in.txt && ../../hoc1 < in.txt +4 / 2 +2 / 1 +2 / 2 +2 / 3 +10000 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 +3.141592 / 2.718281828 +1000 / 0.0001 +1.23e2 / 321 +1.2345678901e100 / 1.2345678901e99 +/1 + 2 + 2 + 1 + 0.66666667 + 0.0027557319 + 1.1557271 + 10000000 + 0.38317757 + 10 +../../hoc1: syntax error near line 10 diff --git a/sample/hoc1/test/div/Makefile b/sample/hoc1/test/div/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/div/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/div/cmd b/sample/hoc1/test/div/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/div/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/div/desc.txt b/sample/hoc1/test/div/desc.txt new file mode 100644 index 0000000..7036046 --- /dev/null +++ b/sample/hoc1/test/div/desc.txt @@ -0,0 +1 @@ +hoc1 - 引き算のテスト diff --git a/sample/hoc1/test/div/in.txt b/sample/hoc1/test/div/in.txt new file mode 100644 index 0000000..925e864 --- /dev/null +++ b/sample/hoc1/test/div/in.txt @@ -0,0 +1,10 @@ +4 / 2 +2 / 1 +2 / 2 +2 / 3 +10000 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 +3.141592 / 2.718281828 +1000 / 0.0001 +1.23e2 / 321 +1.2345678901e100 / 1.2345678901e99 +/1 diff --git a/sample/hoc1/test/div_1/0.txt b/sample/hoc1/test/div_1/0.txt new file mode 100644 index 0000000..1a7d017 --- /dev/null +++ b/sample/hoc1/test/div_1/0.txt @@ -0,0 +1,21 @@ +cat in.txt && ../../hoc1 < in.txt +6 / 2 +2 / 1 +2 / 2 +2 / 3 +10000 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 +3.141592 / 2.718281828 +1000 / 0.0001 +1.23e2 / 321 +1.2345678901e100 / 1.2345678901e99 +/1 + 3 + 2 + 1 + 0.66666667 + 0.0027557319 + 1.1557271 + 10000000 + 0.38317757 + 10 +../../hoc1: syntax error near line 10 diff --git a/sample/hoc1/test/div_1/Makefile b/sample/hoc1/test/div_1/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/div_1/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/div_1/cmd b/sample/hoc1/test/div_1/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/div_1/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/div_1/desc.txt b/sample/hoc1/test/div_1/desc.txt new file mode 100644 index 0000000..7036046 --- /dev/null +++ b/sample/hoc1/test/div_1/desc.txt @@ -0,0 +1 @@ +hoc1 - 引き算のテスト diff --git a/sample/hoc1/test/div_1/in.txt b/sample/hoc1/test/div_1/in.txt new file mode 100644 index 0000000..925e864 --- /dev/null +++ b/sample/hoc1/test/div_1/in.txt @@ -0,0 +1,10 @@ +4 / 2 +2 / 1 +2 / 2 +2 / 3 +10000 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 +3.141592 / 2.718281828 +1000 / 0.0001 +1.23e2 / 321 +1.2345678901e100 / 1.2345678901e99 +/1 diff --git a/sample/hoc1/test/mix/0.txt b/sample/hoc1/test/mix/0.txt new file mode 100644 index 0000000..9584773 --- /dev/null +++ b/sample/hoc1/test/mix/0.txt @@ -0,0 +1,9 @@ +cat in.txt && ../../hoc1 < in.txt +(1 + 2) * (3 + 4) +1 + 2 * 3 + 4 +(1 + 2) / (3 + 4) +1 + 2 / 3 + 4 + 21 + 11 + 0.42857143 + 5.6666667 diff --git a/sample/hoc1/test/mix/Makefile b/sample/hoc1/test/mix/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/mix/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/mix/cmd b/sample/hoc1/test/mix/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/mix/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/mix/desc.txt b/sample/hoc1/test/mix/desc.txt new file mode 100644 index 0000000..753937f --- /dev/null +++ b/sample/hoc1/test/mix/desc.txt @@ -0,0 +1 @@ +hoc1 - 四則混合のテスト diff --git a/sample/hoc1/test/mix/in.txt b/sample/hoc1/test/mix/in.txt new file mode 100644 index 0000000..d1351c0 --- /dev/null +++ b/sample/hoc1/test/mix/in.txt @@ -0,0 +1,4 @@ +(1 + 2) * (3 + 4) +1 + 2 * 3 + 4 +(1 + 2) / (3 + 4) +1 + 2 / 3 + 4 diff --git a/sample/hoc1/test/mul/0.txt b/sample/hoc1/test/mul/0.txt new file mode 100644 index 0000000..60ab330 --- /dev/null +++ b/sample/hoc1/test/mul/0.txt @@ -0,0 +1,20 @@ +cat in.txt && ../../hoc1 < in.txt +2 * 3 +3 * 2 +2 * 1 +2 * 0 +1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 +1.23456789 * 0.123456789 +1000000 * .1 +1.23e3 * 6.02e23 +*1 +2 * 5 + 6 + 6 + 2 + 0 + 3628800 + 0.15241579 + 100000 + 7.4046e+26 +../../hoc1: syntax error near line 9 diff --git a/sample/hoc1/test/mul/Makefile b/sample/hoc1/test/mul/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/mul/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/mul/cmd b/sample/hoc1/test/mul/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/mul/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/mul/desc.txt b/sample/hoc1/test/mul/desc.txt new file mode 100644 index 0000000..10e9a8a --- /dev/null +++ b/sample/hoc1/test/mul/desc.txt @@ -0,0 +1 @@ +hoc1 - かけ算のテスト diff --git a/sample/hoc1/test/mul/in.txt b/sample/hoc1/test/mul/in.txt new file mode 100644 index 0000000..dfbdaf5 --- /dev/null +++ b/sample/hoc1/test/mul/in.txt @@ -0,0 +1,10 @@ +2 * 3 +3 * 2 +2 * 1 +2 * 0 +1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 +1.23456789 * 0.123456789 +1000000 * .1 +1.23e3 * 6.02e23 +*1 +2 * 5 diff --git a/sample/hoc1/test/sub/0.txt b/sample/hoc1/test/sub/0.txt new file mode 100644 index 0000000..5347bd9 --- /dev/null +++ b/sample/hoc1/test/sub/0.txt @@ -0,0 +1,19 @@ +cat in.txt && ../../hoc1 < in.txt +2 - 1 +2 - 2 +2 - 3 +100 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 +3.141592 - 2.718281828 +1000-0.0001 +1.23e2 - 321 +1.2345678901e100 - 1.2345678901e99 +-1 + 1 + 0 + -1 + 45 + 0.42331017 + 999.9999 + -198 + 1.1111111e+100 + -1 diff --git a/sample/hoc1/test/sub/Makefile b/sample/hoc1/test/sub/Makefile new file mode 100644 index 0000000..b6dac59 --- /dev/null +++ b/sample/hoc1/test/sub/Makefile @@ -0,0 +1,2 @@ +include ../Define.mk +include ../Test.mk diff --git a/sample/hoc1/test/sub/cmd b/sample/hoc1/test/sub/cmd new file mode 100755 index 0000000..ea36034 --- /dev/null +++ b/sample/hoc1/test/sub/cmd @@ -0,0 +1 @@ +cat in.txt && ../../hoc1 < in.txt diff --git a/sample/hoc1/test/sub/desc.txt b/sample/hoc1/test/sub/desc.txt new file mode 100644 index 0000000..7036046 --- /dev/null +++ b/sample/hoc1/test/sub/desc.txt @@ -0,0 +1 @@ +hoc1 - 引き算のテスト diff --git a/sample/hoc1/test/sub/in.txt b/sample/hoc1/test/sub/in.txt new file mode 100644 index 0000000..656e57f --- /dev/null +++ b/sample/hoc1/test/sub/in.txt @@ -0,0 +1,9 @@ +2 - 1 +2 - 2 +2 - 3 +100 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 +3.141592 - 2.718281828 +1000-0.0001 +1.23e2 - 321 +1.2345678901e100 - 1.2345678901e99 +-1