diff options
| author | Hugo Herbelin | 2019-11-26 21:51:31 +0100 |
|---|---|---|
| committer | Hugo Herbelin | 2019-11-26 21:51:31 +0100 |
| commit | af517095b69d34837b988fa8e6a6615851dd9ca0 (patch) | |
| tree | e67be6e19bc0a6e629affb96a2d8b201f683ef85 /test-suite/complexity/pattern.v | |
| parent | de87f51f4d1de23831c1eced827b91a3628c5dd5 (diff) | |
| parent | 73bb54d1625ae6eafdb9eb7f2c673fb039150fdb (diff) | |
Merge PR #11177: Add a complexity test for `pattern`
Reviewed-by: herbelin
Diffstat (limited to 'test-suite/complexity/pattern.v')
| -rw-r--r-- | test-suite/complexity/pattern.v | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test-suite/complexity/pattern.v b/test-suite/complexity/pattern.v new file mode 100644 index 0000000000..fb5bf5a00b --- /dev/null +++ b/test-suite/complexity/pattern.v @@ -0,0 +1,38 @@ +(** Testing the performance of [pattern]. For not regressing on COQBUG(https://github.com/coq/coq/issues/11150) and COQBUG(https://github.com/coq/coq/issues/6502) *) +(* Expected time < 0.75s *) +(* reference: 0.673s after adjustment *) +Definition Let_In {A P} (v : A) (f : forall x : A, P x) : P v +:= let x := v in f x. + +Fixpoint big (a : nat) (sz : nat) : nat + := match sz with + | O => a + | S sz' => Let_In (a * a) (fun a' => big a' sz') + end. + +Ltac do_time n := + try ( + once (assert (exists e, e = big 1 n); + [ lazy -[big]; (*match goal with |- ?G => idtac G end;*) lazy [big]; + time pattern Nat.mul, S, O, (@Let_In nat (fun _ => nat)) + | ]); + fail). + +Ltac do_time_to n := + lazymatch (eval vm_compute in n) with + | O => idtac + | ?n' => do_time_to (Nat.div2 n'); idtac n'; do_time n' + end. + +Local Set Warnings "-abstract-large-number". + +(* Don't spend lots of time printing *) +Notation hide := (_ = _). + +Goal True. +Proof. + (* do_time_to 16384. *) (* should be linear, not quadratic *) + assert (exists e, e = big 1 16384). + lazy -[big]; (*match goal with |- ?G => idtac G end;*) lazy [big]. + Timeout 15 Time pattern Nat.mul, S, O, (@Let_In nat (fun _ => nat)). +Abort. |
