summaryrefslogtreecommitdiff
path: root/tests/Makefile
blob: 84e64dcbebff7ef1b3fc5a730ddcb34f38c0f35f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# Test Makefile for GlaMaC
# Builds and runs unit tests and integration tests

# Include common build configuration
include ../build/common.mk

# Test-specific directories
TESTDIR := .
UNIT_TESTDIR := $(TESTDIR)/unit
INTEGRATION_TESTDIR := $(TESTDIR)/integration
TEST_BINDIR := $(TESTDIR)/bin

# Test source files
UNIT_TESTS := $(wildcard $(UNIT_TESTDIR)/*.c)
INTEGRATION_TESTS := $(wildcard $(INTEGRATION_TESTDIR)/*.c)

# Test binaries (specific ones we have rules for)
UNIT_TEST_BINS := $(TEST_BINDIR)/test_glass_data $(TEST_BINDIR)/test_fgla $(TEST_BINDIR)/test_glamac_view
INTEGRATION_TEST_BINS := $(TEST_BINDIR)/test_simple_pipeline

# Glass data dependencies (needed for tests)
GLASS_DATA_DEPS := ../src/glamac/glass_data.c ../src/glamac/glamac_errors.c

# View system dependencies
VIEW_DEPS := ../src/glamac/glamac_view.c ../src/glamac/glamac_errors.c

# Test-specific compiler flags
TEST_CFLAGS := $(CFLAGS_NATIVE) -I$(TESTDIR) -DTEST_BUILD

# Default target
all: unit-tests integration-tests

# Create test bin directory
$(TEST_BINDIR):
	$(MKDIR) $(TEST_BINDIR)

# Unit test rules
unit-tests: $(UNIT_TEST_BINS)

# Unit test for glass_data
$(TEST_BINDIR)/test_glass_data: $(UNIT_TESTDIR)/test_glass_data.c $(GLASS_DATA_DEPS) | $(TEST_BINDIR)
	$(CC) $^ $(TEST_CFLAGS) -o $@

# Unit test for fgla (needs fgla.c for internal function testing)
$(TEST_BINDIR)/test_fgla: $(UNIT_TESTDIR)/test_fgla.c ../src/glautils/fgla.c $(GLASS_DATA_DEPS) | $(TEST_BINDIR)
	$(CC) $^ $(TEST_CFLAGS) -o $@

# Unit test for glamac_view (simplified version)
$(TEST_BINDIR)/test_glamac_view: $(UNIT_TESTDIR)/test_glamac_view_simple.c $(VIEW_DEPS) $(GLASS_DATA_DEPS) | $(TEST_BINDIR)
	$(CC) $^ $(TEST_CFLAGS) -o $@

# Integration tests
integration-tests: $(INTEGRATION_TEST_BINS)

# Integration test for simple pipeline
$(TEST_BINDIR)/test_simple_pipeline: $(INTEGRATION_TESTDIR)/test_simple_pipeline.c ../src/glautils/fgla.c $(VIEW_DEPS) $(GLASS_DATA_DEPS) | $(TEST_BINDIR)
	$(CC) $^ $(TEST_CFLAGS) -o $@

# Run all tests
test: unit-tests integration-tests
	@echo ""
	@echo "$(CYAN)Running Unit Tests$(RESET)"
	@echo "=================="
	@for test in $(UNIT_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test; \
			echo ""; \
		fi; \
	done
	@echo ""
	@echo "$(CYAN)Running Integration Tests$(RESET)"
	@echo "========================="
	@for test in $(INTEGRATION_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test; \
			echo ""; \
		fi; \
	done

# Run only unit tests
test-unit: unit-tests
	@echo "$(CYAN)Running Unit Tests$(RESET)"
	@echo "=================="
	@for test in $(UNIT_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test; \
			echo ""; \
		fi; \
	done

# Run only integration tests
test-integration: integration-tests
	@echo "$(CYAN)Running Integration Tests$(RESET)"
	@echo "========================="
	@for test in $(INTEGRATION_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test; \
			echo ""; \
		fi; \
	done

# Run specific test
test-%: $(TEST_BINDIR)/%
	@echo "$(CYAN)Running specific test: $*$(RESET)"
	@./$(TEST_BINDIR)/$*

# Clean test binaries
clean:
	$(RMDIR) $(TEST_BINDIR) 2>/dev/null || true

# Verbose test runs (for debugging)
test-verbose: SHELL:=/bin/bash
test-verbose: unit-tests integration-tests
	@echo ""
	@echo "$(CYAN)Running Unit Tests (Verbose)$(RESET)"
	@echo "============================"
	@for test in $(UNIT_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test 2>&1 | tee "$$test.log"; \
			echo ""; \
		fi; \
	done
	@echo ""
	@echo "$(CYAN)Running Integration Tests (Verbose)$(RESET)"
	@echo "=================================="
	@for test in $(INTEGRATION_TEST_BINS); do \
		if [ -f "$$test" ]; then \
			echo "$(BLUE)Running $$test$(RESET)"; \
			./$$test 2>&1 | tee "$$test.log"; \
			echo ""; \
		fi; \
	done

# Help
help:
	@echo "GlaMaC Test System"
	@echo ""
	@echo "Targets:"
	@echo "  all              - Build all tests"
	@echo "  unit-tests       - Build unit tests"
	@echo "  integration-tests- Build integration tests"
	@echo "  test             - Build and run all tests"
	@echo "  test-unit        - Build and run unit tests only"
	@echo "  test-integration - Build and run integration tests only"
	@echo "  test-<name>      - Run specific test by name"
	@echo "  test-verbose     - Run all tests with verbose output"
	@echo "  clean            - Clean test binaries"
	@echo "  help             - Show this help"
	@echo ""
	@echo "Examples:"
	@echo "  make test                    # Run all tests"
	@echo "  make test-unit               # Run only unit tests"
	@echo "  make test-test_glass_data    # Run specific test"

# Color definitions for use in shell commands
export RESET   := \033[0m
export RED     := \033[31m
export GREEN   := \033[32m
export YELLOW  := \033[33m
export BLUE    := \033[34m
export MAGENTA := \033[35m
export CYAN    := \033[36m

.PHONY: all unit-tests integration-tests test test-unit test-integration clean help test-verbose
Back to https://optics-design.com