home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / COMP / TEST / COMPTSTS.M < prev    next >
Encoding:
Text File  |  1990-09-26  |  4.4 KB  |  282 lines

  1. MODULE CRAZY;
  2.  
  3. (* Declartion is legal, but the soft~wave compiler chrashes with bus error ! *)
  4. (* Megamax/Tempelmann Compiler is ok! *)
  5.  
  6. TYPE
  7.   pointer  = POINTER TO pointer;
  8.   empty    = RECORD
  9.              END;
  10.  
  11.   crazy    = PROCEDURE(crazy): crazy;
  12.   (*    at this point  ^  is an undefined name for TopSpeed Modula *)
  13.  
  14. BEGIN
  15. END CRAZY.
  16.  
  17. MODULE MultiCase;
  18.  
  19. VAR
  20.   c: CHAR;
  21.  
  22. BEGIN
  23.   CASE c OF
  24.   END;       (* empty case accepted by Megamax *)
  25.  
  26.   CASE c OF
  27.    'a'..'d': |
  28.    'c'..'e':
  29.      (* invalid case label found by the
  30.                   soft~wave,
  31.                   Megamax,
  32.                   TopSpeed
  33.               compilers
  34.      *)
  35.   END;
  36. END MultiCase.
  37.  
  38. MODULE FORupper;
  39.  
  40. FROM
  41.   InOut IMPORT WriteString, WriteLn, Read;
  42.  
  43.   PROCEDURE Wait;
  44.   VAR dummy: CHAR;
  45.   BEGIN
  46.     Read(dummy)
  47.   END Wait;
  48.  
  49. CONST
  50.   MaxLoops=10;
  51.  
  52. VAR
  53.   C, loops: CARDINAL;
  54.  
  55. BEGIN
  56.   C:=MaxLoops;
  57.   loops:=0;
  58.   WriteString('FOR variable in the upper limit'); WriteLn;
  59.   FOR C:=1 TO C DO
  60.     INC(loops);
  61.   END;
  62.  
  63.   IF loops=MaxLoops THEN
  64.     WriteString('OK')
  65.   ELSE
  66.     WriteString('Compiler error!')
  67.   END;
  68.   WriteLn;
  69.   Wait
  70. END FORupper.
  71.  
  72. MODULE IntArr;
  73.  
  74. VAR
  75.   c : INTEGER;
  76.   c1: ARRAY[1..1] OF INTEGER;
  77.  
  78. BEGIN
  79.   (* This is illegal, Compiler passed the test. *)
  80.   c1:=c;
  81. END IntArr.
  82.  
  83. MODULE LocModule;
  84.  
  85. TYPE
  86.   COLOR = (Red, Green, Blue);
  87.  
  88.   MODULE M1;
  89.   IMPORT COLOR;
  90.   EXPORT cmd;
  91.  
  92.     MODULE m2;
  93.     IMPORT COLOR;
  94.     EXPORT cmd;
  95.     TYPE
  96.       cmd = (NOP, GoUp, GoDown);
  97.     VAR
  98.       d: COLOR;
  99.     BEGIN
  100.        (* Addresse nich ansprechbar ???? *)
  101.       d:=Blue;
  102.     END m2;
  103.  
  104.   VAR c: COLOR;
  105.   VAR cc: cmd;
  106.   BEGIN
  107.     cc:=NOP;
  108.     c:=Red;
  109.   END M1;
  110.  
  111. VAR
  112.   cc: cmd;
  113.  
  114. BEGIN
  115.   cc:=NOP;
  116.   (* local Export/Import is OK *)
  117. END LocModule.
  118.  
  119. MODULE PtrArith;
  120.  
  121. FROM InOut IMPORT WriteCard, WriteLn;
  122.  
  123. VAR
  124.   p: POINTER TO INTEGER;
  125.  
  126. BEGIN
  127.   p:=NIL;
  128.   INC(p)
  129.   (* hier liefert soft~wave Modula 2, da TSIZE(INTEGER)=2 ist!
  130.      Diese Konvention finde ich besser als bei Megamax *)
  131.   ;
  132.   WriteCard(LONGCARD(p), 16); WriteLn;
  133. END PtrArith.
  134.  
  135. MODULE ShrtBool;
  136.  
  137. FROM InOut IMPORT WriteString, WriteLn;
  138.  
  139.   PROCEDURE P(Res, OK: BOOLEAN): BOOLEAN;
  140.   BEGIN
  141.     IF OK THEN
  142.       WriteString('OK')
  143.     ELSE
  144.       WriteString('Compiler error!!!')
  145.     END;
  146.     WriteLn;
  147.     RETURN Res;
  148.   END P;
  149.  
  150. BEGIN
  151.   WriteString('Short circuit boolean evaluation test'); WriteLn;
  152.   IF P(FALSE, TRUE) AND P(TRUE, FALSE) THEN
  153.   END;
  154.   IF P(TRUE, TRUE) OR P(FALSE, FALSE) THEN
  155.   END;
  156. END ShrtBool.
  157.  
  158. MODULE SubRange;
  159.  
  160. FROM
  161.   InOut IMPORT WriteInt;
  162.  
  163. TYPE
  164.   Positiv = INTEGER[0..32767];
  165.  
  166. VAR
  167.   I: Positiv;
  168.  
  169. BEGIN
  170.   (* FOR loop ist legal, der Megamax Compiler erzeugt falsches Range-Check
  171.      code!
  172.      TopSpeed Modula OK.
  173.      Turbo Pascal 5.0 meldet range-check schon beim Compilieren!
  174.   *)
  175.  
  176.   FOR I:=0 TO -1 DO
  177.     WriteInt(I, 10);
  178.   END
  179.  
  180. END SubRange.
  181.  
  182. MODULE FORcard;
  183.  
  184. CONST
  185.   LargeCard= MAX(CARDINAL)-1;
  186.  
  187. VAR
  188.   C: CARDINAL;
  189.  
  190. BEGIN
  191.   (*  Siehe Wirth §9.8 FOR-Anweisung : BY muß INTEGER oder CARDINAL-Konstante
  192.      sein! *)
  193.   FOR C:=0 TO MAX(CARDINAL) BY LargeCard DO
  194.   END
  195. END FORcard.
  196.  
  197. MODULE ProcVar2;
  198.  
  199. VAR
  200.   p: PROC;
  201.  
  202.   PROCEDURE Q;
  203.  
  204.     PROCEDURE E;
  205.     BEGIN
  206.     END E;
  207.  
  208.   BEGIN
  209.     (* Error Msg is OK! *)
  210.     p:=E;
  211.   END Q;
  212.  
  213. BEGIN
  214.   p();
  215. END ProcVar2.
  216.  
  217. MODULE FORtest;
  218.  
  219. FROM
  220.   InOut IMPORT WriteCard,WriteLn,WriteString,Read;
  221.  
  222. VAR
  223.   C, loops: CARDINAL;
  224.  
  225.   PROCEDURE Result(Res: BOOLEAN);
  226.   VAR
  227.     dummy: CHAR;
  228.   BEGIN
  229.     IF Res THEN
  230.       WriteString('OK')
  231.     ELSE
  232.       WriteString('Compiler Error')
  233.     END;
  234.     Read(dummy)
  235.   END Result;
  236.  
  237. BEGIN
  238.   loops:=0;
  239.   WriteString('FOR loop counter overflow test'); WriteLn;
  240.   FOR C:=0 TO MAX(CARDINAL) BY MAX(INTEGER) DO
  241.     INC(loops);
  242.     WriteCard(C,10); WriteLn
  243.   END;
  244.   Result(loops=3);
  245. END FORtest.
  246. MODULE SelfRef;
  247.  
  248. TYPE
  249.   (* illegal, soft~wave compiler: crash;
  250.               Megamax           : error msg (OK)
  251.               TopSpeed          : error msg (OK) *)
  252.   rec = rec;
  253.  
  254. BEGIN
  255. END SelfRef.
  256.  
  257. MODULE NonLocal;
  258.  
  259. CONST
  260.   a=1;
  261.  
  262.   PROCEDURE P();
  263.   CONST
  264.     a1=a;
  265.   (* following Pascal or Modula compiler dosn't find this error:
  266.       UCSD Pascal II.1 - IV.2
  267.       MT +
  268.       Turbo Pascal MSDOS
  269.       Gepard Modula
  270.       IBM Pascal/V
  271.       Megamax Modula
  272.       ...
  273.      Compiler signals the error:
  274.       soft~wave
  275.    *)
  276.     a =2;
  277.   BEGIN
  278.   END P;
  279.  
  280. BEGIN
  281. END NonLocal.
  282.