From elpi.apps Require Import derive.eqcorrect.

From elpi.apps Require Import test_derive_corelib derive.tests.test_eq test_param1 test_param1_functor test_induction test_eqK.

Import test_derive_corelib.Coverage.
Import tests.test_eq.Coverage.
Import test_param1.Coverage.
Import test_param1_functor.Coverage.
Import test_induction.Coverage.
Import test_eqK.Coverage.

Module Coverage.
Elpi derive.eqcorrect empty.
Elpi derive.eqcorrect unit.
Elpi derive.eqcorrect peano.
Elpi derive.eqcorrect option.
Elpi derive.eqcorrect pair.
Elpi derive.eqcorrect seq.
Elpi derive.eqcorrect box_peano.
Elpi derive.eqcorrect rose.
Elpi derive.eqcorrect rose_p.
Elpi derive.eqcorrect rose_o.
Fail Elpi derive.eqcorrect nest.
Fail Elpi derive.eqcorrect w.
Fail Elpi derive.eqcorrect vect.
Fail Elpi derive.eqcorrect dyn.
Elpi derive.eqcorrect zeta.
Elpi derive.eqcorrect beta.
Fail Elpi derive.eqcorrect iota.
(*
Elpi derive.eqcorrect large.
*)
Elpi derive.eqcorrect prim_int.
Fail Elpi derive.eqcorrect prim_float.
Elpi derive.eqcorrect prim_string.
Elpi derive.eqcorrect fo_record.
Elpi derive.eqcorrect pa_record.
Elpi derive.eqcorrect pr_record.
Fail Elpi derive.eqcorrect dep_record.
Elpi derive.eqcorrect enum.
Fail Elpi derive.eqcorrect eq.
Elpi derive.eqcorrect bool.
Fail Elpi derive.eqcorrect sigma_bool.
Fail Elpi derive.eqcorrect ord.
Fail Elpi derive.eqcorrect val.
Fail Elpi derive.eqcorrenct mempty.
Fail Elpi derive.eqcorrenct munit.
Fail Elpi derive.eqcorrenct mpeano.
Fail Elpi derive.eqcorrenct moption.
Fail Elpi derive.eqcorrenct mtree.

End Coverage.

Import Coverage eqK.

Local Notation correct X isX F := (forall x, isX x -> eq_axiom_at X F x).

Redirect "tmp" Check empty_eq_correct : correct empty is_empty empty_eq.
Redirect "tmp" Check unit_eq_correct : correct unit is_unit unit_eq.
Redirect "tmp" Check peano_eq_correct : correct peano is_peano peano_eq.
Redirect "tmp" Check option_eq_correct : forall A f, correct (option A) (is_option A (eq_axiom_at A f)) (option_eq A f).
Redirect "tmp" Check pair_eq_correct : forall A f B g, correct (pair A B) (is_pair A (eq_axiom_at A f) B (eq_axiom_at B g)) (pair_eq A f B g).
Redirect "tmp" Check seq_eq_correct : forall A f, correct (seq A) (is_seq A (eq_axiom_at A f)) (seq_eq A f).
Redirect "tmp" Check rose_eq_correct : forall A f, correct (rose A) (is_rose A (eq_axiom_at A f)) (rose_eq A f).
Fail Check nest_eq_correct.
Fail Check w_eq_correct.
Fail Check vect_eq_correct.
Fail Check dyn_eq_correct.
Redirect "tmp" Check zeta_eq_correct : forall A f, correct (zeta A) (is_zeta A (eq_axiom_at A f)) (zeta_eq A f).
Redirect "tmp" Check beta_eq_correct : forall A f, correct (beta A) (is_beta A (eq_axiom_at A f)) (beta_eq A f).
Fail Check iota_eq_correct.
(* Check large_eq_correct : correct large is_large large_eq. *)
Redirect "tmp" Check prim_int_eq_correct.
Fail Check prim_float_eq_correct.
Redirect "tmp" Check fo_record_eq_correct : correct fo_record is_fo_record fo_record_eq.
Redirect "tmp" Check pa_record_eq_correct : forall A f, correct (pa_record A) (is_pa_record A (eq_axiom_at A f)) (pa_record_eq A f).
Redirect "tmp" Check pr_record_eq_correct : forall A f, correct (pr_record A) (is_pr_record A (eq_axiom_at A f)) (pr_record_eq A f).
Redirect "tmp" Check enum_eq_correct : correct enum is_enum enum_eq.

