diff options
Diffstat (limited to 't')
| -rw-r--r-- | t/array.pas | 45 | ||||
| -rw-r--r-- | t/qsort.pas | 42 | ||||
| -rw-r--r-- | t/trivial.pas | 16 |
3 files changed, 103 insertions, 0 deletions
diff --git a/t/array.pas b/t/array.pas new file mode 100644 index 0000000..6bf913e --- /dev/null +++ b/t/array.pas @@ -0,0 +1,45 @@ +program arr; + +type + a1=integer; + a2=array[0..5] of a1; + a3=array[0..6] of a2; + a4=array[0..7] of a3; + a5=array[0..8] of a4; + +extern memset(dst:^void; n:integer; c:integer):^void; +extern puts(s:string):integer; + +function assert_equal(a:integer; b:integer):void; +begin + if a<>b then puts('error!') +end; + +function main():integer; +var + a:array[0..9] of a5; + pa1:^a5; + pa2:^a4; + pa3:^a3; + pa4:^a2; + pa5:^a1; +begin + memset(@a, 0, 4*6*7*8*9*10); + a[1][2][3][4][5] := 0x1234567; + pa1 := @a[1]; + pa2 := @a[1][2]; + pa3 := @a[1][2][3]; + pa4 := @a[1][2][3][4]; + pa5 := @a[1][2][3][4][5]; + assert_equal(pa1^[2][3][4][5], 0x1234567); + assert_equal(pa2^[3][4][5], 0x1234567); + assert_equal(pa3^[4][5], 0x1234567); + assert_equal(pa4^[5], 0x1234567); + assert_equal(pa5^, 0x1234567); + + assert_equal((@a[1][2][3])^[4][5], 0x1234567); + assert_equal((@a[1][2][2]+1)^[4][5], 0x1234567); + + puts('good'); + main := 0 +end; diff --git a/t/qsort.pas b/t/qsort.pas new file mode 100644 index 0000000..9f62f94 --- /dev/null +++ b/t/qsort.pas @@ -0,0 +1,42 @@ +program qsort; + +extern srand(seed:integer):void; +extern rand():integer; +extern time(t:integer):integer; +extern printf(fmt:string; ...):integer; + +function qsort(arr:^integer; start:integer; ends:integer):void; +var + i,j,mid,t:integer; +begin + if ends>start then begin + mid := arr[ends]; + i := start; + for j := start to ends-1 do + if arr[j]<mid then begin + t := arr[i]; + arr[i] := arr[j]; + arr[j] := t; + i := i+1; + end; + t := arr[i]; + arr[i] := arr[ends]; + arr[ends] := t; + qsort(arr, start, i-1); + qsort(arr, i+1 ,ends) + end +end; + +function main():integer; +var + arr:array[0..99999] of integer; + i:integer; +begin + srand(time(0)); + for i:=0 to 99999 do + arr[i] := rand() mod 1000; + qsort(@arr, 0, 99999); + for i:=99999 downto 0 do + printf('%d ', arr[i]); + main := 0 +end; diff --git a/t/trivial.pas b/t/trivial.pas index 52a6ebe..e71d037 100644 --- a/t/trivial.pas +++ b/t/trivial.pas @@ -230,3 +230,19 @@ begin pa^.m4[1].m1[2]:=1234; record_test:=a.m3[6]+pa^.m3[a.m1]+a.m4[1].m1[2]; end; + +function case_test(a:integer):integer; +begin + case a of + 1,2,3:case_test:=111; + 4,5,6:case a of + 4:case_test:=222; + 5,6:case a of + 5:case_test:=333; + 6:case_test:=555; + end; + end; + else + case_test:=666; + end +end; |
