From 827d73a91ed0fb3dfff56379ebea21a29406a277 Mon Sep 17 00:00:00 2001 From: adelon <22380201+adelon@users.noreply.github.com> Date: Mon, 18 May 2026 00:55:16 +0200 Subject: Tests --- Makefile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 3cc5f8377..140a1b4cd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ .PHONY: all build install doc clean html deb pkg bintar sdist .PHONY: profile-build profile-rgl-time profile-rgl-memory profile-rgl-clean .PHONY: bench-build bench-rgl bench-rgl-pre-pmcfg bench-rgl-clean +.PHONY: test-pmcfg test-pmcfg-core test-pmcfg-equivalence test-pmcfg-rgl-equivalence test-pmcfg-clean # This gets the numeric part of the version from the cabal file VERSION=$(shell sed -ne "s/^version: *\([0-9.]*\).*/\1/p" gf.cabal) @@ -65,6 +66,19 @@ RGL_BENCH_PRE_PMCFG_NAME ?= RGLBenchPrePmcfg BENCH_RTS_OPTIONS ?= +RTS -T -RTS BENCH_STACK = stack --stack-yaml $(CURDIR)/stack.yaml --work-dir $(BENCH_STACK_WORK) +PMCFG_TEST_CORE_STACK_WORK ?= .stack-work-pmcfg-test-hooks +PMCFG_TEST_STACK_WORK ?= .stack-work-pmcfg-test +PMCFG_TEST_PRE_STACK_WORK ?= .stack-work-pmcfg-test-pre +PMCFG_TEST_DIR ?= $(PROFILE_DIR)/pmcfg-test +PMCFG_EQ_DIR ?= $(PMCFG_TEST_DIR)/equivalence +PMCFG_EQ_NAME ?= PMCFGEquiv +PMCFG_TEST_IMPORT_DIRS ?= testsuite/canonical/grammars +PMCFG_TEST_IMPORT_OPTIONS = $(foreach dir,$(PMCFG_TEST_IMPORT_DIRS),-i $(dir)) +PMCFG_TEST_MODULES ?= testsuite/pmcfg/fixtures/PmcfgDiffCnc.gf testsuite/compiler/params/paramsCnc.gf testsuite/runtime/parser/LiteralsCnc.gf testsuite/runtime/parser/DummyNatCnc.gf testsuite/runtime/linearize/TestCnc.gf testsuite/compiler/check/lins/linsCnc.gf testsuite/canonical/gold/FoodsFin.gf +PMCFG_TEST_GF_OPTIONS ?= --make --quiet --src $(PMCFG_TEST_IMPORT_OPTIONS) +RGL_PMCFG_TEST_MODULES ?= $(RGL_DIR)/src/german/LangGer.gf $(RGL_DIR)/src/finnish/LangFin.gf $(RGL_DIR)/src/swedish/LangSwe.gf +RGL_PMCFG_TEST_GF_OPTIONS ?= --make --quiet --src --preproc=mkPresent $(RGL_PROFILE_IMPORT_OPTIONS) + all: build dist/setup-config: gf.cabal Setup.hs WebSetup.hs @@ -122,6 +136,42 @@ bench-rgl-pre-pmcfg: bench-rgl-clean: rm -rf $(RGL_BENCH_DIR) $(RGL_BENCH_PRE_PMCFG_DIR) +test-pmcfg: test-pmcfg-core test-pmcfg-equivalence + +test-pmcfg-core: + stack --work-dir $(PMCFG_TEST_CORE_STACK_WORK) test gf:pmcfg-tests --flag gf:pmcfg-test-hooks + +test-pmcfg-equivalence: + stack --work-dir $(PMCFG_TEST_STACK_WORK) build + stack --work-dir $(PMCFG_TEST_PRE_STACK_WORK) build --flag gf:pre-pmcfg + rm -rf $(PMCFG_EQ_DIR) + mkdir -p $(PMCFG_EQ_DIR) + @set -e; \ + i=0; \ + for module in $(PMCFG_TEST_MODULES); do \ + i=$$((i+1)); \ + case_name=$$(basename "$$module" .gf); \ + case_dir="$(PMCFG_EQ_DIR)/$$i-$$case_name"; \ + new_gfo="$$case_dir/new-gfo"; \ + new_pgf="$$case_dir/new-pgf"; \ + pre_gfo="$$case_dir/pre-gfo"; \ + pre_pgf="$$case_dir/pre-pgf"; \ + mkdir -p "$$new_gfo" "$$new_pgf" "$$pre_gfo" "$$pre_pgf"; \ + echo "PMCFG equivalence: $$module"; \ + stack --work-dir $(PMCFG_TEST_STACK_WORK) exec gf -- $(PMCFG_TEST_GF_OPTIONS) --gfo-dir="$$new_gfo" --output-dir="$$new_pgf" --name=$(PMCFG_EQ_NAME) "$$module"; \ + stack --work-dir $(PMCFG_TEST_PRE_STACK_WORK) exec gf -- $(PMCFG_TEST_GF_OPTIONS) --gfo-dir="$$pre_gfo" --output-dir="$$pre_pgf" --name=$(PMCFG_EQ_NAME) "$$module"; \ + test -f "$$new_pgf/$(PMCFG_EQ_NAME).pgf"; \ + test -f "$$pre_pgf/$(PMCFG_EQ_NAME).pgf"; \ + cmp "$$new_pgf/$(PMCFG_EQ_NAME).pgf" "$$pre_pgf/$(PMCFG_EQ_NAME).pgf" || { echo "PMCFG output differs for $$module; artifacts kept in $$case_dir"; exit 1; }; \ + done + +test-pmcfg-rgl-equivalence: + @test -d "$(RGL_DIR)" || { echo "Missing RGL_DIR: $(RGL_DIR)"; exit 1; } + $(MAKE) test-pmcfg-equivalence PMCFG_TEST_MODULES="$(RGL_PMCFG_TEST_MODULES)" PMCFG_TEST_GF_OPTIONS="$(RGL_PMCFG_TEST_GF_OPTIONS)" PMCFG_EQ_DIR="$(PMCFG_TEST_DIR)/rgl-equivalence" + +test-pmcfg-clean: + rm -rf $(PMCFG_TEST_DIR) + install: ifeq ($(STACK),1) stack install -- cgit v1.2.3