* test The idea is to run those tests before *each commit*. All tests are done via file:src/Makefile; it runs the lus2lic compiler with various options on every files contained in - file:tests/should_work/ that contains correct Lustre V6 programs - file:tests/should_fail/ that contains incorrect ones (e.g., that contains a type error). ** Testing Correct Lustre V6 programs The output of all lus2lic invocation are redirected to =test.res=. This file is then compared to =test.res.exp= (=exp= stands for expected). When the results (=.res=) and the expected results (=.res.exp=) differs, the test fails. Note that tests do not only fail during a regression, but also during a progression! In order to update the expected result, just issue a 'make utest'. Actually, 3 kinds of lus2lic invocation are performed: - lic: just use lus2lic on all lustre files - ec: ditto using the -ec option, plus calling ec2c on the generated files - lv4: ditto using the -lv4 option, plus calling lus2ec on the generated files ** Testing Incorrect Lustre V6 programs We check that all progs in file:tests/should_fail/ returns with an exit code > 0. * src file:ocamldoc/index.html Here follows a description of the different modules used by this lus2lic compiler (in src) ** First of all, the Lustre files are parsed, and put input tables lxm.ml lxm.mli lexer.mll parser.mly parserUtils.ml astCore.ml astV6.ml astPredef.ml ident.ml ident.mli ** and put input tables performing some checks along the way (references) astTab.ml astTab.mli astTabSymbol.ml astTabSymbol.mli astV6Dump.ml astV6Dump.mli ** Some source to source manip are performed of those tables astInstanciateModel.ml astInstanciateModel.mli astRecognizePredef.ml astRecognizePredef.mli ** Then the source is statically evaluated and type/clock checked ast2lic.ml ast2lic.mli lic.ml licTab.ml licTab.mli licDump.ml licDump.mli licMetaOp.ml licMetaOp.mli licName.ml licName.mli licPredef.ml licEvalClock.ml licEvalClock.mli licEvalConst.ml licEvalConst.mli licEvalType.ml licEvalType.mli evalClock.ml evalClock.mli evalConst.ml evalConst.mli evalType.ml evalType.mli unifyClock.ml unifyClock.mli unifyType.ml unifyType.mli ** Lic is transformed into a LicPrg (imperative table->functional maps) licPrg.ml licPrg.mli ** Some source to source manip are performed l2lAliasType.ml l2lAliasType.mli l2lCheckOutputs.ml l2lCheckOutputs.mli l2lExpandArrays.ml l2lExpandArrays.mli l2lExpandNodes.ml l2lExpandNodes.mli l2lRmPoly.ml l2lRmPoly.mli l2lSplit.ml l2lSplit.mli ** All this don from a main program main.ml mainArgs.ml mainArgs.mli global.ml compile.ml compile.mli ** Some misc (eponymous) modules are used along the way. verbose.ml verbose.mli filenameExtras.ml filenameExtras.mli errors.ml ** crutch to remove uglyStuff.ml * todo cf file:todo.org