1
1
#! /bin/bash
2
2
3
- TEST_DIR=" ./tests/public_test_data" # TODO: 請修改成你的測試資料夾路徑
4
- ANS_FILE=" ./tests/public_test_data_ans.txt" # TODO: 請修改成你的測試答案檔案路徑
5
- PROGRAM_NAME=" all_passed_Xyphuz" # TODO: 請修改成你的執行檔名稱
3
+ IS_TEST_HIDENT=0 # TODO: 請修改成 1 以測試 hidden test
4
+ if [ " $IS_TEST_HIDDEN " -eq 1 ]; then
5
+ TEST_DIR=" ./tests/hidden_test_data_2021" # TODO: 請修改成你的測試資料夾路徑
6
+ ANS_FILE=" ./tests/hidden_test_data_ans.txt" # TODO: 請修改成你的測試答案檔案路徑
7
+ else
8
+ TEST_DIR=" ./tests/public_test_data" # TODO: 請修改成你的測試資料夾路徑
9
+ ANS_FILE=" ./tests/public_test_data_ans.txt" # TODO: 請修改成你的測試答案檔案路徑
10
+ fi
11
+ PROGRAM_NAME=" minilisp" # TODO: 請修改成你的執行檔名稱
6
12
INTERPRETER=" ./bin/$PROGRAM_NAME " # Interpreter 執行檔路徑
7
13
SRC=" ./src"
8
14
BIN=" ./bin"
@@ -11,7 +17,7 @@ FAILED=0
11
17
12
18
# TODO: 可配置的編譯器和選項
13
19
CC=" gcc" # 可以更改為 g++ 或其他編譯器
14
- CFLAGS=" -c -g -I."
20
+ CFLAGS=" -c -g -I.. -o "
15
21
LFLAGS=" -ll" # link with flex library
16
22
17
23
# 顏色定義
@@ -45,45 +51,57 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
45
51
# Linux 系統的指令
46
52
echo " Running on Linux"
47
53
48
- bison -d -o $SRC /${PROGRAM_NAME} .tab.c ${PROGRAM_NAME} .y
49
- $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.c
50
- lex -o $SRC /lex.yy.c ${PROGRAM_NAME} .l
51
- $CC $CFLAGS $SRC /lex.yy.c
54
+ bison -d -o $SRC /${PROGRAM_NAME} .tab.c $SRC / $ {PROGRAM_NAME} .y
55
+ $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.o $SRC / ${PROGRAM_NAME} .tab. c
56
+ lex -o $SRC /lex.yy.c $SRC / $ {PROGRAM_NAME} .l
57
+ $CC $CFLAGS $SRC /lex.yy.o $SRC /lex.yy. c
52
58
$CC -o $BIN /${PROGRAM_NAME} $SRC /${PROGRAM_NAME} .tab.o $SRC /lex.yy.o $LFLAGS
53
59
elif [[ " $OSTYPE " == " darwin" * ]]; then
54
60
# macOS 系統的指令
55
61
echo " Running on macOS"
56
62
57
- bison -d -o $SRC /${PROGRAM_NAME} .tab.c ${PROGRAM_NAME} .y
58
- $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.c
59
- lex -o $SRC /lex.yy.c ${PROGRAM_NAME} .l
60
- $CC $CFLAGS $SRC /lex.yy.c
63
+ bison -d -o $SRC /${PROGRAM_NAME} .tab.c $SRC / $ {PROGRAM_NAME} .y
64
+ $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.o $SRC / ${PROGRAM_NAME} .tab. c
65
+ lex -o $SRC /lex.yy.c $SRC / $ {PROGRAM_NAME} .l
66
+ $CC $CFLAGS $SRC /lex.yy.o $SRC /lex.yy. c
61
67
$CC -o $BIN /${PROGRAM_NAME} $SRC /${PROGRAM_NAME} .tab.o $SRC /lex.yy.o $LFLAGS
62
68
63
69
elif [[ " $OSTYPE " == " cygwin" ]] || [[ " $OSTYPE " == " msys" ]]; then
64
70
# Windows 系統的指令 (使用 Cygwin 或 Git Bash)
65
71
echo " Running on Windows (Cygwin or Git Bash)"
66
72
67
- bison -d -o $SRC /${PROGRAM_NAME} .tab.c ${PROGRAM_NAME} .y
68
- $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.c
69
- lex -o $SRC /lex.yy.c ${PROGRAM_NAME} .l
70
- $CC $CFLAGS $SRC /lex.yy.c
71
- $CC -o $BIN /${PROGRAM_NAME} .exe $SRC /${PROGRAM_NAME} .tab.o $SRC /lex.yy.o $LFLAGS
73
+ bison -d -o $SRC /${PROGRAM_NAME} .tab.c $SRC / $ {PROGRAM_NAME} .y
74
+ $CC $CFLAGS $SRC /${PROGRAM_NAME} .tab.o $SRC / ${PROGRAM_NAME} .tab. c
75
+ flex -o $SRC /lex.yy.c $SRC / ${PROGRAM_NAME} .l
76
+ $CC $CFLAGS $SRC /lex.yy.o $SRC /lex.yy. c
77
+ $CC -o $BIN /${PROGRAM_NAME} .exe $SRC /${PROGRAM_NAME} .tab.o $SRC /lex.yy.o
72
78
73
79
else
74
80
echo " Unknown operating system"
75
81
fi
76
82
83
+ # # 如果編譯失敗,則退出
84
+ # if [ $? -ne 0 ]; then
85
+ # echo -e "${COLOR_RED}Failed to compile the program.${COLOR_RESET}"
86
+ # exit 1
87
+ # fi
88
+
77
89
# 測試
78
90
for test_file in $TEST_DIR /* .lsp; do
79
91
test_name=$( basename $test_file )
80
92
81
93
# Extract the expected output from the answer file
82
- expected_output=$( awk " /^$test_name $/{flag=1;next}/^[a-zA-Z0-9]+_[0-9]+\.lsp$/{flag=0}flag" " $ANS_FILE " )
94
+ if [ " $IS_TEST_HIDDEN " == 1 ]; then
95
+ expected_output=$( awk " /^$test_name $/{flag=1;next}/^[a-zA-Z0-9]+_[0-9]+_hidden\.lsp$/{flag=0}flag" " $HIDDEN_ANS_FILE " ) # hidden test
96
+ else
97
+ expected_output=$( awk " /^$test_name $/{flag=1;next}/^[a-zA-Z0-9]+_[0-9]+\.lsp$/{flag=0}flag" " $ANS_FILE " )
98
+ fi
99
+
100
+ # Run the program
83
101
if [[ " $OSTYPE " == " linux-gnu" * ]] || [[ " $OSTYPE " == " darwin" * ]]; then
84
- actual_output=$( $INTERPRETER < $test_file )
102
+ actual_output=$( $INTERPRETER < $test_file 2>&1 )
85
103
elif [[ " $OSTYPE " == " cygwin" ]] || [[ " $OSTYPE " == " msys" ]]; then
86
- actual_output=$( $INTERPRETER .exe < $test_file )
104
+ actual_output=$( $INTERPRETER .exe < $test_file 2>&1 )
87
105
else
88
106
echo " Unsupported operating system to run tests: $OSTYPE "
89
107
exit 1
0 commit comments