summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 15:15:05 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 15:15:05 +0000
commita524ba47371503e0a42d395d015dcd83c15c0199 (patch)
tree35d4d7e327002f66776aeaa3b00b3e44792bae19
parent55247a3f12a9eee7ba3fd7ca6d8fcea7a82c20f3 (diff)
Added Makefile and script for tests.
-rw-r--r--Makefile81
-rwxr-xr-xtests/run_tests.sh47
2 files changed, 128 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a4dfccd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,81 @@
+
+CC = gcc
+CFLAGS = -Wall -Wextra -g -I./src -I./src/ast -I./src/parser -I./src/codegen -I./plugins -I./src/zen -I./src/utils -I./src/lexer -I./src/analysis -I./src/lsp
+TARGET = zc
+LIBS = -lm -lpthread -ldl
+
+SRCS = src/main.c \
+ src/parser/parser_core.c \
+ src/parser/parser_expr.c \
+ src/parser/parser_stmt.c \
+ src/parser/parser_type.c \
+ src/parser/parser_utils.c \
+ src/ast/ast.c \
+ src/codegen/codegen.c \
+ src/codegen/codegen_decl.c \
+ src/codegen/codegen_main.c \
+ src/codegen/codegen_utils.c \
+ src/utils/utils.c \
+ src/lexer/token.c \
+ src/analysis/typecheck.c \
+ src/lsp/json_rpc.c \
+ src/lsp/lsp_main.c \
+ src/lsp/lsp_analysis.c \
+ src/lsp/lsp_index.c \
+ src/zen/zen_facts.c \
+ src/repl/repl.c \
+ src/plugins/plugin_manager.c \
+ plugins/befunge.c \
+ plugins/brainfuck.c \
+ plugins/forth.c \
+ plugins/lisp.c \
+ plugins/regex.c \
+ plugins/sql.c
+
+OBJ_DIR = obj
+OBJS = $(patsubst %.c, $(OBJ_DIR)/%.o, $(SRCS))
+
+# Installation paths
+PREFIX = /usr/local
+BINDIR = $(PREFIX)/bin
+MANDIR = $(PREFIX)/share/man/man1
+
+# Default target
+all: $(TARGET)
+
+# Link
+$(TARGET): $(OBJS)
+ @mkdir -p $(dir $@)
+ $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
+ @echo "=> Build complete: $(TARGET)"
+
+# Compile
+$(OBJ_DIR)/%.o: %.c
+ @mkdir -p $(dir $@)
+ $(CC) $(CFLAGS) -c $< -o $@
+
+# Install
+install: $(TARGET)
+ install -d $(BINDIR)
+ install -m 755 $(TARGET) $(BINDIR)/$(TARGET)
+ install -d $(MANDIR)
+ # Install man page if it exists
+ test -f man/zc.1 && install -m 644 man/zc.1 $(MANDIR)/zc.1 || true
+ @echo "=> Installed to $(BINDIR)/$(TARGET)"
+
+# Uninstall
+uninstall:
+ rm -f $(BINDIR)/$(TARGET)
+ rm -f $(MANDIR)/zc.1
+ @echo "=> Uninstalled from $(BINDIR)/$(TARGET)"
+
+# Clean
+clean:
+ rm -rf $(OBJ_DIR) $(TARGET) out.c
+ @echo "=> Clean complete!"
+
+# Test
+test: $(TARGET)
+ ./tests/run_tests.sh
+
+.PHONY: all clean install uninstall test
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
new file mode 100755
index 0000000..0578681
--- /dev/null
+++ b/tests/run_tests.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Configuration
+ZC="./zc"
+TEST_DIR="tests"
+PASSED=0
+FAILED=0
+FAILED_TESTS=""
+
+echo "** Running Zen C test suite **"
+
+if [ ! -f "$ZC" ]; then
+ echo "Error: zc binary not found. Please build it first."
+ exit 1
+fi
+
+for test_file in "$TEST_DIR"/*.zc; do
+ [ -e "$test_file" ] || continue
+
+ echo -n "Testing $(basename "$test_file")... "
+
+ output=$($ZC run "$test_file" "$@" 2>&1)
+ exit_code=$?
+
+ if [ $exit_code -eq 0 ]; then
+ echo "PASS"
+ ((PASSED++))
+ else
+ echo "FAIL"
+ ((FAILED++))
+ FAILED_TESTS="$FAILED_TESTS\n- $(basename "$test_file")"
+ fi
+done
+
+echo "----------------------------------------"
+echo "Summary:"
+echo "-> Passed: $PASSED"
+echo "-> Failed: $FAILED"
+echo "----------------------------------------"
+
+if [ $FAILED -ne 0 ]; then
+ echo -e "Failed tests:$FAILED_TESTS"
+ exit 1
+else
+ echo "All tests passed!"
+ exit 0
+fi