PYTHON ?= python
MODULE_TESTS := cam_core_banked candidate_fifo match_engine_pipeline cam_write_noise cam_read_noise popcount_pipeline topk_tracker result_serializer
TOP_CONFIGS := no_noise write_noise read_noise

.PHONY: help test-all test-top test-top-all test-modules test-module test-model test-perf clean $(MODULE_TESTS:%=test-module-%) $(TOP_CONFIGS:%=test-top-%) test-benchmark-retrieval

help:
	@echo "Available hw/sim targets:"
	@echo "  make test-model"
	@echo "  make test-top             # 默认运行所有顶层噪声配置"
	@echo "  make test-top-all         # 运行所有顶层噪声配置"
	@echo "  make test-top-no_noise    # 无噪声集成测试"
	@echo "  make test-top-write_noise # 写入噪声集成测试"
	@echo "  make test-top-read_noise  # 读取噪声集成测试"
	@echo "  make test-module MODULE=cam_core_banked"
	@echo "  make test-modules"
	@echo "  make test-perf"
	@echo "  make test-benchmark-retrieval   # 检索质量 benchmark（非默认）"
	@echo "  make test-all"
	@echo "  make clean"

test-all: test-model test-top-all test-modules

test-top: test-top-all

test-top-all: $(TOP_CONFIGS:%=test-top-%)

$(TOP_CONFIGS:%=test-top-%):
	$(MAKE) -C tests/top/$(@:test-top-%=%)

test-modules: $(MODULE_TESTS:%=test-module-%)

test-module:
	@test -n "$(MODULE)" || (echo "Usage: make test-module MODULE=<name>"; exit 2)
	$(MAKE) -C tests/modules/$(MODULE)

$(MODULE_TESTS:%=test-module-%):
	$(MAKE) -C tests/modules/$(@:test-module-%=%)

test-model:
	env -u PYTHONPATH -u PYTHONHOME $(PYTHON) -m pytest tests/model -q

test-perf:
	$(MAKE) -C tests/perf

test-benchmark-retrieval:
	$(MAKE) -C benchmarks/retrieval

clean:
	@for config in $(TOP_CONFIGS); do \
		$(MAKE) -C tests/top/$$config clean || exit $$?; \
	done
	@for module in $(MODULE_TESTS); do \
		$(MAKE) -C tests/modules/$$module clean || exit $$?; \
	done
	$(MAKE) -C benchmarks/retrieval clean
	$(MAKE) -C tests/perf clean
	rm -rf .pytest_cache tests/model/.pytest_cache
