Skip to content

Commit 0b22ea5

Browse files
committed
chore: update run_tests script and add Makefile
1 parent 400bf7f commit 0b22ea5

File tree

2 files changed

+93
-20
lines changed

2 files changed

+93
-20
lines changed

Makefile

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Define compiler and other variables
2+
CC = gcc
3+
BISON = bison
4+
FLEX = flex
5+
CFLAGS = -g -I..
6+
DEPFLAGS = -MMD -MP
7+
8+
# Define directory paths
9+
SRC_DIR = src
10+
BIN_DIR = bin
11+
12+
# Program Name
13+
PROGRAM = minilisp
14+
15+
# Target executable
16+
TARGET = $(BIN_DIR)/$(PROGRAM)
17+
18+
# Bison and Flex source and output files
19+
BISON_SRC = $(SRC_DIR)/$(PROGRAM).y
20+
BISON_OUT = $(SRC_DIR)/$(PROGRAM).tab.c
21+
BISON_HEADER = $(SRC_DIR)/$(PROGRAM).tab.h
22+
FLEX_SRC = $(SRC_DIR)/$(PROGRAM).l
23+
FLEX_OUT = $(SRC_DIR)/lex.yy.c
24+
25+
# Object files
26+
OBJECTS = $(BISON_OUT:.c=.o) $(FLEX_OUT:.c=.o)
27+
DEPENDENCIES = $(OBJECTS:.o=.d)
28+
29+
# Default target
30+
all: $(TARGET)
31+
32+
# Bison rule
33+
$(BISON_OUT) $(BISON_HEADER): $(BISON_SRC)
34+
$(BISON) -d -o $(BISON_OUT) $<
35+
36+
# Flex rule
37+
$(FLEX_OUT): $(FLEX_SRC) $(BISON_HEADER)
38+
$(FLEX) -o $@ $<
39+
40+
# Compile .c files
41+
$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
42+
$(CC) -c $(CFLAGS) $(DEPFLAGS) $< -o $@
43+
44+
# Generate executable
45+
$(TARGET): $(OBJECTS)
46+
$(CC) -o $@ $^
47+
48+
# Clean generated files
49+
clean:
50+
rm -rf $(OBJECTS) $(DEPENDENCIES) $(BISON_OUT) $(BISON_HEADER) $(FLEX_OUT)
51+
52+
# Include generated dependencies
53+
-include $(DEPENDENCIES)
54+
55+
.PHONY: all clean

run_tests.sh

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
#!/bin/bash
22

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: 請修改成你的執行檔名稱
612
INTERPRETER="./bin/$PROGRAM_NAME" # Interpreter 執行檔路徑
713
SRC="./src"
814
BIN="./bin"
@@ -11,7 +17,7 @@ FAILED=0
1117

1218
# TODO: 可配置的編譯器和選項
1319
CC="gcc" # 可以更改為 g++ 或其他編譯器
14-
CFLAGS="-c -g -I."
20+
CFLAGS="-c -g -I.. -o"
1521
LFLAGS="-ll" # link with flex library
1622

1723
# 顏色定義
@@ -45,45 +51,57 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
4551
# Linux 系統的指令
4652
echo "Running on Linux"
4753

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
5258
$CC -o $BIN/${PROGRAM_NAME} $SRC/${PROGRAM_NAME}.tab.o $SRC/lex.yy.o $LFLAGS
5359
elif [[ "$OSTYPE" == "darwin"* ]]; then
5460
# macOS 系統的指令
5561
echo "Running on macOS"
5662

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
6167
$CC -o $BIN/${PROGRAM_NAME} $SRC/${PROGRAM_NAME}.tab.o $SRC/lex.yy.o $LFLAGS
6268

6369
elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]]; then
6470
# Windows 系統的指令 (使用 Cygwin 或 Git Bash)
6571
echo "Running on Windows (Cygwin or Git Bash)"
6672

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
7278

7379
else
7480
echo "Unknown operating system"
7581
fi
7682

83+
# # 如果編譯失敗,則退出
84+
# if [ $? -ne 0 ]; then
85+
# echo -e "${COLOR_RED}Failed to compile the program.${COLOR_RESET}"
86+
# exit 1
87+
# fi
88+
7789
# 測試
7890
for test_file in $TEST_DIR/*.lsp; do
7991
test_name=$(basename $test_file)
8092

8193
# 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
83101
if [[ "$OSTYPE" == "linux-gnu"* ]] || [[ "$OSTYPE" == "darwin"* ]]; then
84-
actual_output=$($INTERPRETER < $test_file)
102+
actual_output=$($INTERPRETER < $test_file 2>&1)
85103
elif [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]]; then
86-
actual_output=$($INTERPRETER.exe < $test_file)
104+
actual_output=$($INTERPRETER.exe < $test_file 2>&1)
87105
else
88106
echo "Unsupported operating system to run tests: $OSTYPE"
89107
exit 1

0 commit comments

Comments
 (0)