test.8 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. 00050 .PR POINT .PR
  2. 00100 .BEGIN
  3. 00110 .PRIO .CHECK = 1;
  4. 00120 .OP .CHECK = (.INT C, I).VOID:
  5. 00130 PRINT((C=I ! (WHOLE(I,0), NEWLINE) ! ("ERROR ", WHOLE(I,0), " SHOULD BE ", WHOLE(C,0), NEWLINE)));
  6. 00140 .OP .CHECK = ([] .INT C, A).VOID:
  7. 00150 PRINT((.LOC .BOOL FAIL := .FALSE;
  8. 00160 .FOR I .FROM .LWB A .TO .UPB A .DO FAIL := FAIL .OR A[I]/=C[I] .OD;
  9. 00170 FAIL ! ("ERROR", A, " SHOULD BE", C, NEWLINE) ! ( A, NEWLINE)));
  10. 00180 .MODE .R = .STRUCT(.INT O, P, Q);
  11. 00190 .MODE .S = .STRUCT(.INT I, J, K, .R R, .REF .INT RI1, RI2);
  12. 00200 .MODE .MA = [1:3].INT, .MB = [1:1].R, .MC = [1:2].REF .INT, .MD = [1:3,1:1].S;
  13. 00210 .LOC .INT I;
  14. 00220 .LOC .REF .INT II := I;
  15. 00230 .LOC .R R1;
  16. 00240 .LOC .REF .R RR := R1;
  17. 00250 .LOC.S S1, S2, S3;
  18. 00260 .LOC .MA M1, M2, M3, .LOC .MB MB1, MB2, .LOC .MC MC1, .LOC .MD MD1, MD2;
  19. 00270 .REF .R PR = R.OF S1, QR = R.OF S2;
  20. 00280 .REF .R PM = MB1[1], QM = MB2[1];
  21. 00290 .REF .REF .INT RRI = RI1 .OF S1;
  22. 00300 .REF .REF .INT MMI = MC1[1];
  23. 00310 .REF.INT RI = I.OF S1;
  24. 00320 .REF .INT MI = M1[1];
  25. 00330 #NASSTS(REFN)#
  26. 00340 I.OF S1 := 1; J.OF S1 := 2; K.OF S1 := 3;
  27. 00350 M1[1] := 1; M1[2] := 2; M1[3] := 3;
  28. 00360 #NASSTS(REFSE)#
  29. 00370 P .OF PR := 4;
  30. 00380 4 .CHECK P .OF R .OF S1;
  31. 00390 #NASSTS(REFSL1)#
  32. 00400 P .OF PM := 4;
  33. 00410 4 .CHECK P .OF MB1[1];
  34. 00420 #NASSTP#
  35. 00430 R.OF S2 := PR;
  36. 00440 4 .CHECK P.OF R.OF S2;
  37. 00450 MB2[1] := PM;
  38. 00460 4 .CHECK P .OF MB2[1];
  39. 00470 #TASSTS(REFSE)#
  40. 00480 RI := 1;
  41. 00490 1 .CHECK I.OF S1;
  42. 00500 #TASSTS(REFSL1)#
  43. 00510 MI := 1;
  44. 00520 1 .CHECK M1[1];
  45. 00530 #TASSTS(CREF)#
  46. 00540 .REF .INT (II) := 2;
  47. 00550 2 .CHECK I;
  48. 00560 #TASSTP(REFN), DREFN(REFN)#
  49. 00570 S3 := S2 := S1;
  50. 00580 3 .CHECK K.OF S3;
  51. 00590 #TASSTM(REFR), DREFN(REFR)#
  52. 00600 M3 := M2 := M1;
  53. 00610 [].INT(1,2,3) .CHECK M3;
  54. 00620 #REFSLN:=REFSLN#
  55. 00630 M1[1:2] := M1[2:3];
  56. 00640 [].INT(2,3,3) .CHECK M1;
  57. 00650 [] .INT MM1 = M1[@2];
  58. 00660 #REFR:=REFSLN#
  59. 00670 M2 := MM1[@1];
  60. 00680 M1[3] := 4; #FORCES COPY OF MM1#
  61. 00690 [].INT(2,3,3) .CHECK M2;
  62. 00700 #REFSLN:=REFR#
  63. 00710 M3[@2] := MM1;
  64. 00720 [].INT(2,3,3) .CHECK M3;
  65. 00730 #TASSTP(REFSE)#
  66. 00740 Q.OF R.OF S2 := 2;
  67. 00750 PR := QR;
  68. 00760 2 .CHECK Q.OF R.OF S1;
  69. 00770 #TASSTP(REFSL1)#
  70. 00780 MB2 := R .OF S2; #ROWNM#
  71. 00790 PM := QM;
  72. 00800 2 .CHECK Q .OF MB1[1];
  73. 00810 #NASSNS(REFN)#
  74. 00820 I.OF S1 := J.OF S2;
  75. 00830 2 .CHECK RI;
  76. 00840 #NASSNS(REFR)#
  77. 00850 M1[1] := M2[3];
  78. 00860 3 .CHECK MI;
  79. 00870 #NASSNS(REFSLN)#
  80. 00880 M1[2:3][1] := M1[3];
  81. 00890 [].INT(3,4,4) .CHECK M1;
  82. 00900 #NASSNP#
  83. 00910 Q.OF R.OF S2 := 1;
  84. 00920 R.OF S1 := R.OF S2;
  85. 00930 1 .CHECK Q.OF R.OF S1;
  86. 00940 Q .OF MB2[1] := 1;
  87. 00950 MB1[1] := MB2[1];
  88. 00960 1 .CHECK Q .OF MB1[1];
  89. 00970 #TASSNS#
  90. 00980 RI := K.OF S3;
  91. 00990 3 .CHECK RI;
  92. 01000 MI := M3[3];
  93. 01010 3 .CHECK MI;
  94. 01020 #TASSNP(REFN)#
  95. 01030 R1 := R.OF S1;
  96. 01040 4 .CHECK P.OF R1;
  97. 01050 R1 := MB1[1];
  98. 01060 4 .CHECK P .OF R1;
  99. 01070 #TASSNP(REFSE)#
  100. 01080 O.OF R.OF S3 := 3;
  101. 01090 PR := R .OF S3;
  102. 01100 3 .CHECK O.OF PR;
  103. 01110 #TASSNP(REFSL1)#
  104. 01120 O .OF MB2[1] := 3;
  105. 01130 PM := MB2[1];
  106. 01140 3 .CHECK O .OF PM;
  107. 01150 #TASSNP(CREF)#
  108. 01160 .REF .R (RR) := R .OF S3;
  109. 01170 3 .CHECK O .OF R1;
  110. 01180 .REF .R (RR) := MB2[1];
  111. 01190 3 .CHECK O .OF R1;
  112. 01200 #NASSTPT#
  113. 01210 RI2.OF S1 := RI;
  114. 01220 3 .CHECK RI2.OF S1;
  115. 01230 MC1[2] := MI;
  116. 01240 3 .CHECK MC1[2];
  117. 01250 #TASSTPT(REFSE)#
  118. 01260 RRI := RI;
  119. 01270 3 .CHECK RRI;
  120. 01280 MMI := MI;
  121. 01290 3 .CHECK MMI;
  122. 01300 #NASSNRF#
  123. 01310 RI2.OF S1 := J.OF S1;
  124. 01320 2 .CHECK RI2.OF S1;
  125. 01330 MC1[2] := M1[2];
  126. 01340 4 .CHECK MC1[2];
  127. 01350 #TASSNRF#
  128. 01360 RRI := O .OF PM;
  129. 01370 3 .CHECK RRI;
  130. 01380 MMI := M2[@2][2];
  131. 01390 2 .CHECK MMI;
  132. 01400 #2#
  133. 01410 #STRUCTURE-DISPLAYS#
  134. 01420 S1 := (1 #COLLTS# , 2, .SKIP, (3,4,5), RI #COLLTPT# , .NIL);
  135. 01430 1 .CHECK I .OF S1; 4 .CHECK P .OF R .OF S1; 1 .CHECK RI1 .OF S1;
  136. 01440 S2 := (J .OF S1 #COLLNS#, 3, .SKIP, R .OF S1 #COLLNP#, .SKIP, .SKIP);
  137. 01450 2 .CHECK I .OF S2; 3 .CHECK J .OF S2; 4 .CHECK P .OF R .OF S2;
  138. 01460 S2 := (J .OF S1 #COLLNS# , 3, .SKIP, R .OF S1 #COLLNP# , J .OF S1 #COLLNRF# , RI1 .OF S1);
  139. 01470 2 .CHECK I .OF S2; 3 .CHECK J .OF S2; 4 .CHECK P .OF R .OF S2; 2 .CHECK RI1 .OF S2; 1 .CHECK RI2 .OF S2;
  140. 01480 S3 := (1, 2, 3, R1 #COLLTP# , .NIL, .NIL);
  141. 01490 4 .CHECK P .OF R .OF S3;
  142. 01500 #ROWNM#
  143. 01510 MD1[1, ] := S1; MD1[2, ] := S2; MD1[3, ] := S3;
  144. 01520 [].INT(1,2,1) .CHECK I .OF MD1[ ,1];
  145. 01530 #INCR- AND DECRSLICE#
  146. 01540 MD1[2, ] := MD1[1, ];
  147. 01550 MD2 := MD1;
  148. 01560 1 .CHECK RI1 .OF MD2[2,1];
  149. 01570 #ROWM#
  150. 01580 .LOC [1:1,1:3] .S MD3;
  151. 01590 MD3 := MD2[ ,1];
  152. 01600 [].INT(1,1,1) .CHECK I .OF MD3[1, ];
  153. 01610 #LOC GENERATOR#
  154. 01620 II := .LOC .INT := 5;
  155. 01630 5 .CHECK II;
  156. 01640 .VOID:
  157. 01650 .BEGIN
  158. 01660 .MODE .CHAIN = .STRUCT(.INT VAL, .REF .CHAIN NEXT);
  159. 01670 .LOC .REF .CHAIN START := .LOC .CHAIN;
  160. 01680 .REF .CHAIN (START) :=
  161. 01690 (1, .LOC .CHAIN := (2, .LOC .CHAIN := (3, START)));
  162. 01700 .MODE .REFCHAIN = .REF .STRUCT(.INT VAL, .REF .STRUCT(.INT VAL, .REFCHAIN NEXT) NEXT);
  163. 01710 .LOC .REFCHAIN P := START;
  164. 01720 .FOR I .WHILE I .CHECK VAL .OF P; P := NEXT .OF P; .REF .CHAIN (P) .ISNT START .DO .SKIP .OD;
  165. 01730 START := P := .NIL
  166. 01740 #THE .CHAIN LOOP IS NOW ISOLATED, AND THE GARBAGE COLLECTOR SHOULD
  167. 01750 LOSE IT UPON EXIT FROM THIS ROUTINE#
  168. 01760 .END;
  169. 01770 .PROC T=.VOID:
  170. 01780 (.LOC.INT A:=0
  171. 01790 ;.PROC PC=(.PROC.VOID P).VOID:P
  172. 01800 ;.PROC P1=.VOID:
  173. 01810 (.PROC P2=.VOID:
  174. 01820 (A:=99)
  175. 01830 ;PC(P2)
  176. 01840 )
  177. 01850 ;PC(P1)
  178. 01860 ;99.CHECK A
  179. 01870 )
  180. 01880 ;T
  181. 01890 ; .LOC .INT III, J := 0
  182. 01900 ; [] .INT A0 = (9,9,9,9)
  183. 01910 ; .LOC [0:3] .INT A := A0[@0]
  184. 01920 ; START:
  185. 01930 III := 0
  186. 01940 ; J +:= 1
  187. 01950 ; .GOTO LOOP
  188. 01960 ; III := 1
  189. 01970 ; LOOP:
  190. 01980 A[III] := III
  191. 01990 ; .IF (III+:=1)=3
  192. 02000 .THEN .LOC .INT Y
  193. 02010 ; .GO .TO END
  194. 02020 .FI
  195. 02030 ; .GOTO LOOP
  196. 02040 ; END:
  197. 02050 [] .INT(0,1,2,9)[@0] .CHECK A
  198. 02060 ; A := A0[@0]
  199. 02070 ; .IF J<=1
  200. 02080 .THEN .GOTO START
  201. 02090 .FI
  202. 02100 ; 2 .CHECK J
  203. 02110 ; .PR NOWARN .PR
  204. 02120 ( .PROC P = (.STRING S1, .INT I1, .STRING S2, S3).INT: .SKIP
  205. 02130 ; 13 .CHECK 4+4+(1+1+.INT(.LOC .INT Y; (.FALSE ! .SKIP !
  206. 02140 1+1+2*2*(.LOC .INT X; .TRUE ! 1+1+2*2*3^2^P(""+"", 2, ""+"", .GOTO L))
  207. 02150 ))
  208. 02160 ; L: 5
  209. 02170 )
  210. 02180 ; .FOR I .TO 2 .DO
  211. 02190 50.CHECK .ROUND(100*.CASE I.IN SIN,COS.ESAC(PI*I/6))
  212. 02200 .OD
  213. 02210 .PR WARN .PR
  214. 02220 ; .PROC R = (.PROC .VOID Q, .INT LEVEL, .STRING ST).STRING:
  215. 02230 """"+ST+
  216. 02240 ( .STRING TS = ST+"."
  217. 02250 ; ( .PROC S = .VOID:
  218. 02260 ( .INT L = LEVEL
  219. 02270 ; L=5
  220. 02280 ! PRINT((R(.VOID:
  221. 02290 ( .LOC .STRING T; T +:= .STRING(.GOTO M))
  222. 02300 , LEVEL+1
  223. 02310 , TS
  224. 02320 ), NEWLINE))
  225. 02330 !: LEVEL=10 ! Q
  226. 02340 ! PRINT((R(Q, LEVEL+1, TS), NEWLINE))
  227. 02350 )
  228. 02360 ; S
  229. 02370 ; ";"
  230. 02380 )
  231. 02390 .EXIT
  232. 02400 M: "!"
  233. 02410 )
  234. 02420 ; PRINT((R(.SKIP, 0, ""), NEWLINE))
  235. 02430 ; .GOTO STOP
  236. 02440 )
  237. 02450 .END