123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808 |
- # Math Array Exeuction Test Suite
- # options --mayTrap --prolog="Compiler.Compile TesterInput.txt" --command="System.Free Test Dummy B A;System.Load Test" --logFile="FoxExecutionTest.Log" --result="MathArrays.Execution.Test.Diff"
- positive: DIM and LEN
- MODULE Test;
- VAR
- v1: ARRAY [*] OF INTEGER;
- v2: ARRAY [*,*] OF INTEGER;
- v3: ARRAY [*,*,*] OF INTEGER;
- t1,t2,t3: ARRAY [?] OF INTEGER;
- s1: ARRAY [3] OF INTEGER;
- s2: ARRAY [3,4] OF INTEGER;
- s3: ARRAY [3,4,5] OF INTEGER;
- h2: ARRAY [*,4] OF INTEGER;
- h3: ARRAY [*,*,5] OF INTEGER;
- BEGIN
- NEW(v1,3); NEW(v2,3,4); NEW(v3,3,4,5);
- NEW(t1,3); NEW(t2,3,4); NEW(t3,3,4,5);
- NEW(h2,3); NEW(h3,3,4);
- ASSERT(DIM(v1)=1); ASSERT(DIM(v2)=2); ASSERT(DIM(v3)=3);
- ASSERT(DIM(t1)=1); ASSERT(DIM(t2)=2); ASSERT(DIM(t3)=3);
- ASSERT(DIM(s1)=1); ASSERT(DIM(s2)=2); ASSERT(DIM(s3)=3);
- ASSERT(DIM(h2)=2); ASSERT(DIM(h3)=3);
- ASSERT(LEN(v1,0)=3);
- ASSERT(LEN(v2,0)=3); ASSERT(LEN(v2,1)=4);
- ASSERT(LEN(v3,0)=3); ASSERT(LEN(v3,1)=4); ASSERT(LEN(v3,2)=5);
- ASSERT(LEN(t1,0)=3);
- ASSERT(LEN(t2,0)=3); ASSERT(LEN(t2,1)=4);
- ASSERT(LEN(t3,0)=3); ASSERT(LEN(t3,1)=4); ASSERT(LEN(t3,2)=5);
- ASSERT(LEN(s1,0)=3);
- ASSERT(LEN(s2,0)=3); ASSERT(LEN(s2,1)=4);
- ASSERT(LEN(s3,0)=3); ASSERT(LEN(s3,1)=4); ASSERT(LEN(s3,2)=5);
- ASSERT(LEN(h2,0)=3); ASSERT(LEN(h2,1)=4);
- ASSERT(LEN(h3,0)=3); ASSERT(LEN(h3,1)=4); ASSERT(LEN(h3,2)=5);
- END Test.
- positive: assignment and equality, dynamic arrays
- MODULE Test;
- VAR
- v1: ARRAY [*] OF INTEGER;
- v2: ARRAY [*,*] OF INTEGER;
- v3: ARRAY [*,*,*] OF INTEGER;
- BEGIN
- v1 := [1,2,3];
- v2 := [[1,2,3],[4,5,6],[7,8,9]];
- v3 := [
- [[1,2,3],[4,5,6],[7,8,9]],
- [[11,12,13],[14,15,16],[17,18,19]]
- ];
- ASSERT(v1=[1,2,3]);
- ASSERT(v2=[[1,2,3],[4,5,6],[7,8,9]]);
- ASSERT(v3=[
- [[1,2,3],[4,5,6],[7,8,9]],
- [[11,12,13],[14,15,16],[17,18,19]]
- ]);
- END Test.
-
- negative: assignment and equality, one dimensional dynamic arrays
- MODULE Test;
- VAR
- v1: ARRAY [*] OF INTEGER;
- BEGIN
- v1 := [1,2,3];
- ASSERT(v1=[1,2,4]);
- END Test.
- negative: assignment and equality, two dimensional dynamic arrays
- MODULE Test;
- VAR
- v2: ARRAY [*,*] OF INTEGER;
- BEGIN
- v2 := [[1,2,3],[4,5,6],[7,8,9]];
- ASSERT(v2=[[1,2,3],[40,5,6],[7,8,9]]);
- END Test.
-
- positive: assignment and equality, tensor
- MODULE Test;
- VAR
- v1: ARRAY [?] OF INTEGER;
- v2: ARRAY [?] OF INTEGER;
- v3: ARRAY [?] OF INTEGER;
- BEGIN
- v1 := [1,2,3];
- v2 := [[1,2,3],[4,5,6],[7,8,9]];
- v3 := [
- [[1,2,3],[4,5,6],[7,8,9]],
- [[11,12,13],[14,15,16],[17,18,19]]
- ];
- ASSERT(v1=[1,2,3]);
- ASSERT(v2=[[1,2,3],[4,5,6],[7,8,9]]);
- ASSERT(v3=[
- [[1,2,3],[4,5,6],[7,8,9]],
- [[11,12,13],[14,15,16],[17,18,19]]
- ]);
- END Test.
-
- negative: assignment and equality, one dimensional tensor
- MODULE Test;
- VAR
- v1: ARRAY [?] OF INTEGER;
- BEGIN
- v1 := [1,2,3];
- ASSERT(v1=[1,2,4]);
- END Test.
- negative: assignment and equality, two dimensional tensor
- MODULE Test;
- VAR
- v2: ARRAY [?] OF INTEGER;
- BEGIN
- v2 := [[1,2,3],[4,5,6],[7,8,9]];
- ASSERT(v2=[[1,2,3],[40,5,6],[7,8,9]]);
- END Test.
- positive: initialization of math arrays during module initialization and during allocation
- MODULE Test;
- TYPE
- Record = RECORD
- v: ARRAY [*] OF INTEGER;
- r: RECORD
- v: ARRAY [*] OF INTEGER
- END;
- a: ARRAY 2 OF RECORD
- v: ARRAY [*] OF INTEGER
- END;
- END;
- Pointer= POINTER TO Record;
- VAR
- v: ARRAY [*] OF INTEGER;
- r: Record;
- p: Pointer;
- BEGIN
- v := [1,2,3];
- r.v := [1,2,3]; ASSERT(r.v = v);
- r.r.v := [1,2,3]; ASSERT( r.r.v = v);
- r.a[1].v := [1,2,3]; ASSERT(r.a[1].v = v);
- NEW(p);
- p.v := [1,2,3]; ASSERT(p.v = v);
- p.r.v := [1,2,3]; ASSERT( p.r.v = v);
- p.a[1].v := [1,2,3]; ASSERT(p.a[1].v = v);
- END Test.
-
- positive: test driver
- MODULE Driver;
- IMPORT Random,Debugging;
- VAR gen: Random.Generator;
- PROCEDURE FillS0(VAR a: ARRAY [?] OF SHORTINT; base: SHORTINT);
- VAR i: SHORTINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO a[i] := 10*base+i END;
- ELSE
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO FillS0(a[i,?],10*base+i) END;
- END;
- END FillS0;
- PROCEDURE FillS*(VAR a: ARRAY [?] OF SHORTINT);
- BEGIN FillS0(a,0);
- END FillS;
- PROCEDURE TestFillS0*(CONST a: ARRAY [?] OF SHORTINT; base: SHORTINT);
- VAR i: SHORTINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO ASSERT(a[i] = 10*base+i) END;
- ELSE
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO TestFillS0(a[i,?],10*base+i) END;
- END;
- END TestFillS0;
- PROCEDURE TestS1*(CONST a: ARRAY [*] OF SHORTINT; r: RANGE);
- VAR i: LONGINT;
- BEGIN
- i := FIRST(r); WHILE i <= LAST(r) DO
- ASSERT(a[(i-FIRST(r)) DIV STEP(r)]=SHORTINT(i));
- INC(i,STEP(r));
- END;
- END TestS1;
- PROCEDURE TestS2*(CONST a: ARRAY [*,*] OF SHORTINT; r1, r2: RANGE);
- VAR i,j: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2)]=SHORTINT(10*i+j));
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestS2;
- PROCEDURE TestS3*(CONST a: ARRAY [*,*,*] OF SHORTINT; r1, r2, r3: RANGE);
- VAR i,j,k: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- k := FIRST(r3); WHILE k <= LAST(r3) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2),(k-FIRST(r3)) DIV STEP(r3)]=SHORTINT(100*i+10*j+k));
- INC(k,STEP(r3)) END;
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestS3;
- PROCEDURE TestFillS*(CONST a: ARRAY [?] OF SHORTINT);
- BEGIN
- TestFillS0(a,0)
- END TestFillS;
- PROCEDURE RandomS*(VAR a: ARRAY [?] OF SHORTINT);
- VAR i: SHORTINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO a[i] := SHORTINT(gen.Dice(1000)) END;
- ELSE
- FOR i := 0 TO SHORTINT(LEN(a,0)-1) DO RandomS(a[i,?]) END;
- END;
- END RandomS;
- PROCEDURE FillI0(VAR a: ARRAY [?] OF INTEGER; base: INTEGER);
- VAR i: INTEGER;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO a[i] := 10*base+i END;
- ELSE
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO FillI0(a[i,?],10*base+i) END;
- END;
- END FillI0;
- PROCEDURE FillI*(VAR a: ARRAY [?] OF INTEGER);
- BEGIN FillI0(a,0);
- END FillI;
- PROCEDURE TestFillI0*(CONST a: ARRAY [?] OF INTEGER; base: INTEGER);
- VAR i: INTEGER;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO ASSERT(a[i] = 10*base+i) END;
- ELSE
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO TestFillI0(a[i,?],10*base+i) END;
- END;
- END TestFillI0;
- PROCEDURE TestFillI*(CONST a: ARRAY [?] OF INTEGER);
- BEGIN
- TestFillI0(a,0)
- END TestFillI;
- PROCEDURE RandomI*(VAR a: ARRAY [?] OF INTEGER);
- VAR i: INTEGER;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO a[i] := INTEGER(gen.Dice(1000)) END;
- ELSE
- FOR i := 0 TO INTEGER(LEN(a,0)-1) DO RandomI(a[i,?]) END;
- END;
- END RandomI;
- PROCEDURE TestI1*(CONST a: ARRAY [*] OF INTEGER; r: RANGE);
- VAR i: LONGINT;
- BEGIN
- i := FIRST(r); WHILE i <= LAST(r) DO
- ASSERT(a[(i-FIRST(r)) DIV STEP(r)]=INTEGER(i));
- INC(i,STEP(r));
- END;
- END TestI1;
- PROCEDURE TestI2*(CONST a: ARRAY [*,*] OF INTEGER; r1, r2: RANGE);
- VAR i,j: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2)]=INTEGER(10*i+j));
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestI2;
- PROCEDURE TestI3*(CONST a: ARRAY [*,*,*] OF INTEGER; r1, r2, r3: RANGE);
- VAR i,j,k: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- k := FIRST(r3); WHILE k <= LAST(r3) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2),(k-FIRST(r3)) DIV STEP(r3)]=INTEGER(100*i+10*j+k));
- INC(k,STEP(r3)) END;
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestI3;
- PROCEDURE FillL0(VAR a: ARRAY [?] OF LONGINT; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := 10*base+i END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO FillL0(a[i,?],10*base+i) END;
- END;
- END FillL0;
- PROCEDURE FillL*(VAR a: ARRAY [?] OF LONGINT);
- BEGIN FillL0(a,0);
- END FillL;
- PROCEDURE TestFillL0*(CONST a: ARRAY [?] OF LONGINT; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO ASSERT(a[i] = 10*base+i) END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO TestFillL0(a[i,?],10*base+i) END;
- END;
- END TestFillL0;
- PROCEDURE TestFillL*(CONST a: ARRAY [?] OF LONGINT);
- BEGIN
- TestFillL0(a,0)
- END TestFillL;
- PROCEDURE RandomL*(VAR a: ARRAY [?] OF LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := gen.Dice(1000) END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO RandomL(a[i,?]) END;
- END;
- END RandomL;
- PROCEDURE TestL1*(CONST a: ARRAY [*] OF LONGINT; r: RANGE);
- VAR i: LONGINT;
- BEGIN
- i := FIRST(r); WHILE i <= LAST(r) DO
- ASSERT(a[(i-FIRST(r)) DIV STEP(r)]=LONGINT(i));
- INC(i,STEP(r));
- END;
- END TestL1;
- PROCEDURE TestL2*(CONST a: ARRAY [*,*] OF LONGINT; r1, r2: RANGE);
- VAR i,j: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2)]=LONGINT(10*i+j));
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestL2;
- PROCEDURE TestL3*(CONST a: ARRAY [*,*,*] OF LONGINT; r1, r2, r3: RANGE);
- VAR i,j,k: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- k := FIRST(r3); WHILE k <= LAST(r3) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2),(k-FIRST(r3)) DIV STEP(r3)]=LONGINT(100*i+10*j+k));
- INC(k,STEP(r3)) END;
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestL3;
- PROCEDURE FillX0(VAR a: ARRAY [?] OF LONGREAL; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := 10*base+i END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO FillX0(a[i,?],10*base+i) END;
- END;
- END FillX0;
- PROCEDURE FillX*(VAR a: ARRAY [?] OF LONGREAL);
- BEGIN FillX0(a,0);
- END FillX;
- PROCEDURE TestFillX0*(CONST a: ARRAY [?] OF LONGREAL; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO ASSERT(ENTIER(a[i]+0.5) = 10*base+i) END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO TestFillX0(a[i,?],10*base+i) END;
- END;
- END TestFillX0;
- PROCEDURE TestFillX*(CONST a: ARRAY [?] OF LONGREAL);
- BEGIN
- TestFillX0(a,0);
- END TestFillX;
- PROCEDURE RandomX*(VAR a: ARRAY [?] OF LONGREAL);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := gen.Uniform() END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO RandomX(a[i,?]) END;
- END;
- END RandomX;
- PROCEDURE PrintX*(CONST a: ARRAY [?] OF LONGREAL);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO Debugging.Int(ENTIER(a[i]+0.5),5) END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO PrintX(a[i,?]); Debugging.Ln; END;
- END;
- END PrintX;
- PROCEDURE TestX1*(CONST a: ARRAY [*] OF LONGREAL; r: RANGE);
- VAR i: LONGINT;
- BEGIN
- i := FIRST(r); WHILE i <= LAST(r) DO
- ASSERT(a[(i-FIRST(r)) DIV STEP(r)]=LONGREAL(i));
- INC(i,STEP(r));
- END;
- END TestX1;
- PROCEDURE TestX2*(CONST a: ARRAY [*,*] OF LONGREAL; r1, r2: RANGE);
- VAR i,j: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2)]=LONGREAL(10*i+j));
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestX2;
- PROCEDURE TestX3*(CONST a: ARRAY [*,*,*] OF LONGREAL; r1, r2, r3: RANGE);
- VAR i,j,k: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- k := FIRST(r3); WHILE k <= LAST(r3) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2),(k-FIRST(r3)) DIV STEP(r3)]=LONGREAL(100*i+10*j+k));
- INC(k,STEP(r3)) END;
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestX3;
- PROCEDURE FillR0(VAR a: ARRAY [?] OF REAL; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := 10*base+i END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO FillR0(a[i,?],10*base+i) END;
- END;
- END FillR0;
- PROCEDURE FillR*(VAR a: ARRAY [?] OF REAL);
- BEGIN FillR0(a,0);
- END FillR;
- PROCEDURE TestFillR0*(CONST a: ARRAY [?] OF REAL; base: LONGINT);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO ASSERT(ENTIER(a[i]+0.5) = 10*base+i) END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO TestFillR0(a[i,?],10*base+i) END;
- END;
- END TestFillR0;
- PROCEDURE TestFillR*(CONST a: ARRAY [?] OF LONGREAL);
- BEGIN
- TestFillX0(a,0);
- END TestFillR;
- PROCEDURE RandomR*(VAR a: ARRAY [?] OF REAL);
- VAR i: LONGINT;
- BEGIN
- IF DIM(a) = 1 THEN
- FOR i := 0 TO LEN(a,0)-1 DO a[i] := gen.Uniform() END;
- ELSE
- FOR i := 0 TO LEN(a,0)-1 DO RandomR(a[i,?]) END;
- END;
- END RandomR;
- PROCEDURE TestR1*(CONST a: ARRAY [*] OF REAL; r: RANGE);
- VAR i: LONGINT;
- BEGIN
- i := FIRST(r); WHILE i <= LAST(r) DO
- ASSERT(a[(i-FIRST(r)) DIV STEP(r)]=REAL(i));
- INC(i,STEP(r));
- END;
- END TestR1;
- PROCEDURE TestR2*(CONST a: ARRAY [*,*] OF REAL; r1, r2: RANGE);
- VAR i,j: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2)]=REAL(10*i+j));
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestR2;
- PROCEDURE TestR3*(CONST a: ARRAY [*,*,*] OF REAL; r1, r2, r3: RANGE);
- VAR i,j,k: LONGINT;
- BEGIN
- i := FIRST(r1); WHILE i <= LAST(r1) DO
- j := FIRST(r2); WHILE j <= LAST(r2) DO
- k := FIRST(r3); WHILE k <= LAST(r3) DO
- ASSERT(a[(i-FIRST(r1)) DIV STEP(r1),(j-FIRST(r2)) DIV STEP(r2),(k-FIRST(r3)) DIV STEP(r3)]=REAL(100*i+10*j+k));
- INC(k,STEP(r3)) END;
- INC(j,STEP(r2)) END;
- INC(i,STEP(r1)) END;
- END TestR3;
- BEGIN NEW(gen);
- END Driver.
- positive: driver tests (fill and compare arrays)
- MODULE Test;
- IMPORT Driver;
- PROCEDURE TestS;
- VAR a: ARRAY [*,*] OF SHORTINT; b: ARRAY [?] OF SHORTINT; c: ARRAY [2,3] OF SHORTINT;
- BEGIN
- NEW(a,2,3); NEW(b,2,3);
- Driver.FillS(a); Driver.FillS(b); Driver.FillS(c);
- Driver.TestFillS(a); Driver.TestFillS(b); Driver.TestFillS(c);
- Driver.TestFillL(a); Driver.TestFillL(b); Driver.TestFillL(c);
- ASSERT(a = [[0,1,2],[10,11,12]]);
- ASSERT(b = a); ASSERT(c=a);
- Driver.RandomS(a); Driver.RandomS(b); Driver.RandomS(c);
- END TestS;
- PROCEDURE TestI;
- VAR a: ARRAY [*,*] OF INTEGER; b: ARRAY [?] OF INTEGER; c: ARRAY [2,3] OF INTEGER;
- BEGIN
- NEW(a,2,3); NEW(b,2,3);
- Driver.FillI(a); Driver.FillI(b); Driver.FillI(c);
- Driver.TestFillL(a); Driver.TestFillL(b); Driver.TestFillL(c);
- ASSERT(a = [[0,1,2],[10,11,12]]);
- ASSERT(b = a); ASSERT(c=a);
- Driver.RandomI(a); Driver.RandomI(b); Driver.RandomI(c);
- END TestI;
- PROCEDURE TestL;
- VAR a: ARRAY [*,*] OF LONGINT; b: ARRAY [?] OF LONGINT; c: ARRAY [2,3] OF LONGINT;
- BEGIN
- NEW(a,2,3); NEW(b,2,3);
- Driver.FillL(a); Driver.FillL(b); Driver.FillL(c);
- Driver.TestFillL(a); Driver.TestFillL(b); Driver.TestFillL(c);
- ASSERT(a = [[0,1,2],[10,11,12]]);
- ASSERT(b = a); ASSERT(c=a);
- Driver.RandomL(a); Driver.RandomL(b); Driver.RandomL(c);
- END TestL;
- PROCEDURE TestR;
- VAR a: ARRAY [*,*] OF REAL; b: ARRAY [?] OF REAL; c: ARRAY [2,3] OF REAL;
- BEGIN
- NEW(a,2,3); NEW(b,2,3);
- Driver.FillR(a); Driver.FillR(b); Driver.FillR(c);
- Driver.TestFillR(a); Driver.TestFillR(b); Driver.TestFillR(c);
- ASSERT(a = [[0,1,2],[10,11,12]]);
- ASSERT(b = a); ASSERT(c=a);
- Driver.RandomR(a); Driver.RandomR(b); Driver.RandomR(c);
- END TestR;
- PROCEDURE TestX;
- VAR a: ARRAY [*,*] OF LONGREAL; b: ARRAY [?] OF LONGREAL; c: ARRAY [2,3] OF LONGREAL;
- BEGIN
- NEW(a,2,3); NEW(b,2,3);
- Driver.FillX(a); Driver.FillX(b); Driver.FillX(c);
- Driver.TestFillX(a); Driver.TestFillX(b); Driver.TestFillX(c);
- ASSERT(a = [[0,1,2],[10,11,12]]);
- ASSERT(b = a); ASSERT(c=a);
- Driver.RandomX(a); Driver.RandomX(b); Driver.RandomX(c);
- END TestX;
- BEGIN
- TestS; TestI; TestL; TestR; TestX
- END Test.
-
- positive: use ranges in procedure with static global array (was: register allocation problem)
- MODULE Test;
- VAR a: ARRAY [3,3] OF SHORTINT;
- PROCEDURE Test(r1,r2: RANGE);
- BEGIN
- ASSERT (a[r1,r2] = [[2,3],[5,6]]);
- END Test;
- BEGIN
- a := [[1,2,3],[4,5,6],[7,8,9]];
- Test(0..1,1..2);
- END Test.
- positive: test for unequality with unallocated arrays
- MODULE Test;
- VAR array: ARRAY [*] OF SHORTINT; tensor: ARRAY [?] OF SHORTINT;
- BEGIN
- ASSERT(array # [1,2]);
- ASSERT(~(array = [1,2]));
- ASSERT(~(array > [1,2]));
- ASSERT(~(array < [1,2]));
- ASSERT(~(array >= [1,2]));
- ASSERT(~(array <= [1,2]));
- ASSERT(tensor # [1,2]);
- ASSERT(~(tensor = [1,2]));
- ASSERT(~(tensor > [1,2]));
- ASSERT(~(tensor < [1,2]));
- ASSERT(~(tensor >= [1,2]));
- ASSERT(~(tensor <= [1,2]));
- END Test.
- positive: simple tests for ranges
- MODULE Test;
- IMPORT Driver;
- PROCEDURE TestS;
- VAR s1: ARRAY [*] OF SHORTINT; s2: ARRAY [*,*] OF SHORTINT; s3: ARRAY [*,*,*] OF SHORTINT;
- BEGIN
- NEW(s1,3); NEW(s2,3,4); NEW(s3,3,4,5);
- Driver.FillS(s1); Driver.FillS(s2); Driver.FillS(s3);
- Driver.TestFillS(s1); Driver.TestFillS(s2); Driver.TestFillS(s3);
- Driver.TestS1(s1[1..2],1..2);
- Driver.TestS2(s2[1..2,2..3],1..2,2..3);
- Driver.TestS3(s3[1..2,2..3,3..4],1..2,2..3,3..4);
- END TestS;
- PROCEDURE TestI;
- VAR s1: ARRAY [*] OF INTEGER; s2: ARRAY [*,*] OF INTEGER; s3: ARRAY [*,*,*] OF INTEGER;
- BEGIN
- NEW(s1,3); NEW(s2,3,4); NEW(s3,3,4,5);
- Driver.FillI(s1); Driver.FillI(s2); Driver.FillI(s3);
- Driver.TestFillI(s1); Driver.TestFillI(s2); Driver.TestFillI(s3);
- Driver.TestI1(s1[1..2],1..2);
- Driver.TestI2(s2[1..2,2..3],1..2,2..3);
- Driver.TestI3(s3[1..2,2..3,3..4],1..2,2..3,3..4);
- END TestI;
- PROCEDURE TestL;
- VAR s1: ARRAY [*] OF LONGINT; s2: ARRAY [*,*] OF LONGINT; s3: ARRAY [*,*,*] OF LONGINT;
- BEGIN
- NEW(s1,3); NEW(s2,3,4); NEW(s3,3,4,5);
- Driver.FillL(s1); Driver.FillL(s2); Driver.FillL(s3);
- Driver.TestFillL(s1); Driver.TestFillL(s2); Driver.TestFillL(s3);
- Driver.TestL1(s1[1..2],1..2);
- Driver.TestL2(s2[1..2,2..3],1..2,2..3);
- Driver.TestL3(s3[1..2,2..3,3..4],1..2,2..3,3..4);
- END TestL;
- PROCEDURE TestR;
- VAR s1: ARRAY [*] OF REAL; s2: ARRAY [*,*] OF REAL; s3: ARRAY [*,*,*] OF REAL;
- BEGIN
- NEW(s1,3); NEW(s2,3,4); NEW(s3,3,4,5);
- Driver.FillR(s1); Driver.FillR(s2); Driver.FillR(s3);
- Driver.TestFillR(s1); Driver.TestFillR(s2); Driver.TestFillR(s3);
- Driver.TestR1(s1[1..2],1..2);
- Driver.TestR2(s2[1..2,2..3],1..2,2..3);
- Driver.TestR3(s3[1..2,2..3,3..4],1..2,2..3,3..4);
- END TestR;
- PROCEDURE TestX;
- VAR s1: ARRAY [*] OF LONGREAL; s2: ARRAY [*,*] OF LONGREAL; s3: ARRAY [*,*,*] OF LONGREAL;
- BEGIN
- NEW(s1,3); NEW(s2,3,4); NEW(s3,3,4,5);
- Driver.FillX(s1); Driver.FillX(s2); Driver.FillX(s3);
- Driver.TestFillX(s1); Driver.TestFillX(s2); Driver.TestFillX(s3);
- Driver.TestX1(s1[1..2],1..2);
- Driver.TestX2(s2[1..2,2..3],1..2,2..3);
- Driver.TestX3(s3[1..2,2..3,3..4],1..2,2..3,3..4);
- END TestX;
- BEGIN TestS; TestI; TestL; TestR; TestX
- END Test.
-
- positive: conversion tests
- MODULE Test;
- IMPORT Driver;
- VAR s: ARRAY [?] OF SHORTINT; i: ARRAY [?] OF INTEGER; l: ARRAY [?] OF LONGINT; r: ARRAY [?] OF REAL; x: ARRAY [?] OF LONGREAL;
- BEGIN
- NEW(s,2,3,5);
- Driver.FillS(s); Driver.TestFillS(s);
- i := s; l := s; r := s; x := s; Driver.TestFillI(i); Driver.TestFillL(l); Driver.TestFillR(r); Driver.TestFillX(x);
- l := i; r := i; x := i; Driver.TestFillL(l); Driver.TestFillR(r); Driver.TestFillX(x);
- r := l; x := l; Driver.TestFillR(r); Driver.TestFillX(x);
- x := r; Driver.TestFillX(x);
- r := SHORT(x); Driver.TestFillR(r);
- l := ENTIER(x); Driver.TestFillL(l);
- i := SHORT(l); Driver.TestFillI(i);
- s := SHORT(i); Driver.TestFillS(s);
- END Test.
- positive: correct use of ADDRESS OF and SYSTEM.VAL for tensors and open math arrays
- MODULE Test;
- IMPORT SYSTEM;
- VAR a: ARRAY [*,*,*] OF REAL;
- PROCEDURE GetDim(adr: ADDRESS): LONGINT;
- CONST
- AddressSize=SIZEOF(ADDRESS);
- MathDimOffset=3*AddressSize;
- BEGIN
- SYSTEM.GET(adr+MathDimOffset,adr); RETURN adr;
- END GetDim;
- PROCEDURE P(CONST a: ARRAY [?] OF REAL);
- VAR adr,val,val2: LONGINT;
- BEGIN
- adr := SYSTEM.ADR(a);
- SYSTEM.GET(adr,val2);
- val := SYSTEM.VAL(LONGINT,a);
- ASSERT(val = val2);
- ASSERT(GetDim(val) = 3);
- END P;
- PROCEDURE Q(CONST a: ARRAY [*,*,*] OF REAL);
- VAR adr: LONGINT;
- BEGIN
- adr := SYSTEM.ADR(a);
- ASSERT(GetDim(adr) = 3);
- END Q;
- BEGIN
- NEW(a,1,2,3);
- P(a); Q(a);
- END Test.
-
- positive: Test of Min and Max
- MODULE Test;
- TYPE B= ARRAY [*,*] OF REAL;
- CONST a = [[1,2,3],
- [4,5,6],
- [7,8,9]];
- PROCEDURE Min;
- VAR b:B;
- BEGIN
- b:=a;
- ASSERT(a=b);
- ASSERT(MIN(a)=1);
- ASSERT(MIN(a[1..])=4);
- ASSERT(MIN(a[..1])=1);
- ASSERT(MIN(a[..,1..])=2);
- ASSERT(MIN(a[..,..1])=1);
- ASSERT(MIN(b)=1);
- ASSERT(MIN(b[1..,*])=4);
- ASSERT(MIN(b[..1,*])=1);
- ASSERT(MIN(b[*,1..])=2);
- ASSERT(MIN(b[*,..1])=1);
- END Min;
- PROCEDURE Max;
- VAR b: B;
- BEGIN
- b:=a;
- ASSERT(a=b);
- ASSERT(MAX(a)=9);
- ASSERT(MAX(a[1..])=9);
- ASSERT(MAX(a[..1])=6);
- ASSERT(MAX(a[..,1..])=9);
- ASSERT(MAX(a[..,..1])=8);
- ASSERT(MAX(b)=9);
- ASSERT(MAX(b[1..])=9);
- ASSERT(MAX(b[..1])=6);
- ASSERT(MAX(b[..,1..])=9);
- ASSERT(MAX(b[..,..1])=8);
- END Max;
- BEGIN Min; Max;
- END Test.
- positive: Temporary allocation of small arrays (failed before 2016.10.07)
- MODULE Test;
- PROCEDURE Do;
- VAR LT1,LT2: ARRAY [4,4] OF REAL;
- L: ARRAY [4] OF REAL;
- BEGIN
- L := LT1 * LT2 * [0.3, 0, 0, 1];
- END Do;
- BEGIN
- Do;
- END Test.
-
|