aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.gitlab-ci.yml1
-rw-r--r--mathcomp/Makefile.test-suite.coq.local22
-rw-r--r--mathcomp/test_suite/output.v4
-rw-r--r--mathcomp/test_suite/output.v.out48
-rw-r--r--mathcomp/test_suite/output.v.out.8.1248
-rw-r--r--mathcomp/test_suite/output.v.out.8.1349
7 files changed, 173 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 9c96cbf..b67b048 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ mathcomp/ssrmatching.v
mathcomp/ssreflect_plugin.mllib
mathcomp/ssreflect_plugin.mlpack
mathcomp/test_suite/hierarchy_test.v
+mathcomp/test_suite/*.v.out.new
mathcomp-*.tar.gz
*#
htmldoc/mathcomp.*html
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6e96a28..a5fcc2c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -70,6 +70,7 @@ make-coq-latest:
script:
- docker build --pull --build-arg=coq_image="coqorg/${CI_JOB_NAME//-/:}" --build-arg=compiler="${OPAM_SWITCH}" -t "${IMAGE}" .
- docker push "${IMAGE}"
+ - docker run --mount "type=bind,source=$(pwd),target=/home/coq/mathcomp" -w /home/coq/mathcomp -t "${IMAGE}" /bin/bash --login -c "set -x; cd mathcomp; make test-suite"
- docker logout "${CI_REGISTRY}"
except:
- tags
diff --git a/mathcomp/Makefile.test-suite.coq.local b/mathcomp/Makefile.test-suite.coq.local
new file mode 100644
index 0000000..5a1ec43
--- /dev/null
+++ b/mathcomp/Makefile.test-suite.coq.local
@@ -0,0 +1,22 @@
+OUTPUT_TESTS=test_suite/output.v
+
+OUTPUT_ARTIFACTS=$(OUTPUT_TESTS:%.v=%.v.out.new)
+
+COQ_VERSION=$(shell $(COQC) -print-version | cut -d ' ' -f 1 | cut -d '.' -f 1-2)
+
+# Given a file f we compare its compilation output f.out.new with
+# f.out.COQ_VERSION (or f.out if f.out.COQ_VERSION does not exist)
+post-all:: $(OUTPUT_ARTIFACTS)
+ @for f in $(OUTPUT_TESTS); do\
+ if [ -e $$f.out.$(COQ_VERSION) ]; then REFERENCE=$$f.out.$(COQ_VERSION);\
+ else REFERENCE=$$f.out; fi;\
+ diff -u $$REFERENCE $$f.out.new > /dev/null;\
+ if [ $$? -ne 0 ]; \
+ then echo "Output of file $$f differs!";\
+ diff -u $$REFERENCE $$f.out.new;\
+ exit 1;\
+ fi;\
+ done
+
+$(OUTPUT_ARTIFACTS): %.v.out.new: %.v all/all.vo
+ $(COQC) $(COQFLAGS) $(COQLIBS) $< > $<.out.new \ No newline at end of file
diff --git a/mathcomp/test_suite/output.v b/mathcomp/test_suite/output.v
new file mode 100644
index 0000000..706f15d
--- /dev/null
+++ b/mathcomp/test_suite/output.v
@@ -0,0 +1,4 @@
+From mathcomp Require Import all.
+
+Open Scope group_scope.
+About cyclic_pgroup_Aut_structure. \ No newline at end of file
diff --git a/mathcomp/test_suite/output.v.out b/mathcomp/test_suite/output.v.out
new file mode 100644
index 0000000..bc5d3c8
--- /dev/null
+++ b/mathcomp/test_suite/output.v.out
@@ -0,0 +1,48 @@
+cyclic_pgroup_Aut_structure :
+forall [gT : finGroupType] [p : nat] [G : {group gT}],
+p.-group G ->
+cyclic G ->
+G != 1 :> {set gT} ->
+let q := #|G| in
+let n := (logn p q).-1 in
+let A := Aut G in
+let P := 'O_p(A) in
+let F := 'O_p^'(A) in
+exists m : {perm gT} -> 'Z_q,
+ [/\ [/\ {in A & G, forall (a : {perm gT}) (x : gT), x ^+ m a = a x},
+ m 1 = 1%R /\ {in A &, {morph m : a b / a * b >-> (a * b)%R}},
+ {in A &, injective m} /\ [seq m x | x in A] =i GRing.unit,
+ forall k : nat, {in A, {morph m : a / a ^+ k >-> (a ^+ k)%R}}
+ & {in A, {morph m : a / a^-1 >-> (a^-1)%R}}],
+ [/\ abelian A, cyclic F, #|F| = p.-1
+ & [faithful F, on 'Ohm_1(G) | [Aut G]]]
+ & if n == 0
+ then A = F
+ else
+ exists t : perm_for_finType gT,
+ [/\ t \in A, #[t] = 2, m t = (-1)%R
+ & if odd p
+ then
+ [/\ cyclic A /\ cyclic P,
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (p ^ n)%N, m s = (p.+1%:R)%R
+ & P = <[s]>]
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = p, m s0 = ((p ^ n).+1%:R)%R
+ & 'Ohm_1(P) = <[s0]>]]
+ else
+ if n == 1
+ then A = <[t]>
+ else
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (2 ^ n.-1)%N,
+ m s = (5%:R)%R, <[s]> \x <[t]> = A
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = 2, m s0 = ((2 ^ n).+1%:R)%R,
+ m (s0 * t) = ((2 ^ n).-1%:R)%R
+ & 'Ohm_1(<[s]>) = <[s0]>]]]]
+
+cyclic_pgroup_Aut_structure is not universe polymorphic
+Arguments cyclic_pgroup_Aut_structure [gT] [p]%nat_scope [G]%Group_scope
+cyclic_pgroup_Aut_structure is opaque
+Expands to: Constant mathcomp.solvable.extremal.cyclic_pgroup_Aut_structure
diff --git a/mathcomp/test_suite/output.v.out.8.12 b/mathcomp/test_suite/output.v.out.8.12
new file mode 100644
index 0000000..bc5d3c8
--- /dev/null
+++ b/mathcomp/test_suite/output.v.out.8.12
@@ -0,0 +1,48 @@
+cyclic_pgroup_Aut_structure :
+forall [gT : finGroupType] [p : nat] [G : {group gT}],
+p.-group G ->
+cyclic G ->
+G != 1 :> {set gT} ->
+let q := #|G| in
+let n := (logn p q).-1 in
+let A := Aut G in
+let P := 'O_p(A) in
+let F := 'O_p^'(A) in
+exists m : {perm gT} -> 'Z_q,
+ [/\ [/\ {in A & G, forall (a : {perm gT}) (x : gT), x ^+ m a = a x},
+ m 1 = 1%R /\ {in A &, {morph m : a b / a * b >-> (a * b)%R}},
+ {in A &, injective m} /\ [seq m x | x in A] =i GRing.unit,
+ forall k : nat, {in A, {morph m : a / a ^+ k >-> (a ^+ k)%R}}
+ & {in A, {morph m : a / a^-1 >-> (a^-1)%R}}],
+ [/\ abelian A, cyclic F, #|F| = p.-1
+ & [faithful F, on 'Ohm_1(G) | [Aut G]]]
+ & if n == 0
+ then A = F
+ else
+ exists t : perm_for_finType gT,
+ [/\ t \in A, #[t] = 2, m t = (-1)%R
+ & if odd p
+ then
+ [/\ cyclic A /\ cyclic P,
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (p ^ n)%N, m s = (p.+1%:R)%R
+ & P = <[s]>]
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = p, m s0 = ((p ^ n).+1%:R)%R
+ & 'Ohm_1(P) = <[s0]>]]
+ else
+ if n == 1
+ then A = <[t]>
+ else
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (2 ^ n.-1)%N,
+ m s = (5%:R)%R, <[s]> \x <[t]> = A
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = 2, m s0 = ((2 ^ n).+1%:R)%R,
+ m (s0 * t) = ((2 ^ n).-1%:R)%R
+ & 'Ohm_1(<[s]>) = <[s0]>]]]]
+
+cyclic_pgroup_Aut_structure is not universe polymorphic
+Arguments cyclic_pgroup_Aut_structure [gT] [p]%nat_scope [G]%Group_scope
+cyclic_pgroup_Aut_structure is opaque
+Expands to: Constant mathcomp.solvable.extremal.cyclic_pgroup_Aut_structure
diff --git a/mathcomp/test_suite/output.v.out.8.13 b/mathcomp/test_suite/output.v.out.8.13
new file mode 100644
index 0000000..0546b70
--- /dev/null
+++ b/mathcomp/test_suite/output.v.out.8.13
@@ -0,0 +1,49 @@
+cyclic_pgroup_Aut_structure :
+forall [gT : finGroupType] [p : nat] [G : {group gT}],
+p.-group G ->
+cyclic G ->
+G != 1 :> {set gT} ->
+let q := #|G| in
+let n := (logn p q).-1 in
+let A := Aut G in
+let P := 'O_p(A) in
+let F := 'O_p^'(A) in
+exists m : {perm gT} -> 'Z_q,
+ [/\ [/\ {in A & G, forall (a : {perm gT}) (x : gT), x ^+ m a = a x},
+ m 1 = 1%R /\ {in A &, {morph m : a b / a * b >-> (a * b)%R}},
+ {in A &, injective m} /\ [seq m x | x in A] =i GRing.unit,
+ forall k : nat, {in A, {morph m : a / a ^+ k >-> (a ^+ k)%R}}
+ & {in A, {morph m : a / a^-1 >-> (a^-1)%R}}],
+ [/\ abelian A, cyclic F, #|F| = p.-1
+ & [faithful F, on 'Ohm_1(G) | [Aut G]]]
+ & if n == 0
+ then A = F
+ else
+ exists t : perm_for_finType gT,
+ [/\ t \in A, #[t] = 2, m t = (-1)%R
+ & if odd p
+ then
+ [/\ cyclic A /\ cyclic P,
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (p ^ n)%N, m s = (p.+1%:R)%R
+ & P = <[s]>]
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = p, m s0 = ((p ^ n).+1%:R)%R
+ & 'Ohm_1(P) = <[s0]>]]
+ else
+ if n == 1
+ then A = <[t]>
+ else
+ exists s : perm_for_finType gT,
+ [/\ s \in A, #[s] = (2 ^ n.-1)%N,
+ m s = (5%:R)%R, <[s]> \x <[t]> = A
+ & exists s0 : perm_for_finType gT,
+ [/\ s0 \in A, #[s0] = 2, m s0 = ((2 ^ n).+1%:R)%R,
+ m (s0 * t) = ((2 ^ n).-1%:R)%R
+ & 'Ohm_1(<[s]>) = <[s0]>]]]]
+
+cyclic_pgroup_Aut_structure is not universe polymorphic
+Arguments cyclic_pgroup_Aut_structure [gT] [p]%nat_scope [G]%Group_scope _ _
+ _
+cyclic_pgroup_Aut_structure is opaque
+Expands to: Constant mathcomp.solvable.extremal.cyclic_pgroup_Aut_structure