Skip to content

Commit aa33026

Browse files
tjj2017martin
authored andcommitted
Add new tests for implicit dereferencing.
1 parent a721a07 commit aa33026

File tree

8 files changed

+241
-0
lines changed

8 files changed

+241
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
procedure Pointer_To_Array is
2+
type Count is range 0 .. 10;
3+
subtype Index is Count range 1 .. Count'Last;
4+
5+
type Arr_T is array (Index) of Count;
6+
type Arr_P is access all Arr_T;
7+
8+
type U_Arr_T is array (Integer range <>) of Integer;
9+
type U_Arr_P is access all U_Arr_T;
10+
11+
Arr : aliased Arr_T;
12+
Ptr : Arr_P;
13+
14+
U_Arr : aliased U_Arr_T := (1, 2, 3, 4);
15+
U_Ptr : U_Arr_P;
16+
17+
C_dummy : Count;
18+
19+
begin
20+
for I in Index loop
21+
Arr (I) := Index'Last - I + 1;
22+
end loop;
23+
24+
for I in Index loop
25+
pragma Assert (Arr (I) = Index'Last - I + 1);
26+
end loop;
27+
28+
Ptr := Arr'Access;
29+
30+
for I in Index loop
31+
pragma Assert (Ptr (I) = Index'Last - I + 1);
32+
end loop;
33+
34+
for I in Index loop
35+
Arr (I) := I;
36+
end loop;
37+
38+
for I in Index loop
39+
pragma Assert (Ptr (I) = I);
40+
end loop;
41+
42+
for I in Index loop
43+
pragma Assert (Arr (I) = I);
44+
end loop;
45+
46+
pragma Assert (Arr (3) = 5);
47+
pragma Assert (Ptr (5) = 3);
48+
pragma Assert (Ptr.all (3) = 3);
49+
pragma Assert (Ptr.all (3) = 5);
50+
51+
for I in Index loop
52+
Ptr.all (I) := Index'Last - I + 1;
53+
end loop;
54+
55+
for I in Index loop
56+
pragma Assert (Ptr.all (I) = Index'Last - I + 1);
57+
end loop;
58+
59+
for I in Index loop
60+
pragma Assert (Arr (I) = Index'Last - I + 1);
61+
end loop;
62+
63+
pragma Assert (Arr (1) = Index'Last);
64+
pragma Assert (Ptr (Index'Last) = 1);
65+
pragma Assert (Ptr.all (1) = Index'Last);
66+
pragma Assert (Ptr.all (Index'Last) = 1);
67+
68+
pragma Assert (Ptr'Length = Index'Last);
69+
70+
U_Ptr := U_Arr'Access;
71+
C_dummy := U_Ptr'Length;
72+
C_dummy := Ptr'Length;
73+
74+
C_Dummy := Count (U_Ptr'First);
75+
C_Dummy := Count (U_Ptr'Last);
76+
77+
78+
end Pointer_To_Array;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from test_support import *
2+
3+
prove()
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
procedure Pointer_To_Slice is
2+
type Count is range 0 .. 10;
3+
subtype Index is Count range 1 .. Count'Last;
4+
5+
type Arr_T is array (Index) of Count;
6+
type Arr_P is access all Arr_T;
7+
8+
Arr_1 : aliased Arr_T;
9+
Arr_2 : aliased Arr_T := (others => 3);
10+
Ptr_1 : Arr_P;
11+
Ptr_2 : Arr_P;
12+
13+
begin
14+
for I in Index loop
15+
Arr_1 (I) := I;
16+
end loop;
17+
18+
for I in Index loop
19+
pragma Assert (Arr_1 (I) = I);
20+
end loop;
21+
22+
Arr_2 (1 .. 5) := Arr_1 (2 .. 6);
23+
24+
for I in Index range 1 .. 5 loop
25+
pragma Assert (Arr_2 (I) = I + 1);
26+
end loop;
27+
28+
for I in 6 .. Index'Last loop
29+
pragma Assert (Arr_2 (I) = 3);
30+
end loop;
31+
32+
Ptr_1 := Arr_1'Access;
33+
Ptr_2 := Arr_2'Access;
34+
35+
for I in Index loop
36+
pragma Assert (Ptr_1 (I) = I);
37+
end loop;
38+
39+
for I in Index range 1 .. 5 loop
40+
pragma Assert (Ptr_2 (I) = I + 1);
41+
end loop;
42+
43+
for I in 6 .. Index'Last loop
44+
pragma Assert (Ptr_2 (I) = 3);
45+
end loop;
46+
47+
Ptr_1 (6 .. Index'Last) := Ptr_2 (6 .. Index'Last);
48+
49+
for I in Index range 1 .. 5 loop
50+
pragma Assert (Arr_1 (I) = I);
51+
end loop;
52+
53+
for I in 6 .. Index'Last loop
54+
pragma Assert (Arr_1 (I) = 3);
55+
end loop;
56+
57+
Ptr_2 (1 .. 5) := Ptr_1 (1 .. 5);
58+
59+
for I in Index range 1 .. 5 loop
60+
pragma Assert (Arr_2 (I) = I);
61+
end loop;
62+
63+
for I in 6 .. Index'Last loop
64+
pragma Assert (Arr_2 (I) = 3);
65+
end loop;
66+
67+
68+
end Pointer_To_Slice;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from test_support import *
2+
3+
prove()
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
procedure Pointer_To_Slice is
2+
type Count is range 0 .. 10;
3+
subtype Index is Count range 1 .. Count'Last;
4+
5+
type Arr_T is array (Index) of Count;
6+
type Arr_P is access all Arr_T;
7+
8+
Arr_1 : aliased Arr_T;
9+
Arr_2 : aliased Arr_T := (others => 3);
10+
Ptr_1 : Arr_P;
11+
Ptr_2 : Arr_P;
12+
13+
begin
14+
for I in Index loop
15+
Arr_1 (I) := I;
16+
end loop;
17+
18+
for I in Index loop
19+
pragma Assert (Arr_1 (I) = I);
20+
end loop;
21+
22+
Arr_2 (1 .. 5) := Arr_1 (2 .. 6);
23+
24+
for I in Index range 1 .. 5 loop
25+
pragma Assert (Arr_2 (I) = I + 1);
26+
end loop;
27+
28+
for I in 6 .. Index'Last loop
29+
pragma Assert (Arr_2 (I) = 3);
30+
end loop;
31+
32+
Ptr_1 := Arr_1'Access;
33+
Ptr_2 := Arr_2'Access;
34+
35+
for I in Index loop
36+
pragma Assert (Ptr_1 (I) = I);
37+
end loop;
38+
39+
for I in Index range 1 .. 5 loop
40+
pragma Assert (Ptr_2 (I) = I + 1);
41+
end loop;
42+
43+
for I in 6 .. Index'Last loop
44+
pragma Assert (Ptr_2 (I) = 3);
45+
end loop;
46+
47+
Ptr_1 (6 .. Index'Last) := Ptr_2 (6 .. Index'Last);
48+
49+
for I in Index range 1 .. 5 loop
50+
pragma Assert (Arr_1 (I) = I);
51+
end loop;
52+
53+
for I in 6 .. Index'Last loop
54+
pragma Assert (Arr_1 (I) = 3);
55+
end loop;
56+
57+
Ptr_2 (1 .. 5) := Ptr_1 (1 .. 5);
58+
59+
for I in Index range 1 .. 5 loop
60+
pragma Assert (Arr_2 (I) = I);
61+
end loop;
62+
63+
for I in 6 .. Index'Last loop
64+
pragma Assert (Arr_2 (I) = 3);
65+
end loop;
66+
67+
68+
end Pointer_To_Slice;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from test_support import *
2+
3+
prove()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
procedure Simple_Access_Types is
2+
type A_Int is access all Integer;
3+
4+
I : aliased Integer := 5;
5+
6+
Acc : A_Int;
7+
8+
begin
9+
pragma Assert (I = 5);
10+
Acc := I'Access;
11+
Acc.all := 3;
12+
pragma Assert (I = 5);
13+
pragma Assert (I = 3);
14+
15+
end Simple_Access_Types;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from test_support import *
2+
3+
prove()

0 commit comments

Comments
 (0)