summaryrefslogtreecommitdiff
path: root/t/array.pas
blob: 6bf913effbc7381cadb68aa41c63385362e62cf4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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;