<<>> <> <> <> <> <> <> DIRECTORY Cmplr8Mntr1Defs, Cmplr8Mntr2Defs, RunRegressions, XMesaProcs; XMesaCmplr8: PROGRAM IMPORTS Cmplr8Mntr1Defs, Cmplr8Mntr2Defs, RunRegressions, XMesaProcs = BEGIN filename: LONG STRING _ "XMesaCmplr8"L; XMesaCall8: PROCEDURE = { XMesaProcs.PrintCR; XMesaProcs.PrintS[filename]; XMesaProcs.PrintCR; XMesa8a[]; --FORK and JOIN XMesa8b[]; --FORK and JOIN cont'd XMesa8c[]; --MONITORS << This test is just plain broken - it's inherently timing dependent XMesa8d[]; --CV's >> XMesaProcs.PrintS["Done"L]; XMesaProcs.PrintCR; }; --end of XMesaCall8 XMesa8a: PROCEDURE = { --FORK and JOIN str: LONG STRING _ "This is a test of the FORK and JOIN constructs"; numOfChar, numOfSpace, numofA, numOfE: CARDINAL _ 0; p: PROCESS RETURNS [CARDINAL]; q: PROCESS RETURNS [CARDINAL, CARDINAL]; InspectString: PROCEDURE [s: LONG STRING] = BEGIN --Count how many letters the string contains p _ FORK CountSpaces[str]; numOfSpace _ 100; --test by setting the value arbitrarily numOfChar _ s.length; numOfSpace _ JOIN p; END; CheckForSpecials: PROCEDURE [s: LONG STRING] = BEGIN q _ FORK CountAandE[str]; numOfChar _ s.length; [numofA, numOfE] _ JOIN q; END; CountSpaces: PROCEDURE [s: LONG STRING] RETURNS [CARDINAL] = BEGIN --Count how many blank spaces the string contains c: CHARACTER; si: CARDINAL _ 0; num: CARDINAL _ 0; UNTIL si = s.length DO c _ s[si]; si _ si + 1; IF c = ' THEN num _ num + 1; ENDLOOP; RETURN[num]; END; CountAandE: PROCEDURE [s: LONG STRING] RETURNS [CARDINAL, CARDINAL] = BEGIN --Count how many blank spaces the string contains c: CHARACTER; si: CARDINAL _ 0; num1: CARDINAL _ 0; num2: CARDINAL _ 0; UNTIL si = s.length DO c _ s[si]; si _ si + 1; IF c = 'a THEN num1 _ num1 + 1; IF c = 'e THEN num2 _ num2 + 1; ENDLOOP; RETURN[num1, num2]; END; InspectString[str]; IF numOfChar # 46 THEN XMesaProcs.PutFailMessage[3810, filename]; IF numOfSpace # 9 THEN XMesaProcs.PutFailMessage[3830, filename]; numOfChar _ 0; CheckForSpecials[str]; IF numofA # 2 THEN XMesaProcs.PutFailMessage[3850, filename]; IF numOfE # 2 THEN XMesaProcs.PutFailMessage[3870, filename]; }; XMesa8b: PROCEDURE = { --FORK and JOIN cont'd flag1, flag2: BOOL _ FALSE; p: PROCESS; Proc1: PROCEDURE = {flag1 _ TRUE; }; p _ FORK Proc1; flag2 _ TRUE; JOIN p; IF flag2 # TRUE THEN XMesaProcs.PutFailMessage[3865, filename]; IF flag1 # TRUE THEN XMesaProcs.PutFailMessage[3875, filename]; }; XMesa8c: PROCEDURE = { --MONITORS p, q, r: PROCESS; flag: BOOL _ FALSE; proc1: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; END; proc2: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.Activate; END; proc3: PROCEDURE = BEGIN Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.DeActivate; END; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3890, filename]; p _ FORK proc1; Cmplr8Mntr1Defs.DeActivate; Cmplr8Mntr1Defs.DeActivate; JOIN p; flag _ FALSE; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3910, filename]; p _ FORK proc1; q _ FORK proc2; r _ FORK proc3; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.Activate; Cmplr8Mntr1Defs.DeActivate; JOIN p; JOIN q; JOIN r; flag _ FALSE; flag _ Cmplr8Mntr1Defs.Inspect[]; IF flag # TRUE THEN XMesaProcs.PutFailMessage[3930, filename]; }; XMesa8d: PROCEDURE = { newTicket: CARDINAL _ 0; p: PROCESS; FOR begin: INTEGER IN [0..10] DO newTicket _ Cmplr8Mntr2Defs.AllocateTicket[]; ENDLOOP; IF newTicket # 100 THEN XMesaProcs.PutFailMessage[3950, filename]; IF newTicket # Cmplr8Mntr2Defs.nullTicket THEN XMesaProcs.PutFailMessage[3980, filename]; IF Cmplr8Mntr2Defs.flag # TRUE THEN XMesaProcs.PutFailMessage[3990, filename]; Cmplr8Mntr2Defs.FreeTicket[]; p _ FORK Cmplr8Mntr2Defs.FreeTicket[]; newTicket _ Cmplr8Mntr2Defs.AllocateTicket[]; IF newTicket # Cmplr8Mntr2Defs.nullTicket THEN XMesaProcs.PutFailMessage[3995, filename]; JOIN p; IF newTicket # 9 THEN XMesaProcs.PutFailMessage[4000, filename]; IF Cmplr8Mntr2Defs.flag # FALSE THEN XMesaProcs.PutFailMessage[4010, filename]; }; <> RunRegressions.RegisterTest[XMesaCall8, "test8"]; END...