Skip to content

Commit 7dab9b4

Browse files
committed
feat(tests): organize code
1 parent 1bcf870 commit 7dab9b4

17 files changed

+104
-139
lines changed

Makefile

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ LEX_OUT = lex.yy.c
1616
YACC_OUT = parser.tab.c
1717
YACC_HEADER = parser.tab.h
1818

19+
SMOKE_DIR = tests/smoke
20+
SMOKE_SOURCES := $(wildcard $(SMOKE_DIR)/*.c)
21+
SMOKE_CASES := $(basename $(notdir $(SMOKE_SOURCES)))
22+
SEMANTIC_SCRIPT = scripts/run_semantic_tests.sh
23+
1924
all: $(TARGET)
2025

2126
$(TARGET): $(LEX_OUT) $(YACC_OUT) $(SRC)
@@ -30,22 +35,32 @@ $(YACC_OUT) $(YACC_HEADER): $(YACC_SRC) src/ast.h src/ast.c
3035
clean:
3136
rm -f $(TARGET) $(LEX_OUT) $(YACC_OUT) $(YACC_HEADER)
3237

33-
TEST_CASES = \
34-
expressions \
35-
variable
36-
3738
test: all
38-
@echo "== Running sample tests =="
39-
@for case in $(TEST_CASES); do \
40-
output=$$(./c2lua tests/$$case.c); \
41-
expected=$$(cat tests/$$case.lua); \
42-
printf '%s' "-- $$case... "; \
43-
if [ "$$output" = "$$expected" ]; then \
44-
echo "ok"; \
45-
else \
46-
echo "fail"; \
47-
printf 'Expected:\n%s\n\nGot:\n%s\n' "$$expected" "$$output"; \
48-
exit 1; \
49-
fi; \
50-
done
51-
@echo "All tests passed."
39+
@echo "== Running smoke tests =="
40+
@if [ -z "$(SMOKE_CASES)" ]; then \
41+
echo "No smoke tests found under $(SMOKE_DIR)"; \
42+
else \
43+
for case in $(SMOKE_CASES); do \
44+
input="$(SMOKE_DIR)/$$case.c"; \
45+
expected_file="$(SMOKE_DIR)/$$case.lua"; \
46+
if [ ! -f "$$expected_file" ]; then \
47+
echo "Missing expected Lua file for $$case"; \
48+
exit 1; \
49+
fi; \
50+
output=$$(./c2lua "$$input"); \
51+
expected=$$(cat "$$expected_file"); \
52+
printf '%s' "-- $$case... "; \
53+
if [ "$$output" = "$$expected" ]; then \
54+
echo "ok"; \
55+
else \
56+
echo "fail"; \
57+
printf 'Expected:\n%s\n\nGot:\n%s\n' "$$expected" "$$output"; \
58+
exit 1; \
59+
fi; \
60+
done; \
61+
echo "All smoke tests passed."; \
62+
fi
63+
64+
semantic-test: all
65+
@echo "== Running semantic tests =="
66+
@COMPILER_CMD=./c2lua bash $(SEMANTIC_SCRIPT)

README.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ O que não será suportado:
1717
├── lexer/ # regras léxicas (lexer.l)
1818
├── parser/ # gramática e ações (parser.y)
1919
├── src/ # main.c, AST, tabela de símbolos, gerador Lua
20-
├── tests/ # entradas C e saídas Lua esperadas
20+
├── tests/
21+
│ ├── smoke/ # testes rápidos de tradução (pares C/Lua)
22+
│ └── semantic/ # casos PASS/FAIL com golden files
2123
└── Makefile
2224
```
2325

@@ -29,21 +31,30 @@ sudo apt install -y flex bison build-essential git
2931

3032
Build local (exemplo mínimo):
3133
```nu
32-
flex lexer/lexer.l
33-
bison -d parser/parser.y
34-
gcc -o c2lua lex.yy.c parser.tab.c src/*.c -lfl
35-
./c2lua < tests/exemplo.c > out.lua
34+
make # gera o binário ./c2lua a partir das fontes
35+
./c2lua tests/smoke/expressions.c
3636
```
3737

3838
# Documentação de cada sprint
3939

4040
- [1ª sprint](./docs/sprints/1.md);
4141
- [2ª sprint](./docs/sprints/2.md);
42-
- 3ª sprint;
42+
- [3ª sprint](./docs/sprints/3.md);
4343
- 4ª sprint;
4444

4545
# Testes
4646

47-
A pasta `tests/` contém arquivos `.c` de entrada e os correspondentes `.lua` esperados. Use `diff` para comparar a saída gerada com a esperada.
47+
A pasta `tests/` está organizada em:
48+
- `tests/smoke/`: pares simples C/Lua utilizados pelos testes rápidos do Makefile;
49+
- `tests/semantic/pass`: casos que devem gerar Lua válido e executar com sucesso;
50+
- `tests/semantic/fail`: casos que precisam falhar na análise semântica (arquivos `.err` com a mensagem esperada);
51+
- `tests/semantic/golden/fail`: mensagens de erro normalizadas utilizadas como golden files.
4852

49-
Padrão de nomenclatura: `descricao_curta_teste.c` para entrada, e `descricao_curta_teste.lua` para saída esperada.
53+
Execute as suítes pelo Makefile:
54+
55+
```nu
56+
make test # verifica os smoke tests (tradução direta C -> Lua)
57+
make semantic-test # valida casos PASS/FAIL com comparação de golden files
58+
```
59+
60+
Os golden files utilizam o mesmo nome-base do arquivo `.c`, com extensão `.lua` (para PASS) ou `.golden`/`.err` (para FAIL).

scripts/run_semantic_tests.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4-
COMPILER_CMD="${COMPILER_CMD:-compiler --semantic}"
4+
COMPILER_CMD="${COMPILER_CMD:-./c2lua}"
55

66
RED=$(printf '\033[31m')
77
GRN=$(printf '\033[32m')
@@ -28,7 +28,7 @@ echo ""
2828
echo "== FAIL cases =="
2929
for f in tests/semantic/fail/*.c; do
3030
base=$(basename "$f")
31-
golden="tests/golden/fail/${base}.golden"
31+
golden="tests/semantic/golden/fail/${base}.golden"
3232
if $COMPILER_CMD "$f" >/dev/null 2>tmp.err; then
3333
echo -e "${RED}FAIL (expected error, got success)${RST} $f"
3434
fail_count+=1

tests/expressions.c

Lines changed: 0 additions & 22 deletions
This file was deleted.

tests/expressions.lua

Lines changed: 0 additions & 5 deletions
This file was deleted.

tests/run_semantic_tests.sh

Lines changed: 0 additions & 82 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)