summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/array.pas45
-rw-r--r--t/qsort.pas42
-rw-r--r--t/trivial.pas16
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;