Coq Unit Testing tools

CUT 1.0 has been developed by Catherine Dubois, Richard Genestier and Alain 
Giorgetti from December 2015 to July 2016. It is documented in [DGG16].

CUT 2.0 and 2.1 have been developed by Catherine Dubois and Alain Giorgetti from
February 2017 to February 2018. CUT 2.1 is documented in [DG18].

CUT 2.2 is an extension of CUT 2.1 developed by Alain Giorgetti from August 2018
to January 2019. It is documented in [GDL19].

CUT 2.3 is an adaptation of CUT 2.2 to Coq 8.9.0 and Why3 1.3.1 developed by 
Alain Giorgetti in August and September 2020.

CUT 2.4 is an adaptation of CUT 2.3 to Coq 8.10.2 and Why3 1.3.3 developed by 
Alain Giorgetti in October 2020.

CUT 2.5 is CUT 2.4 completed with the case study [DMG].

INSTALLATION
============

See the file INSTALL.md.

DOCUMENTATION
=============

The folder prolog/ contains the Prolog validation library (BET and counting).

The folder why3/ contains custom generators in WhyML, whose properties are proved 
with Why3. They are extracted in OCaml in the folder OCaml/.

The folder QuickChick-master/ contains our extension of QuickChick.

The folder examples/ contains case studies.

The folder doc/ contains the following research papers documenting the code:

[DGG16] C. Dubois, A. Giorgetti, and R. Genestier. Tests and proofs for enumerative combinatorics.
        In B. Aichernig and C. A. Furia, editors, Tests and Proofs (TAP), volume 6792 of LNCS,
        pp. 57–75. Springer International Publishing (2016), http://dx.doi.org/10.1007/978-3-319-41135-4_4

[DG18]  C. Dubois and A. Giorgetti. Tests and proofs for custom data generators.
        Formal Aspects of Computing, July 2018.
        https://doi.org/10.1007/s00165-018-0459-1.

[GDL19] A. Giorgetti, C. Dubois and R. Lazarini. Combinatoire formelle avec Why3
        et Coq. In Nicolas Magaud and Zaynah Dargaye, editors, Journées Franco-
        phones des Langages Applicatifs 2019, pp 139–154, Les Rousses, France,
        January 2019. https://hal.inria.fr/hal-01985195.

ENUMERATIVE TESTING WITH A CUSTOM GENERATOR IN WhyML, IN A NUTSHELL
===================================================================

For all enumerative tests with a generator written in WhyML, make sure that:

1. the test folder contains the file examples/coq/Sc.v, and

2. the OCaml code was previously produced by extraction with Why3 from the WhyML code of the generator

The files examples/coq/sc_blist.v, examples/coq/val_sc_blist.v and why3/enum/generator/barray/Barray.mlw
and the folder OCaml/enum/generator/barray/ provide you with an example of an enumerative test with a
generator written in WhyML. The command 'make extract' in the folder why3/enum/generator/barray/
performs the required extraction.

PROJECT HOME
============

http://members.femto-st.fr/alain-giorgetti/en/coq-unit-testing

COPYRIGHT
=========

This program is distributed under the GNU LGPL 3. See the enclosed LICENSE file.

REFERENCES
==========

[Arn10]   J. Arndt. Matters Computational - Ideas, Algorithms, Source Code [The 
          fxtbook]. 2010. http://www.jjj.de.

[Cohen13] C. Cohen. Pragmatic Quotient Types in Coq, pages 213–228. Springer, 2013.

[DMG]     C. Dubois, N. Magaud, and A. Giorgetti. Pragmatic isomorphism proofs
          between Coq representations: application to lambda-term families. Under submission.
