<<>> <> <> <> << The driver for three types of regression tests. Currently calls the procedures ModHa, ModHb, and ModHc. ModHa tests assignment and defaulting to VAR PROCEDUREs as well as passing and returning procedures with other procedures. ModHb tests some complicated record constructors. ModHc tests record extractors first with an emphasis on the left hand side and then on the right hand side. >> DIRECTORY RunRegressions, XMesaCmplr10Defs1, XMesaCmplr13Defs4, XMesaProcs; XMesaCmplr13h: PROGRAM IMPORTS RunRegressions, XMesaCmplr10Defs1, XMesaCmplr13Defs4, XMesaProcs = BEGIN filename: LONG STRING ¬ "ModH compiler tests."L; ModHCall: PROCEDURE = BEGIN XMesaProcs.PrintCR[]; XMesaProcs.PrintS[filename]; XMesaProcs.PrintCR[]; ModHa[]; --PROCEDURE variables ModHb[]; --RECORD constructors ModHc[]; --RECORD extractors XMesaProcs.PrintS["Done."L]; XMesaProcs.PrintCR[]; END; ModHa: PROCEDURE = --VAR procs, procs as param's, procs as results BEGIN XMesaProcs.Isequal[XMesaCmplr13Defs4.DefaultProc1[],1,600,"Def. Procedure 1"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.ReturnProc1[53][],1,601,"Def. Return Type11"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.PassProc1[XMesaCmplr13Defs4.DefaultProc1],1,602,"Def. Pass Type11"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.DefaultProc2[2],6,610,"Def. Procedure 2"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.ReturnProc2[53][2],6,611,"Def. Return Type22"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.PassProc2[XMesaCmplr13Defs4.DefaultProc2],6,612, "Def. Pass Type22"]; XMesaCmplr13Defs4.ProcVar1 ¬ XMesaCmplr13Defs4.Type11; XMesaProcs.Isequal[XMesaCmplr13Defs4.ProcVar1[],1,630,"ProcVar1 ¬ Type11"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.ReturnProc1[1][],1,631,"Return Type11"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.PassProc1[XMesaCmplr13Defs4.Type11],1,632,"Pass Type11"]; XMesaCmplr13Defs4.ProcVar1 ¬ XMesaCmplr13Defs4.Type12; XMesaProcs.Isequal[XMesaCmplr13Defs4.ProcVar1[],2,640,"ProcVar1 ¬ Type12"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.ReturnProc1[2][],2,641,"Return Type12"]; XMesaProcs.Isequal[XMesaCmplr13Defs4.PassProc1[XMesaCmplr13Defs4.Type12],2,642,"Pass Type12"]; XMesaCmplr13Defs4.ProcVar2 ¬ XMesaCmplr13Defs4.Type21; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.ProcVar2[2],4,650,"ProcVar2 ¬ Type21"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.ReturnProc2[1][2],4,651,"Return Type21"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.PassProc2[XMesaCmplr13Defs4.Type21],4,652,"Pass Type21"]; XMesaCmplr13Defs4.ProcVar2 ¬ XMesaCmplr13Defs4.Type22; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.ProcVar2[2],6,660,"ProcVar2 ¬ Type22"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.ReturnProc2[2][2],6,661,"Return Type22"]; XMesaProcs.IsCardequal[XMesaCmplr13Defs4.PassProc2[XMesaCmplr13Defs4.Type22],6,662,"Pass Type22"]; END; ModHb: PROCEDURE = BEGIN aBoringPR: XMesaCmplr13Defs4.PackedRec ¬ [ -- arm1 -- [' ,' ,' ], -- arm2 -- [1,1,1], -- arm3 -- [TRUE,TRUE,TRUE], -- arm4 -- [white,white,white], -- arm5 -- [[' ,' ,' ],[' ,' ,' ],[' ,' ,' ]] ]; all1PR: XMesaCmplr13Defs4.PackedRec ¬ [ -- arm1 -- ALL['a], -- arm2 -- ALL[2], -- arm3 -- ALL[FALSE], -- arm4 -- ALL[red], -- arm5 -- ALL[ALL['x]] ]; all2PR: XMesaCmplr13Defs4.PackedRec ¬ [ arm1: ALL[XMesaCmplr10Defs1.Getchar[]], arm2: all1PR.arm2, arm3: all1PR.arm3, arm4: all1PR.arm4, arm5: [ALL['x], ALL['y], ALL['z]] ]; aBoringRofR: XMesaCmplr13Defs4.RecOfRec ¬ [ -- arm1 -- TRUE, -- arm2 -- aBoringPR, -- arm3 -- [' , TRUE, white, aBoringPR] ]; aRofR: XMesaCmplr13Defs4.RecOfRec ¬ [ -- arm1 -- FALSE, -- arm2 -- [ ['c,'c,'c], [3,3,3], [FALSE,FALSE,FALSE], [blue,blue,blue], [['j,'j,'j], ['k,'k,'k], ['h,'h,'h]] ], -- arm3 -- [ -- a -- 'm, -- b -- FALSE, -- c -- red, -- PackedRec -- [ -- arm1 -- ['n,'n,'n], -- arm2 -- [5,5,5], -- arm3 -- [TRUE,TRUE,FALSE], -- arm4 -- [red,white,blue], -- arm5 -- [['k,'e,'v],['i,'n,'&],['t,'w,'o]] ] ] ]; thePR: XMesaCmplr13Defs4.PackedRec ¬ aBoringPR; theRofR: XMesaCmplr13Defs4.RecOfRec ¬ aBoringRofR; XMesaProcs.Ischarequal[thePR.arm1[1], ' , 700, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm1[3], ' , 701, "ModHb"L]; IF thePR.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[702, "ModHb"L]; IF thePR.arm2[3] # 1 THEN XMesaProcs.PutFailMessage[703, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[1],TRUE, 704, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[3],TRUE, 705, "ModHb"L]; IF thePR.arm4[1] # white THEN XMesaProcs.PutFailMessage[706, "ModHb"L]; IF thePR.arm4[3] # white THEN XMesaProcs.PutFailMessage[707, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[1][1], ' , 708, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[3][3], ' , 709, "ModHb"L]; thePR ¬ all1PR; XMesaProcs.Ischarequal[thePR.arm1[1], 'a, 710, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm1[3], 'a, 711, "ModHb"L]; IF thePR.arm2[1] # 2 THEN XMesaProcs.PutFailMessage[712, "ModHb"L]; IF thePR.arm2[3] # 2 THEN XMesaProcs.PutFailMessage[713, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[1],FALSE, 714, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[3],FALSE, 715, "ModHb"L]; IF thePR.arm4[1] # red THEN XMesaProcs.PutFailMessage[716, "ModHb"L]; IF thePR.arm4[3] # red THEN XMesaProcs.PutFailMessage[717, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[1][1], 'x, 718, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[3][3], 'x, 719, "ModHb"L]; thePR ¬ all2PR; XMesaProcs.Ischarequal[thePR.arm1[1], 'b, 720, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm1[3], 'b, 721, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[1],FALSE, 724, "ModHb"L]; XMesaProcs.Isboolequal[thePR.arm3[3],FALSE, 725, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[1][1], 'x, 728, "ModHb"L]; XMesaProcs.Ischarequal[thePR.arm5[3][3], 'z, 729, "ModHb"L]; <> XMesaProcs.Isboolequal[theRofR.arm1, TRUE, 740, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm1[1], ' , 740, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm1[3], ' , 741, "ModHb"L]; IF theRofR.arm2.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[742, "ModHb"L]; IF theRofR.arm2.arm2[3] # 1 THEN XMesaProcs.PutFailMessage[743, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm2.arm3[1],TRUE, 744, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm2.arm3[3],TRUE, 745, "ModHb"L]; IF theRofR.arm2.arm4[1] # white THEN XMesaProcs.PutFailMessage[746, "ModHb"L]; IF theRofR.arm2.arm4[3] # white THEN XMesaProcs.PutFailMessage[747, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm5[1][1], ' , 748, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm5[3][3], ' , 749, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.a, ' , 750, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.b,TRUE, 751, "ModHb"L]; IF theRofR.arm3.c # white THEN XMesaProcs.PutFailMessage[752, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm1[1], ' , 750, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm1[3], ' , 751, "ModHb"L]; IF theRofR.arm3.p.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[752, "ModHb"L]; IF theRofR.arm3.p.arm2[3] # 1 THEN XMesaProcs.PutFailMessage[753, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.p.arm3[1],TRUE, 754, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.p.arm3[3],TRUE, 755, "ModHb"L]; IF theRofR.arm3.p.arm4[1] # white THEN XMesaProcs.PutFailMessage[756, "ModHb"L]; IF theRofR.arm3.p.arm4[3] # white THEN XMesaProcs.PutFailMessage[757, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm5[1][1], ' , 758, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm5[3][3], ' , 759, "ModHb"L]; theRofR ¬ aRofR; XMesaProcs.Isboolequal[theRofR.arm1, FALSE, 760, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm1[1], 'c, 760, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm1[3], 'c, 761, "ModHb"L]; IF theRofR.arm2.arm2[1] # 3 THEN XMesaProcs.PutFailMessage[762, "ModHb"L]; IF theRofR.arm2.arm2[3] # 3 THEN XMesaProcs.PutFailMessage[763, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm2.arm3[1],FALSE, 764, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm2.arm3[3],FALSE, 765, "ModHb"L]; IF theRofR.arm2.arm4[1] # blue THEN XMesaProcs.PutFailMessage[766, "ModHb"L]; IF theRofR.arm2.arm4[3] # blue THEN XMesaProcs.PutFailMessage[767, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm5[1][1], 'j, 768, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm2.arm5[3][3], 'h, 769, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.a, 'm, 770, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.b,FALSE, 771, "ModHb"L]; IF theRofR.arm3.c # red THEN XMesaProcs.PutFailMessage[772, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm1[1], 'n, 770, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm1[3], 'n, 771, "ModHb"L]; IF theRofR.arm3.p.arm2[1] # 5 THEN XMesaProcs.PutFailMessage[772, "ModHb"L]; IF theRofR.arm3.p.arm2[3] # 5 THEN XMesaProcs.PutFailMessage[773, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.p.arm3[1],TRUE, 774, "ModHb"L]; XMesaProcs.Isboolequal[theRofR.arm3.p.arm3[3],FALSE, 775, "ModHb"L]; IF theRofR.arm3.p.arm4[1] # red THEN XMesaProcs.PutFailMessage[776, "ModHb"L]; IF theRofR.arm3.p.arm4[3] # blue THEN XMesaProcs.PutFailMessage[777, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm5[1][1], 'k, 778, "ModHb"L]; XMesaProcs.Ischarequal[theRofR.arm3.p.arm5[3][3], 'o, 779, "ModHb"L]; END; ModHc: PROCEDURE = BEGIN aPSR: XMesaCmplr13Defs4.PointerSizeRec ¬ [2, 'b, 'e]; bPSR: XMesaCmplr13Defs4.PointerSizeRec ¬ [4, 'd, 'j]; aPSRPointer: XMesaCmplr13Defs4.PSRPointer ¬ @aPSR; arrayOfPSR: XMesaCmplr13Defs4.ArrayOfPSR ¬ ALL[bPSR]; aBoringPR: XMesaCmplr13Defs4.PackedRec ¬ [ -- arm1 -- [' ,' ,' ], -- arm2 -- [1,1,1], -- arm3 -- [TRUE,TRUE,TRUE], -- arm4 -- [white,white,white], -- arm5 -- [[' ,' ,' ],[' ,' ,' ],[' ,' ,' ]] ]; aBoringRofR: XMesaCmplr13Defs4.RecOfRec ¬ [ -- arm1 -- TRUE, -- arm2 -- aBoringPR, -- arm3 -- [' , TRUE, white, aBoringPR] ]; a1,a2,a11: XMesaCmplr13Defs4.PA1; a3,a4,a12: XMesaCmplr13Defs4.PA2; a5,a6,a13: XMesaCmplr13Defs4.PA3; a7,a14: XMesaCmplr13Defs4.PA4; a9,a15: XMesaCmplr13Defs4.PA5; b1,b2,b3,b4: BOOLEAN; c1,c2: XMesaCmplr13Defs4.Color; ch1,ch2,ch3,ch4,--ch5,ch6,--ch7,ch8, ch9,ch10,ch11: CHAR; ch12,ch13,ch14,ch15,ch16,ch17,ch18--,ch19,ch20--: CHAR; i1,--i2,-- i3, i4,i5,i6,i7,i8--,i9--: INTEGER; <> <> r1,r2,r3: XMesaCmplr13Defs4.PackedRec; ReturnPSR: PROCEDURE RETURNS [r: XMesaCmplr13Defs4.PointerSizeRec] = { RETURN [aPSR]; }; RetPSRPoint: PROCEDURE RETURNS [p: XMesaCmplr13Defs4.PSRPointer] = { RETURN [aPSRPointer]; }; ReturnBoringPR: PROCEDURE RETURNS [r: XMesaCmplr13Defs4.PackedRec] = { RETURN [aBoringPR]; }; <> [a1, a3, a5, a7, a9] ¬ aBoringPR; [b1, r1, [ch1, b2, c1, r2]] ¬ aBoringRofR; [b3, r3, [ch2, b4, c2, [a2, a4, a6]]] ¬ aBoringRofR; XMesaProcs.Ischarequal[a1[1],' ,800, "ModHc"L]; IF a3[1] # 1 THEN XMesaProcs.PutFailMessage[801, "ModHc"L]; XMesaProcs.Isboolequal[a5[1], TRUE, 802, "ModHc"L]; IF a7[1] # white THEN XMesaProcs.PutFailMessage[803, "ModHc"L]; XMesaProcs.Ischarequal[a9[1][1],' ,804, "ModHc"L]; XMesaProcs.Ischarequal[a9[3][3],' ,805, "ModHc"L]; XMesaProcs.Isboolequal[b1, TRUE, 810, "ModHc"L]; XMesaProcs.Ischarequal[r1.arm1[1], ' , 811, "ModHc"L]; IF r1.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[812, "ModHc"L]; XMesaProcs.Isboolequal[r1.arm3[1],TRUE, 813, "ModHc"L]; IF r1.arm4[1] # white THEN XMesaProcs.PutFailMessage[814, "ModHc"L]; XMesaProcs.Ischarequal[r1.arm5[1][1], ' , 815, "ModHc"L]; XMesaProcs.Ischarequal[r1.arm5[3][3], ' , 816, "ModHc"L]; XMesaProcs.Ischarequal[ch1, ' ,817, "ModHc"L]; XMesaProcs.Isboolequal[b2, TRUE, 818, "ModHc"L]; IF c1 # white THEN XMesaProcs.PutFailMessage[819, "ModHc"L]; XMesaProcs.Ischarequal[r2.arm1[1], ' , 820, "ModHc"L]; IF r2.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[821, "ModHc"L]; XMesaProcs.Isboolequal[r2.arm3[1],TRUE, 822, "ModHc"L]; IF r2.arm4[1] # white THEN XMesaProcs.PutFailMessage[823, "ModHc"L]; XMesaProcs.Ischarequal[r2.arm5[1][1], ' , 824, "ModHc"L]; XMesaProcs.Ischarequal[r2.arm5[3][3], ' , 825, "ModHc"L]; XMesaProcs.Isboolequal[b3, TRUE, 830, "ModHc"L]; XMesaProcs.Ischarequal[r3.arm1[1], ' , 831, "ModHc"L]; IF r3.arm2[1] # 1 THEN XMesaProcs.PutFailMessage[832, "ModHc"L]; XMesaProcs.Isboolequal[r3.arm3[1],TRUE, 833, "ModHc"L]; IF r3.arm4[1] # white THEN XMesaProcs.PutFailMessage[834, "ModHc"L]; XMesaProcs.Ischarequal[r3.arm5[1][1], ' , 835, "ModHc"L]; XMesaProcs.Ischarequal[r3.arm5[3][3], ' , 836, "ModHc"L]; XMesaProcs.Ischarequal[ch2, ' ,837, "ModHc"L]; XMesaProcs.Isboolequal[b4, TRUE, 838, "ModHc"L]; IF c2 # white THEN XMesaProcs.PutFailMessage[839, "ModHc"L]; XMesaProcs.Ischarequal[a2[1], ' , 840, "ModHc"L]; IF a4[1] # 1 THEN XMesaProcs.PutFailMessage[841, "ModHc"L]; XMesaProcs.Isboolequal[a6[1],TRUE, 842, "ModHc"L]; <> [[a11, a12, a13, a14, a15]] ¬ ReturnBoringPR[]; [[i1, ch3, ch4]] ¬ ReturnPSR[]; <<[i2, ch5, ch6] ¬ LOOPHOLE [lp, XMesaCmplr13Defs4.PointerSizeRec]; This is a bogus test>> [i3, ch7, ch8] ¬ IF XMesaCmplr10Defs1.Getb[] THEN aPSR ELSE bPSR; [i4, ch9, ch10] ¬ RetPSRPoint[]­; [i5, ch11, ch12] ¬ arrayOfPSR[2]; [i6, ch13, ch14] ¬ XMesaCmplr13Defs4.PointerSizeRec[XMesaCmplr10Defs1.Geti[], XMesaCmplr10Defs1.Getchar[],XMesaCmplr10Defs1.Getchar[]]; [i7, ch15, ch16] ¬ bPSR ¬ RetPSRPoint[]­; --bPSR is changed to aPSR here [[i8, ch17, ch18]] ¬ XMesaCmplr13Defs4.InlineRetPSR[aPSR]; <<[i9, ch19, ch20] ¬ LOOPHOLE [li, XMesaCmplr13Defs4.PointerSizeRec]; bogus test>> <> XMesaProcs.Ischarequal[a11[1],' ,850, "ModHc"L]; IF a12[1] # 1 THEN XMesaProcs.PutFailMessage[851, "ModHc"L]; XMesaProcs.Isboolequal[a13[1], TRUE, 852, "ModHc"L]; IF a14[1] # white THEN XMesaProcs.PutFailMessage[853, "ModHc"L]; XMesaProcs.Ischarequal[a15[1][1],' ,854, "ModHc"L]; XMesaProcs.Ischarequal[a15[3][3],' ,855, "ModHc"L]; <> XMesaProcs.Isequal[i1, 2, 860, "ModHc"L]; XMesaProcs.Ischarequal[ch3, 'b, 861, "ModHc"L]; XMesaProcs.Ischarequal[ch4, 'e, 862, "ModHc"L]; <> <> <> XMesaProcs.Isequal[i3, 4, 880, "ModHc"L]; XMesaProcs.Ischarequal[ch7, 'd, 881, "ModHc"L]; XMesaProcs.Ischarequal[ch8, 'j, 882, "ModHc"L]; <> XMesaProcs.Isequal[i4, 2, 890, "ModHc"L]; XMesaProcs.Ischarequal[ch9, 'b, 891, "ModHc"L]; XMesaProcs.Ischarequal[ch10, 'e, 892, "ModHc"L]; <> XMesaProcs.Isequal[i5, 4, 900, "ModHc"L]; XMesaProcs.Ischarequal[ch11, 'd, 901, "ModHc"L]; XMesaProcs.Ischarequal[ch12, 'j, 902, "ModHc"L]; <> XMesaProcs.Isequal[i6, 2, 910, "ModHc"L]; XMesaProcs.Ischarequal[ch13, 'b, 911, "ModHc"L]; XMesaProcs.Ischarequal[ch14, 'b, 912, "ModHc"L]; <> XMesaProcs.Isequal[i7, 2, 920, "ModHc"L]; XMesaProcs.Ischarequal[ch15, 'b, 921, "ModHc"L]; XMesaProcs.Ischarequal[ch16, 'e, 922, "ModHc"L]; <> XMesaProcs.Isequal[i8, 2, 930, "ModHc"L]; XMesaProcs.Ischarequal[ch17, 'b, 931, "ModHc"L]; XMesaProcs.Ischarequal[ch18, 'e, 932, "ModHc"L]; <> << Bogus test XMesaProcs.Isequal[i9, 4, 940, "ModHc"L]; XMesaProcs.Ischarequal[ch19, 'd, 941, "ModHc"L]; XMesaProcs.Ischarequal[ch20, 'j, 942, "ModHc"L]; >> END; RunRegressions.RegisterTest[ModHCall, "test13"] END.