summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authoradelon <22380201+adelon@users.noreply.github.com>2026-05-18 00:55:16 +0200
committeradelon <22380201+adelon@users.noreply.github.com>2026-05-18 00:55:16 +0200
commit827d73a91ed0fb3dfff56379ebea21a29406a277 (patch)
tree76ce0738ca057db6177b817ce0d617f2111fd295 /Makefile
parent3cc01b9d311c7a9f86fbf2fa8c2d66921f9ba030 (diff)
Tests
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile50
1 files changed, 50 insertions, 0 deletions
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