1-- CC1227A.ADA 2 3-- Grant of Unlimited Rights 4-- 5-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, 6-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 7-- unlimited rights in the software and documentation contained herein. 8-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making 9-- this public release, the Government intends to confer upon all 10-- recipients unlimited rights equal to those held by the Government. 11-- These rights include rights to use, duplicate, release or disclose the 12-- released technical data and computer software in whole or in part, in 13-- any manner and for any purpose whatsoever, and to have or permit others 14-- to do so. 15-- 16-- DISCLAIMER 17-- 18-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR 19-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 20-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE 21-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 22-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A 23-- PARTICULAR PURPOSE OF SAID MATERIAL. 24--* 25-- OBJECTIVE: 26-- CHECK, WHEN DERIVING FROM A FORMAL TYPE, THAT ALL THE PREDEFINED 27-- OPERATIONS ASSOCIATED WITH THE CLASS OF THE FORMAL TYPE ARE 28-- DECLARED FOR THE DERIVED TYPE. 29 30-- HISTORY: 31-- BCB 04/04/88 CREATED ORIGINAL TEST. 32 33WITH REPORT; USE REPORT; 34WITH SYSTEM; USE SYSTEM; 35 36PROCEDURE CC1227A IS 37 38 GENERIC 39 TYPE FORM IS RANGE <>; 40 PACKAGE P IS 41 TYPE DER_FORM IS NEW FORM; 42 FUNCTION IDENT_DER(X : DER_FORM) RETURN DER_FORM; 43 FUNCTION IDENT_ADR(Y : ADDRESS) RETURN ADDRESS; 44 END P; 45 46 PACKAGE BODY P IS 47 DER_VAR : DER_FORM; 48 DER_FORM_BASE_FIRST : DER_FORM; 49 DER_FORM_FIRST : DER_FORM; 50 DER_FORM_LAST : DER_FORM; 51 DER_FORM_SIZE : DER_FORM; 52 DER_FORM_WIDTH : DER_FORM; 53 DER_FORM_POS : DER_FORM; 54 DER_FORM_VAL : DER_FORM; 55 DER_FORM_SUCC : DER_FORM; 56 DER_FORM_PRED : DER_FORM; 57 DER_FORM_IMAGE : STRING(1..5); 58 DER_FORM_VALUE : DER_FORM; 59 DER_VAR_SIZE : DER_FORM; 60 DER_VAR_ADDRESS : ADDRESS; 61 DER_EQUAL, DER_UNEQUAL : DER_FORM; 62 DER_GREATER : DER_FORM; 63 DER_MOD, DER_REM : DER_FORM; 64 DER_ABS, DER_EXP : DER_FORM; 65 INT : INTEGER := 5; 66 FUNCTION IDENT_DER(X : DER_FORM) RETURN DER_FORM IS 67 BEGIN 68 IF EQUAL(3,3) THEN 69 RETURN X; 70 END IF; 71 RETURN 0; 72 END IDENT_DER; 73 FUNCTION IDENT_ADR(Y : ADDRESS) RETURN ADDRESS IS 74 X : DER_FORM; 75 BEGIN 76 IF EQUAL(3,3) THEN 77 RETURN Y; 78 END IF; 79 RETURN X'ADDRESS; 80 END IDENT_ADR; 81 BEGIN 82 TEST ("CC1227A", "CHECK, WHEN DERIVING FROM A FORMAL TYPE, " & 83 "THAT ALL THE PREDEFINED OPERATIONS " & 84 "ASSOCIATED WITH THE CLASS OF THE FORMAL " & 85 "TYPE ARE DECLARED FOR THE DERIVED TYPE"); 86 87 DER_VAR := IDENT_DER(1); 88 89 IF DER_VAR /= 1 THEN 90 FAILED ("IMPROPER VALUE FROM ASSIGNMENT OPERATION"); 91 END IF; 92 93 IF DER_VAR NOT IN DER_FORM THEN 94 FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST"); 95 END IF; 96 97 DER_VAR := DER_FORM'(2); 98 99 IF DER_VAR /= IDENT_DER(2) THEN 100 FAILED ("IMPROPER RESULT FROM QUALIFICATION"); 101 END IF; 102 103 DER_VAR := DER_FORM(INT); 104 105 IF DER_VAR /= IDENT_DER(5) THEN 106 FAILED ("IMPROPER RESULT FROM EXPLICIT CONVERSION - " & 107 "INTEGER"); 108 END IF; 109 110 DER_VAR := DER_FORM(3.0); 111 112 IF DER_VAR /= IDENT_DER(3) THEN 113 FAILED ("IMPROPER RESULT FROM EXPLICIT CONVERSION - " & 114 "FLOAT"); 115 END IF; 116 117 DER_VAR := 1_000; 118 119 IF DER_VAR /= IDENT_DER(1000) THEN 120 FAILED ("IMPROPER RESULT FROM IMPLICIT CONVERSION"); 121 END IF; 122 123 DER_FORM_BASE_FIRST := DER_FORM'BASE'FIRST; 124 125 DER_FORM_FIRST := DER_FORM'FIRST; 126 127 IF DER_FORM_BASE_FIRST /= IDENT_DER(DER_FORM_FIRST) THEN 128 FAILED ("IMPROPER VALUE FOR DER_FORM'BASE'FIRST"); 129 END IF; 130 131 IF DER_FORM_FIRST /= IDENT_DER(DER_FORM'FIRST) THEN 132 FAILED ("IMPROPER VALUE FOR DER_FORM'FIRST"); 133 END IF; 134 135 DER_FORM_LAST := DER_FORM'LAST; 136 137 IF DER_FORM_LAST /= IDENT_DER(DER_FORM'LAST) THEN 138 FAILED ("IMPROPER VALUE FOR DER_FORM'LAST"); 139 END IF; 140 141 DER_FORM_SIZE := DER_FORM(DER_FORM'SIZE); 142 143 IF DER_FORM_SIZE /= IDENT_DER(DER_FORM(DER_FORM'SIZE)) THEN 144 FAILED ("IMPROPER VALUE FOR DER_FORM'SIZE"); 145 END IF; 146 147 DER_FORM_WIDTH := DER_FORM(DER_FORM'WIDTH); 148 149 IF DER_FORM_WIDTH /= IDENT_DER(DER_FORM(DER_FORM'WIDTH)) THEN 150 FAILED ("IMPROPER VALUE FOR DER_FORM'WIDTH"); 151 END IF; 152 153 DER_FORM_POS := DER_FORM(DER_FORM'POS(DER_VAR)); 154 155 IF DER_FORM_POS /= IDENT_DER(DER_FORM(DER_FORM'POS(DER_VAR))) 156 THEN FAILED ("IMPROPER VALUE FOR DER_FORM'POS(DER_VAR)"); 157 END IF; 158 159 DER_FORM_VAL := DER_FORM'VAL(DER_VAR); 160 161 IF DER_FORM_VAL /= IDENT_DER(DER_FORM'VAL(DER_VAR)) THEN 162 FAILED ("IMPROPER VALUE FOR DER_FORM'VAL(DER_VAR)"); 163 END IF; 164 165 DER_FORM_SUCC := DER_FORM'SUCC(DER_VAR); 166 167 IF DER_FORM_SUCC /= IDENT_DER(DER_FORM'SUCC(DER_VAR)) THEN 168 FAILED ("IMPROPER VALUE FOR DER_FORM'SUCC(DER_VAR)"); 169 END IF; 170 171 DER_FORM_PRED := DER_FORM'PRED(DER_VAR); 172 173 IF DER_FORM_PRED /= IDENT_DER(DER_FORM'PRED(DER_VAR)) THEN 174 FAILED ("IMPROPER VALUE FOR DER_FORM'PRED(DER_VAR)"); 175 END IF; 176 177 DER_FORM_IMAGE := DER_FORM'IMAGE(DER_VAR); 178 179 IF DER_FORM_IMAGE(2..5) /= "1000" THEN 180 FAILED ("IMPROPER VALUE FOR DER_FORM'IMAGE(DER_VAR)"); 181 END IF; 182 183 DER_FORM_VALUE := DER_FORM'VALUE(DER_FORM_IMAGE); 184 185 IF DER_FORM_VALUE /= IDENT_DER(1000) THEN 186 FAILED ("IMPROPER VALUE FOR DER_FORM'VALUE" & 187 "(DER_FORM_IMAGE)"); 188 END IF; 189 190 DER_VAR_SIZE := DER_FORM(DER_VAR'SIZE); 191 192 IF DER_VAR_SIZE /= IDENT_DER(DER_FORM(DER_VAR'SIZE)) THEN 193 FAILED ("IMPROPER VALUE FOR DER_VAR'SIZE"); 194 END IF; 195 196 DER_VAR_ADDRESS := DER_VAR'ADDRESS; 197 198 IF DER_VAR_ADDRESS /= IDENT_ADR(DER_VAR'ADDRESS) THEN 199 FAILED ("IMPROPER VALUE FOR DER_VAR'ADDRESS"); 200 END IF; 201 202 DER_EQUAL := IDENT_DER(1000); 203 204 IF DER_VAR /= DER_EQUAL THEN 205 FAILED ("IMPROPER RESULT FROM INEQUALITY OPERATOR"); 206 END IF; 207 208 DER_UNEQUAL := IDENT_DER(500); 209 210 IF DER_VAR = DER_UNEQUAL THEN 211 FAILED ("IMPROPER RESULT FROM EQUALITY OPERATOR"); 212 END IF; 213 214 IF DER_VAR < DER_UNEQUAL THEN 215 FAILED ("IMPROPER RESULT FROM LESS THAN OPERATOR"); 216 END IF; 217 218 IF DER_VAR <= DER_UNEQUAL THEN 219 FAILED ("IMPROPER RESULT FROM LESS THAN OR EQUAL TO " & 220 "OPERATOR"); 221 END IF; 222 223 DER_GREATER := IDENT_DER(1500); 224 225 IF DER_VAR > DER_GREATER THEN 226 FAILED ("IMPROPER RESULT FROM GREATER THAN OPERATOR"); 227 END IF; 228 229 IF DER_VAR >= DER_GREATER THEN 230 FAILED ("IMPROPER RESULT FROM GREATER THAN OR EQUAL " & 231 "TO OPERATOR"); 232 END IF; 233 234 DER_VAR := DER_VAR + DER_EQUAL; 235 236 IF DER_VAR /= IDENT_DER(2000) THEN 237 FAILED ("IMPROPER RESULT FROM ADDITION OPERATOR"); 238 END IF; 239 240 DER_VAR := DER_VAR - DER_EQUAL; 241 242 IF DER_VAR /= IDENT_DER(1000) THEN 243 FAILED ("IMPROPER RESULT FROM SUBTRACTION OPERATOR"); 244 END IF; 245 246 DER_VAR := DER_VAR * IDENT_DER(2); 247 248 IF DER_VAR /= IDENT_DER(2000) THEN 249 FAILED ("IMPROPER RESULT FROM MULTIPLICATION OPERATOR"); 250 END IF; 251 252 DER_VAR := DER_VAR / IDENT_DER(2); 253 254 IF DER_VAR /= IDENT_DER(1000) THEN 255 FAILED ("IMPROPER RESULT FROM DIVISION OPERATOR"); 256 END IF; 257 258 DER_MOD := DER_GREATER MOD DER_VAR; 259 260 IF DER_MOD /= IDENT_DER(500) THEN 261 FAILED ("IMPROPER RESULT FROM MOD OPERATOR"); 262 END IF; 263 264 DER_REM := DER_GREATER REM DER_VAR; 265 266 IF DER_REM /= IDENT_DER(500) THEN 267 FAILED ("IMPROPER RESULT FROM REM OPERATOR"); 268 END IF; 269 270 DER_ABS := ABS(IDENT_DER(-1500)); 271 272 IF DER_ABS /= IDENT_DER(DER_GREATER) THEN 273 FAILED ("IMPROPER RESULT FROM ABS OPERATOR"); 274 END IF; 275 276 DER_EXP := IDENT_DER(2) ** IDENT_INT(2); 277 278 IF DER_EXP /= IDENT_DER(4) THEN 279 FAILED ("IMPROPER RESULT FROM EXPONENTIATION OPERATOR"); 280 END IF; 281 282 RESULT; 283 END P; 284 285 PACKAGE PACK IS NEW P(INTEGER); 286 287BEGIN 288 NULL; 289END CC1227A; 290