From a36f7dcdee8b109b3ee62b4fee935b678c52bf3c Mon Sep 17 00:00:00 2001 From: Ralf Jung <jung@mpi-sws.org> Date: Sat, 19 Jan 2019 14:28:06 +0000 Subject: [PATCH] per-Coq-version .ref files --- Makefile.coq.local | 16 +- README.md | 4 + tests/atomic.8.9.ref | 369 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 382 insertions(+), 7 deletions(-) create mode 100644 tests/atomic.8.9.ref diff --git a/Makefile.coq.local b/Makefile.coq.local index 8d426e9e7..53770f4c2 100644 --- a/Makefile.coq.local +++ b/Makefile.coq.local @@ -8,7 +8,7 @@ test: $(TESTFILES:.v=.vo) .PHONY: test COQ_TEST=$(COQTOP) $(COQDEBUG) -batch -test-mode -COQ_BROKEN=$(shell echo "$(COQ_VERSION)" | egrep "^8\.(9|10)\b" > /dev/null && echo 1) +COQ_MINOR_VERSION=$(shell echo "$(COQ_VERSION)" | egrep '^[0-9]+\.[0-9]+' -o) # Can't use pipes because that discards error codes and dash provides no way to control that. # Also egrep errors if it doesn't match anything, we have to ignore that. @@ -21,17 +21,19 @@ tests/.coqdeps.d: $(TESTFILES) -include tests/.coqdeps.d $(TESTFILES:.v=.vo): %.vo: %.v $(if $(MAKE_REF),,%.ref) - $(SHOW)$(if $(MAKE_REF),COQTEST [ref],$(if $(COQ_BROKEN),COQTEST [ignored],COQTEST)) $< $(HIDE)TEST="$$(basename -s .v $<)" && \ + if test -f "tests/$$TEST.$(COQ_MINOR_VERSION).ref"; then \ + REF="tests/$$TEST.$(COQ_MINOR_VERSION).ref"; \ + else \ + REF="tests/$$TEST.ref"; \ + fi && \ + echo $(if $(MAKE_REF),"COQTEST [ref] `basename "$$REF"`","COQTEST `basename "$$REF"`") && \ TMPFILE="$$(mktemp)" && \ $(TIMER) $(COQ_TEST) $(COQFLAGS) $(COQLIBS) -load-vernac-source $< > "$$TMPFILE" && \ ($(REF_FILTER) < "$$TMPFILE" > "$$TMPFILE.filtered" || true) && \ $(if $(MAKE_REF), \ - mv "$$TMPFILE.filtered" "tests/$$TEST.ref", \ - $(if $(COQ_BROKEN), \ - true, \ - diff -u "tests/$$TEST.ref" "$$TMPFILE.filtered" \ - ) \ + mv "$$TMPFILE.filtered" "$$REF", \ + diff -u "$$REF" "$$TMPFILE.filtered" \ ) && \ rm -f "$$TMPFILE" "$$TMPFILE.filtered" && \ touch $@ diff --git a/README.md b/README.md index c4fcf9e2e..75242f553 100644 --- a/README.md +++ b/README.md @@ -134,3 +134,7 @@ This is used to make sure the proof mode prints goals and reduces terms the way we expect it to. You can run `MAKE_REF=1 make` to re-generate all the `.ref` files; this is useful after adding or removing `Show.` from a test. If you do this, make sure to check the diff for any unexpected changes in the output! + +Some test cases have per-Coq-version `.ref` files (e.g., `atomic.8.9.ref` is a +Coq-8.9-specific `.ref` file). If you change one of these, remember to update +*all* the `.ref` files. diff --git a/tests/atomic.8.9.ref b/tests/atomic.8.9.ref new file mode 100644 index 000000000..c51ade4ec --- /dev/null +++ b/tests/atomic.8.9.ref @@ -0,0 +1,369 @@ +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + P : val → iProp Σ + ============================ + <<< ∀ x : val, P x >>> code @ ⊤ <<< ∃ y : val, P y, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + P : val → iProp Σ + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << ∀ x : val, P x >> @ ⊤, ∅ << ∃ y : val, P y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + P : val → iProp Σ + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + _ : AACC << ∀ x : val, P x + ABORT AU << ∀ x : val, P x >> @ ⊤, ∅ + << ∃ y : val, P y, COMM Q -∗ Φ #() >> >> @ ⊤, ∅ + << ∃ y : val, P y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< ∀ x : val, l ↦ x >>> code @ ⊤ <<< l ↦ x, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << ∀ x : val, l ↦ x >> @ ⊤, ∅ << l ↦ x, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + _ : AACC << ∀ x : val, l ↦ x + ABORT AU << ∀ x : val, l ↦ x >> @ ⊤, ∅ + << l ↦ x, COMM Q -∗ Φ #() >> >> @ ⊤, ∅ + << l ↦ x, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< l ↦ #() >>> code @ ⊤ <<< ∃ y : val, l ↦ y, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ #() >> @ ⊤, ∅ << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + _ : AACC << l ↦ #() + ABORT AU << l ↦ #() >> @ ⊤, ∅ + << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> >> @ ⊤, ∅ + << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< l ↦ #() >>> code @ ⊤ <<< l ↦ #(), RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ #() >> @ ⊤, ∅ << l ↦ #(), COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + _ : AACC << l ↦ #() + ABORT AU << l ↦ #() >> @ ⊤, ∅ << l ↦ #(), COMM Q -∗ Φ #() >> >> + @ ⊤, ∅ << l ↦ #(), COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +"Now come the long pre/post tests" + : string +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< ∀ x : val, l ↦ x ∗ l ↦ x >>> code @ ⊤ <<< ∃ y : val, l ↦ y, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << ∀ x : val, l ↦ x ∗ l ↦ x >> @ ⊤, ∅ + << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< ∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>> + code @ ⊤ + <<< ∃ y : val, l ↦ y, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << ∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >> + @ ⊤, ∅ << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< ∀ xx : val, l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>> + code @ ⊤ + <<< ∃ yyyy : val, l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx, + RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + _ : AU << ∀ xx : val, l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >> @ ⊤, ∅ + << ∃ yyyy : val, l ↦ yyyy + ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx, + COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + ============================ + <<< ∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>> + code @ ⊤ + <<< l ↦ x, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << ∀ x : val, l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >> @ ⊤, ∅ + << l ↦ x, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + x : val + ============================ + <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>> + code @ ⊤ + <<< ∃ y : val, l ↦ y, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + x : val + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >> @ ⊤, ∅ + << ∃ y : val, l ↦ y, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + x : val + ============================ + <<< l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >>> + code @ ⊤ + <<< l ↦ #(), RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + x : val + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x ∗ l ↦ x >> @ ⊤, ∅ + << l ↦ #(), COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + xx, yyyy : val + ============================ + <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>> + code @ ⊤ + <<< l ↦ yyyy, RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + xx, yyyy : val + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >> + @ ⊤, ∅ << l ↦ yyyy, COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + xx, yyyy : val + ============================ + <<< l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >>> + code @ ⊤ + <<< l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx, + RET #() >>> +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + l : loc + xx, yyyy : val + Q : iPropI Σ + Φ : language.val heap_lang → iProp Σ + ============================ + _ : Q + "AU" : AU << l ↦ xx ∗ l ↦ xx ∗ l ↦ xx >> @ ⊤, ∅ + << l ↦ yyyy ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx ∗ l ↦ xx, + COMM Q -∗ Φ #() >> + --------------------------------------∗ + WP code {{ v, Φ v }} + +"Prettification" + : string +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + P : val → iProp Σ + ============================ + --------------------------------------∗ + ∀ Φ : language.val heap_lang → iProp Σ, + AU << ∀ x : val, P x >> @ ⊤, ∅ << ∃ y : val, P y, COMM Φ #() >> + -∗ WP ! #0 {{ v, Φ v }} + +1 subgoal + + Σ : gFunctors + heapG0 : heapG Σ + P : val → iProp Σ + Φ : language.val heap_lang → iProp Σ + ============================ + "AU" : ∃ x : val, + P x + ∗ (P x + ={∅,⊤}=∗ AU << ∀ x0 : val, P x0 >> @ ⊤, ∅ + << ∃ y : val, P y, COMM Φ #() >>) + ∧ (∀ x0 : val, P x0 ={∅,⊤}=∗ Φ #()) + --------------------------------------∗ + WP ! #0 @ ∅ {{ v, |={∅,⊤}=> Φ v }} + -- GitLab