#!/bin/ksh

# The runOK function does the following for a test file that is not expected
# to cause any errors in the dmisParser:

# 1. It prints the name of the test file.

# 2. It copies the test file to junk1

# 3. It runs junk1 through the dmisConformanceRecorder. This copies
#    junk1 to junk1.back and replaces the conformance statement in
#    junk1 with a conformance statement generated automatically.

# 4. It checks that junk1 and junk1.back are identical. If the test is
#    passed, it is done. Otherwise it prints "cycle test failed" and
#    returns 1; in this case, the difference between the two files
#    is saved in junk2.

INA=../../../parserTestFiles/annexAIn
INO=../../../parserTestFiles/okIn

function runOK
{
   echo $1
   cp $1 junk1
   ../bin/dmisConformanceRecorder junk1
   diff junk1 junk1.back > junk2
   if [ "$?" -ne "0" ]; then
     echo "cycle test failed"
     return 1
   fi
   return 0
}

# syntactically correct programs from DMIS 5.2
runOK $INA/A.01.dmi              || exit
runOK $INA/A.02.dmi              || exit
runOK $INA/A.03.dmi              || exit
runOK $INA/A.04.2.dmi            || exit
runOK $INA/A.05.dmi              || exit
runOK $INA/A.06.dmi              || exit
runOK $INA/A.07.dmi              || exit
runOK $INA/A.08.1.dmi            || exit
runOK $INA/A.08.2.dmi            || exit
runOK $INA/A.08.3.dmi            || exit
runOK $INA/A.09.dmi              || exit
runOK $INA/A.10.dmi              || exit
runOK $INA/A.11.dmi              || exit
runOK $INA/A.12.dmi              || exit
runOK $INA/A.13.dmi              || exit
runOK $INA/A.14.dmi              || exit
runOK $INA/A.15.dmi              || exit
runOK $INA/A.16.dmi              || exit
runOK $INA/A.17.dmi              || exit
runOK $INA/A.18.dmi              || exit
runOK $INA/A.19.1.dmi            || exit
runOK $INA/A.19.2.dmi            || exit
runOK $INA/A.20.dmi              || exit
runOK $INA/A.21.dmi              || exit
runOK $INA/A.22.1.dmi            || exit
runOK $INA/A.22.2.dmi            || exit
runOK $INA/A.23.dmi              || exit
runOK $INA/A.24.dmi              || exit
runOK $INA/A.25.1.dmi            || exit
runOK $INA/A.25.2.dmi            || exit
runOK $INA/A.25.3.dmi            || exit
runOK $INA/A.26.dmi              || exit
runOK $INA/A.27.dmi              || exit
runOK $INA/A.28.dmi              || exit
runOK $INA/A.23.dmi              || exit
runOK $INA/A.30.1.dmi            || exit
runOK $INA/A.30.2.dmi            || exit
runOK $INA/A.30.3.dmi            || exit
runOK $INA/A.30.4.dmi            || exit
runOK $INA/A.30.5.dmi            || exit
runOK $INA/A.30.6.dmi            || exit
runOK $INA/A.30.7.dmi            || exit
runOK $INA/A.31.dmi              || exit
runOK $INA/A.32.dmi              || exit
runOK $INA/A.33.dmi              || exit
runOK $INA/A.34.1.dmi            || exit
runOK $INA/A.34.2.dmi            || exit
runOK $INA/A.34.3.dmi            || exit
runOK $INA/A.35.dmi              || exit
runOK $INA/A.36.dmi              || exit
runOK $INA/A.37.dmi              || exit
runOK $INA/A.38.dmi              || exit
runOK $INA/resume.dmi            || exit

# syntactically correct programs testing specific DMIS commands
runOK $INO/aclrat1.dmi           || exit
runOK $INO/algdef1.dmi           || exit
runOK $INO/assign1.dmi           || exit
runOK $INO/badtst1.dmi           || exit
runOK $INO/bound1.dmi            || exit
runOK $INO/calib1.dmi            || exit
runOK $INO/call1.dmi             || exit
runOK $INO/case1.dmi             || exit
runOK $INO/clmpid1.dmi           || exit
runOK $INO/clmpid2.dmi           || exit
runOK $INO/clmpsn1.dmi           || exit
runOK $INO/close1.dmi            || exit
runOK $INO/cmpntgrp1.dmi         || exit
runOK $INO/cnfrmrul1.dmi         || exit
runOK $INO/const1.dmi            || exit
runOK $INO/const2.dmi            || exit
runOK $INO/const3.dmi            || exit
runOK $INO/const4.dmi            || exit
runOK $INO/const5.dmi            || exit
runOK $INO/const6.dmi            || exit
runOK $INO/const7.dmi            || exit
runOK $INO/const8.dmi            || exit
runOK $INO/const9.dmi            || exit
runOK $INO/const10.dmi           || exit
runOK $INO/const11.dmi           || exit
runOK $INO/const12.dmi           || exit
runOK $INO/const13.dmi           || exit
runOK $INO/const14.dmi           || exit
runOK $INO/const15.dmi           || exit
runOK $INO/crgdef1.dmi           || exit
runOK $INO/crmode1.dmi           || exit
runOK $INO/croscl1.dmi           || exit
runOK $INO/crslct1.dmi           || exit
runOK $INO/cutcom1.dmi           || exit
runOK $INO/czone1.dmi            || exit
runOK $INO/czslct1.dmi           || exit
runOK $INO/datdef1.dmi           || exit
runOK $INO/datset1.dmi           || exit
runOK $INO/dattrgdef1.dmi        || exit
runOK $INO/decl1.dmi             || exit
runOK $INO/decpl1.dmi            || exit
runOK $INO/delete1.dmi           || exit
runOK $INO/device1.dmi           || exit
runOK $INO/dftcas1.dmi           || exit
runOK $INO/disply1.dmi           || exit
runOK $INO/dmehw1.dmi            || exit
runOK $INO/dmeid1.dmi            || exit
runOK $INO/dmesw1.dmi            || exit
runOK $INO/dmeswi1.dmi           || exit
runOK $INO/dmeswv1.dmi           || exit
runOK $INO/dmis1.dmi             || exit
runOK $INO/dmismd1.dmi           || exit
runOK $INO/dmismn1.dmi           || exit
runOK $INO/do1.dmi               || exit
runOK $INO/else1.dmi             || exit
runOK $INO/endcas1.dmi           || exit
runOK $INO/enddo1.dmi            || exit
runOK $INO/endfil1.dmi           || exit
runOK $INO/endgo1.dmi            || exit
runOK $INO/endif1.dmi            || exit
runOK $INO/endmac1.dmi           || exit
runOK $INO/endmes1.dmi           || exit
runOK $INO/endsel1.dmi           || exit
runOK $INO/endsimreqt1.dmi       || exit
runOK $INO/endxtn1.dmi           || exit
runOK $INO/equate1.dmi           || exit
runOK $INO/error1.dmi            || exit
runOK $INO/eval1.dmi             || exit
runOK $INO/extens1.dmi           || exit
runOK $INO/extfil1.dmi           || exit
runOK $INO/featArc1.dmi          || exit
runOK $INO/featArc2.dmi          || exit
runOK $INO/featCircle1.dmi       || exit
runOK $INO/featCompound1.dmi     || exit
runOK $INO/featCone1.dmi         || exit
runOK $INO/featConradsegmnt1.dmi || exit
runOK $INO/featCparln1.dmi       || exit
runOK $INO/featCylndr1.dmi       || exit
runOK $INO/featCylradsegmnt1.dmi || exit
runOK $INO/featEdgept1.dmi       || exit
runOK $INO/featEllips1.dmi       || exit
runOK $INO/featElongcyl1.dmi     || exit
runOK $INO/featGcurve1.dmi       || exit
runOK $INO/featGeom1.dmi         || exit
runOK $INO/featGsurf1.dmi        || exit
runOK $INO/featLine1.dmi         || exit
runOK $INO/featObject1.dmi       || exit
runOK $INO/featParpln1.dmi       || exit
runOK $INO/featPatern1.dmi       || exit
runOK $INO/featPlane1.dmi        || exit
runOK $INO/featPoint1.dmi        || exit
runOK $INO/featRctngl1.dmi       || exit
runOK $INO/featRevsurf1.dmi      || exit
runOK $INO/featSphere1.dmi       || exit
runOK $INO/featSphradsegmnt1.dmi || exit
runOK $INO/featSympln1.dmi       || exit
runOK $INO/featTorradsegmnt1.dmi || exit
runOK $INO/featTorus1.dmi        || exit
runOK $INO/fedrat1.dmi           || exit
runOK $INO/fildef1.dmi           || exit
runOK $INO/filnam1.dmi           || exit
runOK $INO/finpos1.dmi           || exit
runOK $INO/fixtid1.dmi           || exit
runOK $INO/fixtsn1.dmi           || exit
runOK $INO/fly1.dmi              || exit
runOK $INO/from1.dmi             || exit
runOK $INO/geoalg1.dmi           || exit
runOK $INO/geoalg2.dmi           || exit
runOK $INO/geom1.dmi             || exit
runOK $INO/gohome1.dmi           || exit
runOK $INO/gotarg1.dmi           || exit
runOK $INO/goto1.dmi             || exit
runOK $INO/group1.dmi            || exit
runOK $INO/if1.dmi               || exit
runOK $INO/includ1.dmi           || exit
runOK $INO/iterat1.dmi           || exit
runOK $INO/jumpto1.dmi           || exit
runOK $INO/keychar1.dmi          || exit
runOK $INO/litdef1.dmi           || exit
runOK $INO/litdef2.dmi           || exit
runOK $INO/locate1.dmi           || exit
runOK $INO/lotid1.dmi            || exit
runOK $INO/macro1.dmi            || exit
runOK $INO/macro2.dmi            || exit
runOK $INO/macro3.dmi            || exit
runOK $INO/macro4.dmi            || exit
runOK $INO/macro5.dmi            || exit
runOK $INO/matdef1.dmi           || exit
runOK $INO/meas1.dmi             || exit
runOK $INO/meas2.dmi             || exit
runOK $INO/mfgdev1.dmi           || exit
runOK $INO/mode1.dmi             || exit
runOK $INO/obtain1.dmi           || exit
runOK $INO/obtainCT.dmi          || exit
runOK $INO/obtainIP.dmi          || exit
runOK $INO/obtainMC.dmi          || exit
runOK $INO/obtainQI.dmi          || exit
runOK $INO/obtainRY.dmi          || exit
runOK $INO/open1.dmi             || exit
runOK $INO/operid1.dmi           || exit
runOK $INO/output1.dmi           || exit
runOK $INO/pameas1.dmi           || exit
runOK $INO/partid1.dmi           || exit
runOK $INO/partrv1.dmi           || exit
runOK $INO/partsn1.dmi           || exit
runOK $INO/path1.dmi             || exit
runOK $INO/planid1.dmi           || exit
runOK $INO/pop1.dmi              || exit
runOK $INO/prcomp1.dmi           || exit
runOK $INO/prevop1.dmi           || exit
runOK $INO/procid1.dmi           || exit
runOK $INO/prompt1.dmi           || exit
runOK $INO/psthru1.dmi           || exit
runOK $INO/ptbuff1.dmi           || exit
runOK $INO/ptmeas1.dmi           || exit
runOK $INO/push1.dmi             || exit
runOK $INO/qisdef1.dmi           || exit
runOK $INO/rapid1.dmi            || exit
runOK $INO/read1.dmi             || exit
runOK $INO/recall1.dmi           || exit
runOK $INO/refmnt1.dmi           || exit
runOK $INO/report1.dmi           || exit
runOK $INO/resume1.dmi           || exit
runOK $INO/rmeas1.dmi            || exit
runOK $INO/rmeas2.dmi            || exit
runOK $INO/rmeas3.dmi            || exit
runOK $INO/rmeas4.dmi            || exit
runOK $INO/rmeas5.dmi            || exit
runOK $INO/rmeas6.dmi            || exit
runOK $INO/rmeas7.dmi            || exit
runOK $INO/rotab1.dmi            || exit
runOK $INO/rotate1.dmi           || exit
runOK $INO/rotdef1.dmi           || exit
runOK $INO/rotset1.dmi           || exit
runOK $INO/save1.dmi             || exit
runOK $INO/scnmod1.dmi           || exit
runOK $INO/scnset1.dmi           || exit
runOK $INO/scnset2.dmi           || exit
runOK $INO/select1.dmi           || exit
runOK $INO/sensor1.dmi           || exit
runOK $INO/simreqt1.dmi          || exit
runOK $INO/snsdef1.dmi           || exit
runOK $INO/snsdef2.dmi           || exit
runOK $INO/snsdef3.dmi           || exit
runOK $INO/snsdef4.dmi           || exit
runOK $INO/snsdef5.dmi           || exit
runOK $INO/snsdef6.dmi           || exit
runOK $INO/snset1.dmi            || exit
runOK $INO/snsgrp1.dmi           || exit
runOK $INO/snslct1.dmi           || exit
runOK $INO/snsmnt1.dmi           || exit
runOK $INO/tecomp1.dmi           || exit
runOK $INO/text1.dmi             || exit
runOK $INO/thldef1.dmi           || exit
runOK $INO/tolAngl1.dmi          || exit
runOK $INO/tolAnglB1.dmi         || exit
runOK $INO/tolAnglR1.dmi         || exit
runOK $INO/tolAnglWrt1.dmi       || exit
runOK $INO/tolCirlty1.dmi        || exit
runOK $INO/tolCompos1.dmi        || exit
runOK $INO/tolConcen1.dmi        || exit
runOK $INO/tolCortol1.dmi        || exit
runOK $INO/tolCprofl1.dmi        || exit
runOK $INO/tolCprofs1.dmi        || exit
runOK $INO/tolCrnout1.dmi        || exit
runOK $INO/tolCylcty1.dmi        || exit
runOK $INO/tolDiam1.dmi          || exit
runOK $INO/tolDistB1.dmi         || exit
runOK $INO/tolDistWrt1.dmi       || exit
runOK $INO/tolFlat1.dmi          || exit
runOK $INO/tolGtol1.dmi          || exit
runOK $INO/tolParlel1.dmi        || exit
runOK $INO/tolPerp1.dmi          || exit
runOK $INO/tolPos1.dmi           || exit
runOK $INO/tolProfl1.dmi         || exit
runOK $INO/tolProfp1.dmi         || exit
runOK $INO/tolProfs1.dmi         || exit
runOK $INO/tolRad1.dmi           || exit
runOK $INO/tolStrght1.dmi        || exit
runOK $INO/tolSym1.dmi           || exit
runOK $INO/tolTrnout1.dmi        || exit
runOK $INO/tolUsetol1.dmi        || exit
runOK $INO/tolWidth1.dmi         || exit
runOK $INO/tooldf1.dmi           || exit
runOK $INO/trans1.dmi            || exit
runOK $INO/uncertalg1.dmi        || exit
runOK $INO/uncertset1.dmi        || exit
runOK $INO/units1.dmi            || exit
runOK $INO/value1.dmi            || exit
runOK $INO/value2.dmi            || exit
runOK $INO/value3.dmi            || exit
runOK $INO/value4.dmi            || exit
runOK $INO/value5.dmi            || exit
runOK $INO/vform1.dmi            || exit
runOK $INO/windef1.dmi           || exit
runOK $INO/windef2.dmi           || exit
runOK $INO/wkplan1.dmi           || exit
runOK $INO/wrist1.dmi            || exit
runOK $INO/write1.dmi            || exit
runOK $INO/xtern1.dmi            || exit
runOK $INO/xtract1.dmi           || exit

# syntactically correct programs testing special features
runOK $INO/confusing.dmi         || exit
runOK $INO/exprsArith.dmi        || exit
runOK $INO/exprsLogic.dmi        || exit
runOK $INO/exprsVector.dmi       || exit
runOK $INO/funcsBool.dmi         || exit
runOK $INO/funcsChar.dmi         || exit
runOK $INO/funcsInt.dmi          || exit
runOK $INO/funcsReal.dmi         || exit
runOK $INO/funcsVec.dmi          || exit
runOK $INO/preTest1.dmi          || exit
runOK $INO/preTest2.dmi          || exit
runOK $INO/preTest3.dmi          || exit
runOK $INO/preTest4.dmi          || exit

rm junk1 junk2 junk1.back
