diff --git a/Makefile.coq.local b/Makefile.coq.local index 53770f4c296e383ad1922dab19da32106257d496..08385834f92455bdfa30f59a2bfde9f19c3f9a20 100644 --- a/Makefile.coq.local +++ b/Makefile.coq.local @@ -8,6 +8,7 @@ test: $(TESTFILES:.v=.vo) .PHONY: test COQ_TEST=$(COQTOP) $(COQDEBUG) -batch -test-mode +COQ_OLD=$(shell echo "$(COQ_VERSION)" | egrep "^8\.7\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. @@ -27,13 +28,13 @@ $(TESTFILES:.v=.vo): %.vo: %.v $(if $(MAKE_REF),,%.ref) else \ REF="tests/$$TEST.ref"; \ fi && \ - echo $(if $(MAKE_REF),"COQTEST [ref] `basename "$$REF"`","COQTEST `basename "$$REF"`") && \ + echo $(if $(MAKE_REF),"COQTEST [ref] `basename "$$REF"`","COQTEST$(if $(COQ_OLD), [ignored],) `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" "$$REF", \ - diff -u "$$REF" "$$TMPFILE.filtered" \ + $(if $(COQ_OLD),true,diff -u "$$REF" "$$TMPFILE.filtered") \ ) && \ rm -f "$$TMPFILE" "$$TMPFILE.filtered" && \ touch $@ diff --git a/tests/atomic.8.7.ref b/tests/atomic.8.7.ref deleted file mode 100644 index af5aa0bbc9bfb2f551a55650446276679623defe..0000000000000000000000000000000000000000 --- a/tests/atomic.8.7.ref +++ /dev/null @@ -1,369 +0,0 @@ -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 }} -