111
|
1 --
|
|
2 -- CD70001.A
|
|
3 --
|
|
4 -- Grant of Unlimited Rights
|
|
5 --
|
|
6 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
|
|
7 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
|
|
8 -- unlimited rights in the software and documentation contained herein.
|
|
9 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
|
|
10 -- this public release, the Government intends to confer upon all
|
|
11 -- recipients unlimited rights equal to those held by the Government.
|
|
12 -- These rights include rights to use, duplicate, release or disclose the
|
|
13 -- released technical data and computer software in whole or in part, in
|
|
14 -- any manner and for any purpose whatsoever, and to have or permit others
|
|
15 -- to do so.
|
|
16 --
|
|
17 -- DISCLAIMER
|
|
18 --
|
|
19 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
|
|
20 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
|
|
21 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
|
|
22 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
|
|
23 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
|
|
24 -- PARTICULAR PURPOSE OF SAID MATERIAL.
|
|
25 --*
|
|
26 --
|
|
27 -- OBJECTIVE:
|
|
28 -- Check that package System includes Max_Base_Digits, Address,
|
|
29 -- Null_Address, Word_Size, functions "<", "<=", ">", ">=", "="
|
|
30 -- (with Address parameters and Boolean results), Bit_Order,
|
|
31 -- Default_Bit_Order, Any_Priority, Interrupt_Priority,
|
|
32 -- and Default_Priority.
|
|
33 --
|
|
34 -- Check that package System.Storage_Elements includes all required
|
|
35 -- types and operations.
|
|
36 --
|
|
37 -- TEST DESCRIPTION:
|
|
38 -- The test checks for the existence of the names additional
|
|
39 -- to package system above those names tested for in 9Xbasic.
|
|
40 --
|
|
41 -- This test checks that the semantics provided in Storage_Elements
|
|
42 -- are present and operate marginally within expectations (to the best
|
|
43 -- extent possible in a portable implementation independent fashion).
|
|
44 --
|
|
45 --
|
|
46 -- CHANGE HISTORY:
|
|
47 -- 09 MAY 95 SAIC Initial version
|
|
48 -- 27 JAN 96 SAIC Revised for 2.1; Allow negative address delta
|
|
49 --
|
|
50 --!
|
|
51
|
|
52 with Report;
|
|
53 with Ada.Text_IO;
|
|
54 with System.Storage_Elements;
|
|
55 with System.Address_To_Access_Conversions;
|
|
56 procedure CD70001 is
|
|
57 use System;
|
|
58
|
|
59 procedure CD70 is
|
|
60
|
|
61 type Int_Max is range Min_Int .. Max_Int;
|
|
62
|
|
63 My_Int : Int_Max := System.Max_Base_Digits + System.Word_Size;
|
|
64
|
|
65 An_Address : Address;
|
|
66 An_Other_Address : Address := An_Address'Address;
|
|
67
|
|
68 begin -- 7.0
|
|
69
|
|
70
|
|
71 if Default_Bit_Order not in High_Order_First..Low_Order_First then
|
|
72 Report.Failed ("Default_Bit_Order invalid");
|
|
73 end if;
|
|
74
|
|
75 if Bit_Order'Pos(High_Order_First) /= 0 then
|
|
76 Report.Failed ("Bit_Order'Pos(High_Order_First) /= 0");
|
|
77 end if;
|
|
78
|
|
79 if Bit_Order'Pos(Low_Order_First) /= 1 then
|
|
80 Report.Failed ("Bit_Order'Pos(Low_Order_First) /= 1");
|
|
81 end if;
|
|
82
|
|
83 An_Address := My_Int'Address;
|
|
84
|
|
85 if An_Address = Null_Address then
|
|
86 Report.Failed ("Null_Address matched a real address");
|
|
87 end if;
|
|
88
|
|
89
|
|
90 if An_Address'Address /= An_Other_Address then
|
|
91 Report.Failed("Value set at elaboration not equal to itself");
|
|
92 end if;
|
|
93
|
|
94 if An_Address'Address > An_Other_Address
|
|
95 and An_Address'Address < An_Other_Address then
|
|
96 Report.Failed("Address is both greater and less!");
|
|
97 end if;
|
|
98
|
|
99 if not (An_Address'Address >= An_Other_Address
|
|
100 and An_Address'Address <= An_Other_Address) then
|
|
101 Report.Failed("Address comparisons wrong");
|
|
102 end if;
|
|
103
|
|
104
|
|
105 if Priority'First /= Any_Priority'First then
|
|
106 Report.Failed ("Priority'First /= Any_Priority'First");
|
|
107 end if;
|
|
108
|
|
109 if Interrupt_Priority'First /= Priority'Last+1 then
|
|
110 Report.Failed ("Interrupt_Priority'First /= Priority'Last+1");
|
|
111 end if;
|
|
112
|
|
113 if Interrupt_Priority'Last /= Any_Priority'Last then
|
|
114 Report.Failed ("Interrupt_Priority'Last /= Any_Priority'Last");
|
|
115 end if;
|
|
116
|
|
117 if Default_Priority /= ((Priority'First + Priority'Last)/2) then
|
|
118 Report.Failed ("Default_Priority wrong value");
|
|
119 end if;
|
|
120
|
|
121 end CD70;
|
|
122
|
|
123 procedure CD71 is
|
|
124 use System.Storage_Elements;
|
|
125
|
|
126 Storehouse_1 : Storage_Array(0..127);
|
|
127 Storehouse_2 : Storage_Array(0..127);
|
|
128
|
|
129 House_Offset : Storage_Offset;
|
|
130
|
|
131 begin -- 7.1
|
|
132
|
|
133
|
|
134 if Storage_Count'First /= 0 then
|
|
135 Report.Failed ("Storage_Count'First /= 0");
|
|
136 end if;
|
|
137
|
|
138 if Storage_Count'Last /= Storage_Offset'Last then
|
|
139 Report.Failed ("Storage_Count'Last /= Storage_Offset'Last");
|
|
140 end if;
|
|
141
|
|
142
|
|
143 if Storage_Element'Size /= Storage_Unit then
|
|
144 Report.Failed ("Storage_Element'Size /= Storage_Unit");
|
|
145 end if;
|
|
146
|
|
147 if Storage_Array'Component_Size /= Storage_Unit then
|
|
148 Report.Failed ("Storage_Array'Element_Size /= Storage_Unit");
|
|
149 end if;
|
|
150
|
|
151 if Storage_Element'Last+1 /= 0 then
|
|
152 Report.Failed ("Storage_Element not modular");
|
|
153 end if;
|
|
154
|
|
155
|
|
156 -- "+", "-"( Address, Storage_Offset) and inverse
|
|
157
|
|
158 House_Offset := Storehouse_2'Address - Storehouse_1'Address;
|
|
159 -- Address - Address = Offset
|
|
160 -- Note that House_Offset may be a negative value
|
|
161
|
|
162 if House_Offset + Storehouse_1'Address /= Storehouse_2'Address then
|
|
163 -- Offset + Address = Address
|
|
164 Report.Failed ("Storage arithmetic non-linear O+A");
|
|
165 end if;
|
|
166
|
|
167 if Storehouse_1'Address + House_Offset /= Storehouse_2'Address then
|
|
168 -- Address + Offset = Address
|
|
169 Report.Failed ("Storage arithmetic non-linear A+O");
|
|
170 end if;
|
|
171
|
|
172 if Storehouse_2'Address - House_Offset /= Storehouse_1'Address then
|
|
173 -- Address - Offset = Address
|
|
174 Report.Failed ("Storage arithmetic non-linear A-O");
|
|
175 end if;
|
|
176
|
|
177 if (Storehouse_2'Address mod abs(House_Offset) > abs(House_Offset)) then
|
|
178 -- "mod"( Address, Storage_Offset)
|
|
179 Report.Failed("Mod arithmetic");
|
|
180 end if;
|
|
181
|
|
182
|
|
183 if Storehouse_1'Address
|
|
184 /= To_Address(To_Integer(Storehouse_1'Address)) then
|
|
185 Report.Failed("To_Address, To_Integer not symmetric");
|
|
186 end if;
|
|
187
|
|
188 end CD71;
|
|
189
|
|
190
|
|
191 begin -- Main test procedure.
|
|
192
|
|
193 Report.Test ("CD70001", "Check package System" );
|
|
194
|
|
195 CD70;
|
|
196
|
|
197 CD71;
|
|
198
|
|
199 Report.Result;
|
|
200
|
|
201 end CD70001;
|