URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/gnu-old/gcc-4.2.2/gcc/testsuite/ada/acats/tests/c7
- from Rev 154 to Rev 816
- ↔ Reverse comparison
Rev 154 → Rev 816
/c730004.a
0,0 → 1,327
-- C730004.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that for a type declared in a package, descendants of the package |
-- use the full view of type. Specifically check that full view of the |
-- limited type is visible only in private descendants (children) and in |
-- the private parts and bodies of public descendants (children). |
-- Check that a limited type may be used as an out parameter outside |
-- the package that defines the type. |
-- |
-- TEST DESCRIPTION: |
-- This test defines a parent package containing limited private type |
-- definitions. Children packages are defined (one public, one private) |
-- that use the nonlimited full view of the types defined in the private |
-- part of the parent specification. |
-- The main declares a procedure with an out parameter that was defined |
-- as limited in the specification of the parent package. |
-- |
-- |
-- CHANGE HISTORY: |
-- 15 Sep 95 SAIC Initial prerelease version. |
-- 23 Apr 96 SAIC Added prefix for parameter in Call_Modify_File. |
-- 02 Nov 96 SAIC ACVC 2.1: Modified prologue and Test.Report. |
-- |
--! |
|
package C730004_0 is |
|
-- Full views of File_Descriptor, File_Mode, File_Name, and File_Type are |
-- are nonlimited. |
|
type File_Descriptor is limited private; |
|
type File_Mode is limited private; |
|
Active_Mode : constant File_Mode; |
|
type File_Name is limited private; |
|
type File_Type is limited private; |
|
function Next_Available_File return File_Descriptor; |
|
private |
|
type File_Descriptor is new Integer; |
|
Null_File : constant File_Descriptor := 0; |
First_File : constant File_Descriptor := 1; |
|
type File_Mode is |
(Read_Only, Write_Only, Read_Write, Archived, Corrupt, Lost); |
|
Default_Mode : constant File_Mode := Read_Only; |
Active_Mode : constant File_Mode := Read_Write; |
|
type File_Name is array (1 .. 6) of Character; |
|
Null_String : File_Name := " "; |
String1 : File_Name := "ACVC "; |
String2 : File_Name := " 1995"; |
|
type File_Type is |
record |
Descriptor : File_Descriptor := Null_File; |
Mode : File_Mode := Default_Mode; |
Name : File_Name := Null_String; |
end record; |
|
end C730004_0; |
|
--=================================================================-- |
|
package body C730004_0 is |
|
File_Count : Integer := 0; |
|
function Next_Available_File return File_Descriptor is |
begin |
File_Count := File_Count + 1; |
return (File_Descriptor(File_Count)); -- Type conversion. |
end Next_Available_File; |
|
end C730004_0; |
|
--=================================================================-- |
|
private |
package C730004_0.C730004_1 is -- private child |
|
-- Since full view of the nontagged File_Name is nonlimited in the parent |
-- package, it is not limited in the private child, so concatenation is |
-- available. |
|
System_File_Name : constant File_Name |
:= String1(1..4) & String2(5..6); |
|
-- Since full view of the nontagged File_Type is nonlimited in the parent |
-- package, it is not limited in the private child, so a default expression |
-- is available. |
|
function New_File_Validated (File : File_Type |
:= (Descriptor => First_File, |
Mode => Active_Mode, |
Name => System_File_Name)) |
return Boolean; |
|
-- Since full view of the nontagged File_Type is nonlimited in the parent |
-- package, it is not limited in the private child, so initialization |
-- expression in an object declaration is available. |
|
System_File : File_Type |
:= (Null_File, Read_Only, System_File_Name); |
|
|
end C730004_0.C730004_1; |
|
--=================================================================-- |
|
package body C730004_0.C730004_1 is |
|
function New_File_Validated (File : File_Type |
:= (Descriptor => First_File, |
Mode => Active_Mode, |
Name => System_File_Name)) |
return Boolean is |
Result : Boolean := False; |
begin |
if (File.Descriptor > System_File.Descriptor) and |
(File.Mode in Read_Only .. Read_Write) and (File.Name = "ACVC95") |
then |
Result := True; |
end if; |
|
return (Result); |
|
end New_File_Validated; |
|
end C730004_0.C730004_1; |
|
--=================================================================-- |
|
package C730004_0.C730004_2 is -- public child |
|
-- File_Type is limited here. |
|
procedure Create_File (File : out File_Type); |
|
procedure Modify_File (File : out File_Type); |
|
type File_Dir is limited private; |
|
-- The following three validation functions provide the capability to |
-- check the limited private types defined in the parent and the |
-- private child package from within the client program. |
|
function Validate_Create (File : in File_Type) return Boolean; |
|
function Validate_Modification (File : in File_Type) |
return Boolean; |
|
function Validate_Dir (Dir : in File_Dir) return Boolean; |
|
private |
|
-- Since full view of the nontagged File_Type is nonlimited in the parent |
-- package, it is not limited in the private part of the public child, so |
-- aggregates are available. |
|
Child_File : File_Type |
:= File_Type'(Descriptor => Null_File, |
Mode => Write_Only, |
Name => String2); |
|
-- Since full view of the nontagged component File_Type is nonlimited in |
-- the parent package, it is not limited in the private part of the public |
-- child, so default expressions are available. |
|
type File_Dir is |
record |
Comp : File_Type := Child_File; |
end record; |
|
end C730004_0.C730004_2; |
|
--=================================================================-- |
|
with C730004_0.C730004_1; |
|
package body C730004_0.C730004_2 is |
|
procedure Create_File (File : out File_Type) is |
New_File : File_Type; |
|
begin |
New_File.Descriptor := Next_Available_File; |
New_File.Mode := Default_Mode; |
New_File.Name := C730004_0.C730004_1.System_File_Name; |
|
if C730004_0.C730004_1.New_File_Validated (New_File) then |
File := New_File; |
else |
File := (Null_File, Lost, "MISSED"); |
end if; |
|
end Create_File; |
|
-------------------------------------------------------------- |
procedure Modify_File (File : out File_Type) is |
begin |
File.Descriptor := Next_Available_File; |
File.Mode := Active_Mode; |
File.Name := String1; |
end Modify_File; |
|
-------------------------------------------------------------- |
function Validate_Create (File : in File_Type) return Boolean is |
begin |
if ((File.Descriptor /= Child_File.Descriptor) and |
(File.Mode = Read_Only) and (File.Name = "ACVC95")) |
then |
return True; |
else |
return False; |
end if; |
end Validate_Create; |
|
------------------------------------------------------------------------ |
function Validate_Modification (File : in File_Type) |
return Boolean is |
begin |
if ((File.Descriptor /= C730004_0.C730004_1.System_File.Descriptor) and |
(File.Mode = Read_Write) and (File.Name = "ACVC ")) |
then |
return True; |
else |
return False; |
end if; |
end Validate_Modification; |
|
------------------------------------------------------------------------ |
function Validate_Dir (Dir : in File_Dir) return Boolean is |
begin |
if ((Dir.Comp.Descriptor = C730004_0.C730004_1.System_File.Descriptor) |
and (Dir.Comp.Mode = Write_Only) and (Dir.Comp.Name = String2)) |
then |
return True; |
else |
return False; |
end if; |
end Validate_Dir; |
|
end C730004_0.C730004_2; |
|
--=================================================================-- |
|
with C730004_0.C730004_2; |
with Report; |
|
procedure C730004 is |
|
package File renames C730004_0; |
package File_Ops renames C730004_0.C730004_2; |
|
Validation_File : File.File_Type; |
|
Validation_Dir : File_Ops.File_Dir; |
|
------------------------------------------------------------------------ |
-- Limited File_Type is allowed as an out parameter outside package File. |
|
procedure Call_Modify_File (Modified_File : out File.File_Type) is |
begin |
File_Ops.Modify_File (Modified_File); |
end Call_Modify_File; |
|
begin |
|
Report.Test ("C730004", "Check that for a type declared in a package, " & |
"descendants of the package use the full view " & |
"of the type. Specifically check that full " & |
"view of the limited type is visible only in " & |
"private children and in the private parts and " & |
"bodies of public children"); |
|
File_Ops.Create_File (Validation_File); |
|
if not File_Ops.Validate_Create (Validation_File) then |
Report.Failed ("Incorrect creation of file"); |
end if; |
|
Call_Modify_File (Validation_File); |
|
if not File_Ops.Validate_Modification (Validation_File) then |
Report.Failed ("Incorrect modification of file"); |
end if; |
|
if not File_Ops.Validate_Dir (Validation_Dir) then |
Report.Failed ("Incorrect creation of directory"); |
end if; |
|
Report.Result; |
|
end C730004; |
/c760001.a
0,0 → 1,390
-- C760001.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that Initialize is called for objects and components of |
-- a controlled type when the objects and components are not |
-- assigned explicit initial values. Check this for "simple" controlled |
-- objects, controlled record components and arrays with controlled |
-- components. |
-- |
-- Check that if an explicit initial value is assigned to an object |
-- or component of a controlled type then Initialize is not called. |
-- |
-- TEST DESCRIPTION: |
-- This test derives a type for Ada.Finalization.Controlled, and |
-- overrides the Initialize and Adjust operations for the type. The |
-- intent of the type is that it should carry incremental values |
-- indicating the ordering of events with respect to these (and default |
-- initialization) operations. The body of the test uses these values |
-- to determine that the implicit calls to these subprograms happen |
-- (or don't) at the appropriate times. |
-- |
-- The test further derives types from this "root" type, which are the |
-- actual types used in the test. One of the types is "simply" derived |
-- from the "root" type, the other contains a component of the first |
-- type, thus nesting a controlled object as a record component in |
-- controlled objects. |
-- |
-- The main program declares objects of these types and checks the |
-- values of the components to ascertain that they have been touched |
-- as expected. |
-- |
-- Note that Finalization procedures are provided. This test does not |
-- test that the calls to Finalization are made correctly. The |
-- Finalization procedures are provided to catch an implementation that |
-- calls Finalization at an incorrect time. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 10 Oct 95 SAIC Update and repair for ACVC 2.0.1 |
-- |
--! |
|
---------------------------------------------------------------- C760001_0 |
|
with Ada.Finalization; |
package C760001_0 is |
subtype Unique_ID is Natural; |
function Unique_Value return Unique_ID; |
-- increments each time it's called |
|
function Most_Recent_Unique_Value return Unique_ID; |
-- returns the same value as the most recent call to Unique_Value |
|
type Root_Controlled is new Ada.Finalization.Controlled with record |
My_ID : Unique_ID := Unique_Value; |
My_Init_ID : Unique_ID := Unique_ID'First; |
My_Adj_ID : Unique_ID := Unique_ID'First; |
end record; |
|
procedure Initialize( R: in out Root_Controlled ); |
procedure Adjust ( R: in out Root_Controlled ); |
|
TC_Initialize_Calls_Is_Failing : Boolean := False; |
|
end C760001_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760001_0 is |
|
Global_Unique_Counter : Unique_ID := 0; |
|
function Unique_Value return Unique_ID is |
begin |
Global_Unique_Counter := Global_Unique_Counter +1; |
return Global_Unique_Counter; |
end Unique_Value; |
|
function Most_Recent_Unique_Value return Unique_ID is |
begin |
return Global_Unique_Counter; |
end Most_Recent_Unique_Value; |
|
procedure Initialize( R: in out Root_Controlled ) is |
begin |
if TC_Initialize_Calls_Is_Failing then |
Report.Failed("Initialized incorrectly called"); |
end if; |
R.My_Init_ID := Unique_Value; |
end Initialize; |
|
procedure Adjust( R: in out Root_Controlled ) is |
begin |
R.My_Adj_ID := Unique_Value; |
end Adjust; |
|
end C760001_0; |
|
---------------------------------------------------------------- C760001_1 |
|
with Ada.Finalization; |
with C760001_0; |
package C760001_1 is |
|
type Proc_ID is (None, Init, Adj, Fin); |
|
type Test_Controlled is new C760001_0.Root_Controlled with record |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Test_Controlled ); |
procedure Adjust ( TC: in out Test_Controlled ); |
procedure Finalize ( TC: in out Test_Controlled ); |
|
type Nested_Controlled is new C760001_0.Root_Controlled with record |
Nested : C760001_0.Root_Controlled; |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Nested_Controlled ); |
procedure Adjust ( TC: in out Nested_Controlled ); |
procedure Finalize ( TC: in out Nested_Controlled ); |
|
end C760001_1; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760001_1 is |
|
procedure Initialize( TC: in out Test_Controlled ) is |
begin |
if TC.Last_Proc_Called /= None then |
Report.Failed("Initialize for Test_Controlled"); |
end if; |
TC.Last_Proc_Called := Init; |
C760001_0.Initialize(C760001_0.Root_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Test_Controlled ) is |
begin |
TC.Last_Proc_Called := Adj; |
C760001_0.Adjust(C760001_0.Root_Controlled(TC)); |
end Adjust; |
|
procedure Finalize ( TC: in out Test_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
procedure Initialize( TC: in out Nested_Controlled ) is |
begin |
if TC.Last_Proc_Called /= None then |
Report.Failed("Initialize for Nested_Controlled"); |
end if; |
TC.Last_Proc_Called := Init; |
C760001_0.Initialize(C760001_0.Root_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Nested_Controlled ) is |
begin |
TC.Last_Proc_Called := Adj; |
C760001_0.Adjust(C760001_0.Root_Controlled(TC)); |
end Adjust; |
|
procedure Finalize ( TC: in out Nested_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
end C760001_1; |
|
---------------------------------------------------------------- C760001 |
|
with Report; |
with TCTouch; |
with C760001_0; |
with C760001_1; |
with Ada.Finalization; |
procedure C760001 is |
|
use type C760001_1.Proc_ID; |
|
-- in the first test, test the simple case. Check that a controlled object |
-- causes a call to the procedure Initialize. |
-- Also check that assignment causes a call to Adjust. |
|
procedure Check_Simple_Objects is |
S,T : C760001_1.Test_Controlled; |
begin |
TCTouch.Assert(S.My_ID < S.My_Init_ID,"Default before dispatch"); |
TCTouch.Assert((S.Last_Proc_Called = C760001_1.Init) and |
(T.Last_Proc_Called = C760001_1.Init), |
"Initialize for simple object"); |
S := T; |
TCTouch.Assert((S.Last_Proc_Called = C760001_1.Adj), |
"Adjust for simple object"); |
TCTouch.Assert((S.My_ID = T.My_ID), |
"Simple object My_ID's don't match"); |
TCTouch.Assert((S.My_Init_ID = T.My_Init_ID), |
"Simple object My_Init_ID's don't match"); |
TCTouch.Assert((S.My_Adj_ID > T.My_Adj_ID), |
"Simple object My_Adj_ID's in wrong order"); |
end Check_Simple_Objects; |
|
-- in the second test, test a more complex case, check that a controlled |
-- component of a controlled object gets processed correctly |
|
procedure Check_Nested_Objects is |
NO1 : C760001_1.Nested_Controlled; |
begin |
TCTouch.Assert((NO1.My_ID < NO1.My_Init_Id), |
"Default value order incorrect"); |
TCTouch.Assert((NO1.My_Init_Id > NO1.Nested.My_Init_ID), |
"Initialization call order incorrect"); |
end Check_Nested_Objects; |
|
-- check that objects assigned an initial value at declaration are Adjusted |
-- and NOT Initialized |
|
procedure Check_Objects_With_Initial_Values is |
|
TC_Now : constant C760001_0.Unique_ID := C760001_0.Unique_Value; |
|
A: C760001_1.Test_Controlled := |
( Ada.Finalization.Controlled |
with TC_Now, |
TC_Now, |
TC_Now, |
C760001_1.None); |
|
B: C760001_1.Nested_Controlled := |
( Ada.Finalization.Controlled |
with TC_Now, |
TC_Now, |
TC_Now, |
C760001_0.Root_Controlled(A), |
C760001_1.None); |
|
begin |
-- the implementation may or may not call Adjust for the values |
-- assigned into A and B, |
-- but should NOT call Initialize. |
-- if the value used in the aggregate is overwritten by Initialize, |
-- this indicates failure |
TCTouch.Assert(A.My_Init_Id = TC_Now, |
"Initialize was called for A with initial value"); |
TCTouch.Assert(B.My_Init_Id = TC_Now, |
"Initialize was called for B with initial value"); |
TCTouch.Assert(B.Nested.My_Init_ID = TC_Now, |
"Initialize was called for B.Nested initial value"); |
end Check_Objects_With_Initial_Values; |
|
procedure Check_Array_Case is |
type Array_Simple is array(1..4) of C760001_1.Test_Controlled; |
type Array_Nested is array(1..4) of C760001_1.Nested_Controlled; |
|
Simple_Array_Default : Array_Simple; |
|
Nested_Array_Default : Array_Nested; |
|
TC_A_Bit_Later : C760001_0.Unique_ID; |
|
begin |
TC_A_Bit_Later := C760001_0.Unique_Value; |
for N in 1..4 loop |
TCTouch.Assert(Simple_Array_Default(N).Last_Proc_Called |
= C760001_1.Init, |
"Initialize for array initial value"); |
|
TCTouch.Assert( (Simple_Array_Default(N).My_Init_ID |
> C760001_0.Unique_ID'First) |
and (Simple_Array_Default(N).My_Init_ID |
< TC_A_Bit_Later), |
"Initialize timing for simple array"); |
|
TCTouch.Assert( (Nested_Array_Default(N).My_Init_ID |
> C760001_0.Unique_ID'First) |
and (Nested_Array_Default(N).My_Init_ID |
< TC_A_Bit_Later), |
"Initialize timing for container array"); |
|
TCTouch.Assert(Nested_Array_Default(N).Last_Proc_Called |
= C760001_1.Init, |
"Initialize for nested array (outer) initial value"); |
|
TCTouch.Assert( (Nested_Array_Default(N).Nested.My_Init_ID |
> C760001_0.Unique_ID'First) |
and (Nested_Array_Default(N).Nested.My_Init_ID |
< Nested_Array_Default(N).My_Init_ID), |
"Initialize timing for array content"); |
end loop; |
end Check_Array_Case; |
|
procedure Check_Array_Case_With_Initial_Values is |
|
TC_Now : constant C760001_0.Unique_ID := C760001_0.Unique_Value; |
|
type Array_Simple is array(1..4) of C760001_1.Test_Controlled; |
type Array_Nested is array(1..4) of C760001_1.Nested_Controlled; |
|
Simple_Array_Explicit : Array_Simple := ( 1..4 => ( |
Ada.Finalization.Controlled |
with TC_Now, |
TC_Now, |
TC_Now, |
C760001_1.None ) ); |
|
A : constant C760001_0.Root_Controlled := |
( Ada.Finalization.Controlled |
with others => TC_Now); |
|
Nested_Array_Explicit : Array_Nested := ( 1..4 => ( |
Ada.Finalization.Controlled |
with TC_Now, |
TC_Now, |
TC_Now, |
A, |
C760001_1.None ) ); |
|
begin |
-- the implementation may or may not call Adjust for the values |
-- assigned into Simple_Array_Explicit and Nested_Array_Explicit, |
-- but should NOT call Initialize. |
-- if the value used in the aggregate is overwritten by Initialize, |
-- this indicates failure |
for N in 1..4 loop |
TCTouch.Assert(Simple_Array_Explicit(N).My_Init_ID |
= TC_Now, |
"Initialize was called for array with initial value"); |
TCTouch.Assert(Nested_Array_Explicit(N).My_Init_ID |
= TC_Now, |
"Initialize was called for nested array (outer) with initial value"); |
TCTouch.Assert(Nested_Array_Explicit(N).Nested.My_Init_ID = TC_Now, |
"Initialize was called for nested array (inner) with initial value"); |
end loop; |
end Check_Array_Case_With_Initial_Values; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
begin -- Main test procedure. |
|
Report.Test ("C760001", "Check that Initialize is called for objects " & |
"and components of a controlled type when the " & |
"objects and components are not assigned " & |
"explicit initial values. Check that if an " & |
"explicit initial value is assigned to an " & |
"object or component of a controlled type " & |
"then Initialize is not called" ); |
|
Check_Simple_Objects; |
|
Check_Nested_Objects; |
|
Check_Array_Case; |
|
C760001_0.TC_Initialize_Calls_Is_Failing := True; |
|
Check_Objects_With_Initial_Values; |
|
Check_Array_Case_With_Initial_Values; |
|
Report.Result; |
|
end C760001; |
/c760002.a
0,0 → 1,489
-- C760002.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that assignment to an object of a (non-limited) controlled |
-- type causes the Adjust operation of the type to be called. |
-- Check that Adjust is called after copying the value of the |
-- source expression to the target object. |
-- |
-- Check that Adjust is called for all controlled components when |
-- the containing object is assigned. (Test this for the cases |
-- where the type of the containing object is controlled and |
-- noncontrolled; test this for initialization as well as |
-- assignment statements.) |
-- |
-- Check that for an object of a controlled type with controlled |
-- components, Adjust for each of the components is called before |
-- the containing object is adjusted. |
-- |
-- Check that an Adjust procedure for a Limited_Controlled type is |
-- not called by the implementation. |
-- |
-- TEST DESCRIPTION: |
-- This test is loosely "derived" from C760001. |
-- |
-- Visit Tags: |
-- D - Default value at declaration |
-- d - Default value at declaration, limited root |
-- I - initialize at root controlled |
-- i - initialize at root limited controlled |
-- A - adjust at root controlled |
-- X,Y,Z,x,y,z - used in test body |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 19 Dec 94 SAIC Correct test assertion logic for Sinister case |
-- |
--! |
|
---------------------------------------------------------------- C760002_0 |
|
with Ada.Finalization; |
package C760002_0 is |
subtype Unique_ID is Natural; |
function Unique_Value return Unique_ID; |
-- increments each time it's called |
|
function Most_Recent_Unique_Value return Unique_ID; |
-- returns the same value as the most recent call to Unique_Value |
|
type Root is tagged record |
My_ID : Unique_ID := Unique_Value; |
Visit_Tag : Character := 'D'; -- Default |
end record; |
|
procedure Initialize( R: in out Root ); |
procedure Adjust ( R: in out Root ); |
|
type Root_Controlled is new Ada.Finalization.Controlled with record |
My_ID : Unique_ID := Unique_Value; |
Visit_Tag : Character := 'D'; ---------------------------------------- D |
end record; |
|
procedure Initialize( R: in out Root_Controlled ); |
procedure Adjust ( R: in out Root_Controlled ); |
|
type Root_Limited_Controlled is |
new Ada.Finalization.Limited_Controlled with record |
My_ID : Unique_ID := Unique_Value; |
Visit_Tag : Character := 'd'; ---------------------------------------- d |
end record; |
|
procedure Initialize( R: in out Root_Limited_Controlled ); |
procedure Adjust ( R: in out Root_Limited_Controlled ); |
|
end C760002_0; |
|
with Report; |
package body C760002_0 is |
|
Global_Unique_Counter : Unique_ID := 0; |
|
function Unique_Value return Unique_ID is |
begin |
Global_Unique_Counter := Global_Unique_Counter +1; |
return Global_Unique_Counter; |
end Unique_Value; |
|
function Most_Recent_Unique_Value return Unique_ID is |
begin |
return Global_Unique_Counter; |
end Most_Recent_Unique_Value; |
|
procedure Initialize( R: in out Root ) is |
begin |
Report.Failed("Initialize called for Non_Controlled type"); |
end Initialize; |
|
procedure Adjust ( R: in out Root ) is |
begin |
Report.Failed("Adjust called for Non_Controlled type"); |
end Adjust; |
|
procedure Initialize( R: in out Root_Controlled ) is |
begin |
R.Visit_Tag := 'I'; --------------------------------------------------- I |
end Initialize; |
|
procedure Adjust( R: in out Root_Controlled ) is |
begin |
R.Visit_Tag := 'A'; --------------------------------------------------- A |
end Adjust; |
|
procedure Initialize( R: in out Root_Limited_Controlled ) is |
begin |
R.Visit_Tag := 'i'; --------------------------------------------------- i |
end Initialize; |
|
procedure Adjust( R: in out Root_Limited_Controlled ) is |
begin |
Report.Failed("Adjust called for Limited_Controlled type"); |
end Adjust; |
|
end C760002_0; |
|
---------------------------------------------------------------- C760002_1 |
|
with Ada.Finalization; |
with C760002_0; |
package C760002_1 is |
|
type Proc_ID is (None, Init, Adj, Fin); |
|
type Test_Controlled is new C760002_0.Root_Controlled with record |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Test_Controlled ); |
procedure Adjust ( TC: in out Test_Controlled ); |
procedure Finalize ( TC: in out Test_Controlled ); |
|
type Nested_Controlled is new C760002_0.Root_Controlled with record |
Nested : C760002_0.Root_Controlled; |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Nested_Controlled ); |
procedure Adjust ( TC: in out Nested_Controlled ); |
procedure Finalize ( TC: in out Nested_Controlled ); |
|
type Test_Limited_Controlled is |
new C760002_0.Root_Limited_Controlled with record |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Test_Limited_Controlled ); |
procedure Adjust ( TC: in out Test_Limited_Controlled ); |
procedure Finalize ( TC: in out Test_Limited_Controlled ); |
|
type Nested_Limited_Controlled is |
new C760002_0.Root_Limited_Controlled with record |
Nested : C760002_0.Root_Limited_Controlled; |
Last_Proc_Called: Proc_ID := None; |
end record; |
|
procedure Initialize( TC: in out Nested_Limited_Controlled ); |
procedure Adjust ( TC: in out Nested_Limited_Controlled ); |
procedure Finalize ( TC: in out Nested_Limited_Controlled ); |
|
end C760002_1; |
|
with Report; |
package body C760002_1 is |
|
procedure Initialize( TC: in out Test_Controlled ) is |
begin |
TC.Last_Proc_Called := Init; |
C760002_0.Initialize(C760002_0.Root_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Test_Controlled ) is |
begin |
TC.Last_Proc_Called := Adj; |
C760002_0.Adjust(C760002_0.Root_Controlled(TC)); |
end Adjust; |
|
procedure Finalize ( TC: in out Test_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
procedure Initialize( TC: in out Nested_Controlled ) is |
begin |
TC.Last_Proc_Called := Init; |
C760002_0.Initialize(C760002_0.Root_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Nested_Controlled ) is |
begin |
TC.Last_Proc_Called := Adj; |
C760002_0.Adjust(C760002_0.Root_Controlled(TC)); |
end Adjust; |
|
procedure Finalize ( TC: in out Nested_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
procedure Initialize( TC: in out Test_Limited_Controlled ) is |
begin |
TC.Last_Proc_Called := Init; |
C760002_0.Initialize(C760002_0.Root_Limited_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Test_Limited_Controlled ) is |
begin |
Report.Failed("Adjust called for Test_Limited_Controlled"); |
end Adjust; |
|
procedure Finalize ( TC: in out Test_Limited_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
procedure Initialize( TC: in out Nested_Limited_Controlled ) is |
begin |
TC.Last_Proc_Called := Init; |
C760002_0.Initialize(C760002_0.Root_Limited_Controlled(TC)); |
end Initialize; |
|
procedure Adjust ( TC: in out Nested_Limited_Controlled ) is |
begin |
Report.Failed("Adjust called for Nested_Limited_Controlled"); |
end Adjust; |
|
procedure Finalize ( TC: in out Nested_Limited_Controlled ) is |
begin |
TC.Last_Proc_Called := Fin; |
end Finalize; |
|
end C760002_1; |
|
---------------------------------------------------------------- C760002 |
|
with Report; |
with TCTouch; |
with C760002_0; |
with C760002_1; |
with Ada.Finalization; |
procedure C760002 is |
|
use type C760002_1.Proc_ID; |
|
-- in the first test, test the simple cases. |
-- Also check that assignment causes a call to Adjust for a controlled |
-- object. Check that assignment of a non-controlled object does not call |
-- an Adjust procedure. |
|
procedure Check_Simple_Objects is |
|
A,B : C760002_0.Root; |
S,T : C760002_1.Test_Controlled; |
Q : C760002_1.Test_Limited_Controlled; -- Adjust call shouldn't happen |
begin |
|
S := T; |
|
TCTouch.Assert((S.Last_Proc_Called = C760002_1.Adj), |
"Adjust for simple object"); |
TCTouch.Assert((S.My_ID = T.My_ID), |
"Assignment failed for simple object"); |
|
-- Check that adjust was called |
TCTouch.Assert((S.Visit_Tag = 'A'), "Adjust timing incorrect"); |
|
-- Check that Adjust has not been called |
TCTouch.Assert_Not((T.Visit_Tag = 'A'), "Adjust incorrectly called"); |
|
-- Check that Adjust does not get called |
A.My_ID := A.My_ID +1; |
B := A; -- see: Adjust: Report.Failed |
|
end Check_Simple_Objects; |
|
-- in the second test, test a more complex case, check that a controlled |
-- component of a controlled object gets processed correctly |
|
procedure Check_Nested_Objects is |
NO1 : C760002_1.Nested_Controlled; |
NO2 : C760002_1.Nested_Controlled := NO1; |
|
begin |
|
-- NO2 should be flagged with adjust markers |
TCTouch.Assert((NO2.Last_Proc_Called = C760002_1.Adj), |
"Adjust not called for NO2 enclosure declaration"); |
TCTouch.Assert((NO2.Nested.Visit_Tag = 'A'), |
"Adjust not called for NO2 enclosed declaration"); |
|
NO2.Visit_Tag := 'x'; |
NO2.Nested.Visit_Tag := 'y'; |
|
NO1 := NO2; |
|
-- NO1 should be flagged with adjust markers |
TCTouch.Assert((NO1.Visit_Tag = 'A'), |
"Adjust not called for NO1 enclosure declaration"); |
TCTouch.Assert((NO1.Nested.Visit_Tag = 'A'), |
"Adjust not called for NO1 enclosed declaration"); |
|
end Check_Nested_Objects; |
|
procedure Check_Array_Case is |
type Array_Simple is array(1..4) of C760002_1.Test_Controlled; |
type Array_Nested is array(1..4) of C760002_1.Nested_Controlled; |
|
Left,Right : Array_Simple; |
Overlap : Array_Simple := Left; |
|
Sinister,Dexter : Array_Nested; |
Underlap : Array_Nested := Sinister; |
|
Now : Natural; |
|
begin |
|
-- get a current unique value since initializations |
Now := C760002_0.Unique_Value; |
|
-- check results of declarations |
for N in 1..4 loop |
TCTouch.Assert(Left(N).My_Id < Now, |
"Initialize for array initial value"); |
TCTouch.Assert(Overlap(N).My_Id < Now, |
"Adjust for nested array (outer) initial value"); |
TCTouch.Assert(Sinister(N).Nested.My_Id < Now, |
"Initialize for nested array (inner) initial value"); |
TCTouch.Assert(Sinister(N).My_Id < Sinister(N).Nested.My_Id, |
"Initialize for enclosure should be after enclosed"); |
TCTouch.Assert(Overlap(N).Visit_Tag = 'A',"Adjust at declaration"); |
TCTouch.Assert(Underlap(N).Nested.Visit_Tag = 'A', |
"Adjust at declaration, nested object"); |
end loop; |
|
-- set visit tags |
for O in 1..4 loop |
Overlap(O).Visit_Tag := 'X'; |
Underlap(O).Visit_Tag := 'Y'; |
Underlap(O).Nested.Visit_Tag := 'y'; |
end loop; |
|
-- check that overlapping assignments don't cause odd grief |
Overlap(1..3) := Overlap(2..4); |
Underlap(2..4) := Underlap(1..3); |
|
for M in 2..3 loop |
TCTouch.Assert(Overlap(M).Last_Proc_Called = C760002_1.Adj, |
"Adjust for overlap"); |
TCTouch.Assert(Overlap(M).Visit_Tag = 'A', |
"Adjust for overlap ID"); |
TCTouch.Assert(Underlap(M).Last_Proc_Called = C760002_1.Adj, |
"Adjust for Underlap"); |
TCTouch.Assert(Underlap(M).Nested.Visit_Tag = 'A', |
"Adjust for Underlaps nested ID"); |
end loop; |
|
end Check_Array_Case; |
|
procedure Check_Access_Case is |
type TC_Ref is access C760002_1.Test_Controlled; |
type NC_Ref is access C760002_1.Nested_Controlled; |
type TL_Ref is access C760002_1.Test_Limited_Controlled; |
type NL_Ref is access C760002_1.Nested_Limited_Controlled; |
|
A,B : TC_Ref; |
C,D : NC_Ref; |
E : TL_Ref; |
F : NL_Ref; |
|
begin |
|
A := new C760002_1.Test_Controlled; |
B := new C760002_1.Test_Controlled'( A.all ); |
|
C := new C760002_1.Nested_Controlled; |
D := new C760002_1.Nested_Controlled'( C.all ); |
|
E := new C760002_1.Test_Limited_Controlled; |
F := new C760002_1.Nested_Limited_Controlled; |
|
TCTouch.Assert(A.Visit_Tag = 'I',"TC Allocation"); |
TCTouch.Assert(B.Visit_Tag = 'A',"TC Allocation, with value"); |
|
TCTouch.Assert(C.Visit_Tag = 'I',"NC Allocation"); |
TCTouch.Assert(C.Nested.Visit_Tag = 'I',"NC Allocation, Nested"); |
TCTouch.Assert(D.Visit_Tag = 'A',"NC Allocation, with value"); |
TCTouch.Assert(D.Nested.Visit_Tag = 'A', |
"NC Allocation, Nested, with value"); |
|
TCTouch.Assert(E.Visit_Tag = 'i',"TL Allocation"); |
TCTouch.Assert(F.Visit_Tag = 'i',"NL Allocation"); |
|
A.all := B.all; |
C.all := D.all; |
|
TCTouch.Assert(A.Visit_Tag = 'A',"TC Assignment"); |
TCTouch.Assert(C.Visit_Tag = 'A',"NC Assignment"); |
TCTouch.Assert(C.Nested.Visit_Tag = 'A',"NC Assignment, Nested"); |
|
end Check_Access_Case; |
|
procedure Check_Access_Limited_Array_Case is |
type Array_Simple is array(1..4) of C760002_1.Test_Limited_Controlled; |
type AS_Ref is access Array_Simple; |
type Array_Nested is array(1..4) of C760002_1.Nested_Limited_Controlled; |
type AN_Ref is access Array_Nested; |
|
Simple_Array_Limited : AS_Ref; |
|
Nested_Array_Limited : AN_Ref; |
|
begin |
|
Simple_Array_Limited := new Array_Simple; |
|
Nested_Array_Limited := new Array_Nested; |
|
for N in 1..4 loop |
TCTouch.Assert(Simple_Array_Limited(N).Last_Proc_Called |
= C760002_1.Init, |
"Initialize for array initial value"); |
TCTouch.Assert(Nested_Array_Limited(N).Last_Proc_Called |
= C760002_1.Init, |
"Initialize for nested array (outer) initial value"); |
TCTouch.Assert(Nested_Array_Limited(N).Nested.Visit_Tag = 'i', |
"Initialize for nested array (inner) initial value"); |
end loop; |
end Check_Access_Limited_Array_Case; |
|
begin -- Main test procedure. |
|
Report.Test ("C760002", "Check that assignment causes the Adjust " & |
"operation of the type to be called. Check " & |
"that Adjust is called after copying the " & |
"value of the source expression to the target " & |
"object. Check that Adjust is called for all " & |
"controlled components when the containing " & |
"object is assigned. Check that Adjust is " & |
"called for components before the containing " & |
"object is adjusted. Check that Adjust is not " & |
"called for a Limited_Controlled type by the " & |
"implementation" ); |
|
Check_Simple_Objects; |
|
Check_Nested_Objects; |
|
Check_Array_Case; |
|
Check_Access_Case; |
|
Check_Access_Limited_Array_Case; |
|
Report.Result; |
|
end C760002; |
/c761010.a
0,0 → 1,447
-- C761010.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- The Ada Conformity Assessment Authority (ACAA) holds unlimited |
-- rights in the software and documentation contained herein. Unlimited |
-- rights are the same as those granted by the U.S. Government for older |
-- parts of the Ada Conformity Assessment Test Suite, and are defined |
-- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA |
-- intends to confer upon all recipients unlimited rights equal to those |
-- held by the ACAA. These rights include rights to use, duplicate, |
-- release or disclose the released technical data and computer software |
-- in whole or in part, in any manner and for any purpose whatsoever, and |
-- to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE |
-- Check the requirements of the new 7.6(17.1/1) from Technical |
-- Corrigendum 1 (originally discussed as AI95-00083). |
-- This new paragraph requires that the initialization of an object with |
-- an aggregate does not involve calls to Adjust. |
-- |
-- TEST DESCRIPTION |
-- We include several cases of initialization: |
-- - Explicit initialization of an object declared by an |
-- object declaration. |
-- - Explicit initialization of a heap object. |
-- - Default initialization of a record component. |
-- - Initialization of a formal parameter during a call. |
-- - Initialization of a formal parameter during a call with |
-- a defaulted parameter. |
-- - Lots of nested records, arrays, and pointers. |
-- In this test, Initialize should never be called, because we |
-- never declare a default-initialized controlled object (although |
-- we do declare default-initialized records containing controlled |
-- objects, with default expressions for the components). |
-- Adjust should never be called, because every initialization |
-- is via an aggregate. Finalize is called, because the objects |
-- themselves need to be finalized. |
-- Thus, Initialize and Adjust call Failed. |
-- In some of the cases, these procedures will not yet be elaborated, |
-- anyway. |
-- |
-- CHANGE HISTORY: |
-- 29 JUN 1999 RAD Initial Version |
-- 23 SEP 1999 RLB Improved comments, renamed, issued. |
-- 10 APR 2000 RLB Corrected errors in comments and text, fixed |
-- discriminant error. Fixed so that Report.Test |
-- is called before any Report.Failed call. Added |
-- a marker so that the failed subtest can be |
-- determined. |
-- 26 APR 2000 RAD Try to defeat optimizations. |
-- 04 AUG 2000 RLB Corrected error in Check_Equal. |
-- 18 AUG 2000 RLB Removed dubious main subprogram renames (see AI-172). |
-- 19 JUL 2002 RLB Fixed to avoid calling comment after Report.Result. |
-- |
--! |
|
with Ada; use Ada; |
with Report; use Report; pragma Elaborate_All(Report); |
with Ada.Finalization; |
package C761010_1 is |
pragma Elaborate_Body; |
function Square(X: Integer) return Integer; |
private |
type TC_Control is new Ada.Finalization.Limited_Controlled with null record; |
procedure Initialize (Object : in out TC_Control); |
procedure Finalize (Object : in out TC_Control); |
TC_Finalize_Called : Boolean := False; |
end C761010_1; |
|
package body C761010_1 is |
function Square(X: Integer) return Integer is |
begin |
return X**2; |
end Square; |
|
procedure Initialize (Object : in out TC_Control) is |
begin |
Test("C761010_1", |
"Check that Adjust is not called" |
& " when aggregates are used to initialize objects"); |
end Initialize; |
|
procedure Finalize (Object : in out TC_Control) is |
begin |
if not TC_Finalize_Called then |
Failed("Var_Strings Finalize never called"); |
end if; |
Result; |
end Finalize; |
|
TC_Test : TC_Control; -- Starts test; finalization ends test. |
end C761010_1; |
|
with Ada.Finalization; |
package C761010_1.Var_Strings is |
type Var_String(<>) is private; |
|
Some_String: constant Var_String; |
|
function "=" (X, Y: Var_String) return Boolean; |
|
procedure Check_Equal(X, Y: Var_String); |
-- Calls to this are used to defeat optimizations |
-- that might otherwise defeat the purpose of the |
-- test. I'm talking about the optimization of removing |
-- unused controlled objects. |
|
private |
|
type String_Ptr is access constant String; |
|
type Var_String(Length: Natural) is new Finalization.Controlled with |
record |
Comp_1: String_Ptr := new String'(2..Square(Length)-1 => 'x'); |
Comp_2: String_Ptr(1..Length) := null; |
Comp_3: String(Length..Length) := (others => '.'); |
TC_Lab: Character := '1'; |
end record; |
procedure Initialize(X: in out Var_String); |
procedure Adjust(X: in out Var_String); |
procedure Finalize(X: in out Var_String); |
|
Some_String: constant Var_String |
:= (Finalization.Controlled with Length => 1, |
Comp_1 => null, |
Comp_2 => null, |
Comp_3 => "x", |
TC_Lab => 'A'); |
|
Another_String: constant Var_String |
:= (Finalization.Controlled with Length => 10, |
Comp_1 => Some_String.Comp_2, |
Comp_2 => new String'("1234567890"), |
Comp_3 => "x", |
TC_Lab => 'B'); |
|
end C761010_1.Var_Strings; |
|
package C761010_1.Var_Strings.Types is |
|
type Ptr is access all Var_String; |
Ptr_Const: constant Ptr; |
|
type Ptr_Arr is array(Positive range <>) of Ptr; |
Ptr_Arr_Const: constant Ptr_Arr; |
|
type Ptr_Rec(N_Strings: Natural) is |
record |
Ptrs: Ptr_Arr(1..N_Strings); |
end record; |
Ptr_Rec_Const: constant Ptr_Rec; |
|
private |
|
Ptr_Const: constant Ptr := new Var_String' |
(Finalization.Controlled with |
Length => 1, |
Comp_1 => null, |
Comp_2 => null, |
Comp_3 => (others => ' '), |
TC_Lab => 'C'); |
|
Ptr_Arr_Const: constant Ptr_Arr := |
(1 => new Var_String' |
(Finalization.Controlled with |
Length => 1, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'D')); |
|
Ptr_Rec_Var: Ptr_Rec := |
(3, |
(1..2 => null, |
3 => new Var_String' |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'E'))); |
|
Ptr_Rec_Const: constant Ptr_Rec := |
(3, |
(1..2 => null, |
3 => new Var_String' |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'F'))); |
|
type Arr is array(Positive range <>) of Var_String(Length => 2); |
|
Arr_Var: Arr := |
(1 => (Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'G')); |
|
type Rec(N_Strings: Natural) is |
record |
Ptrs: Ptr_Rec(N_Strings); |
Strings: Arr(1..N_Strings) := |
(others => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'H')); |
end record; |
|
Default_Init_Rec_Var: Rec(N_Strings => 10); |
Empty_Default_Init_Rec_Var: Rec(N_Strings => 0); |
|
Rec_Var: Rec(N_Strings => 2) := |
(N_Strings => 2, |
Ptrs => |
(2, |
(1..1 => null, |
2 => new Var_String' |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'J'))), |
Strings => |
(1 => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'K'), |
others => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'L'))); |
|
procedure Check_Equal(X, Y: Rec); |
|
end C761010_1.Var_Strings.Types; |
|
package body C761010_1.Var_Strings.Types is |
|
-- Check that parameter passing doesn't create new objects, |
-- and therefore doesn't need extra Adjusts or Finalizes. |
|
procedure Check_Equal(X, Y: Rec) is |
-- We assume that the arguments should be equal. |
-- But we cannot assume that pointer values are the same. |
begin |
if X.N_Strings /= Y.N_Strings then |
Failed("Records should be equal (1)"); |
else |
for I in 1 .. X.N_Strings loop |
if X.Ptrs.Ptrs(I) /= Y.Ptrs.Ptrs(I) then |
if X.Ptrs.Ptrs(I) = null or else |
Y.Ptrs.Ptrs(I) = null or else |
X.Ptrs.Ptrs(I).all /= Y.Ptrs.Ptrs(I).all then |
Failed("Records should be equal (2)"); |
end if; |
end if; |
if X.Strings(I) /= Y.Strings(I) then |
Failed("Records should be equal (3)"); |
end if; |
end loop; |
end if; |
end Check_Equal; |
|
procedure My_Check_Equal |
(X: Rec := Rec_Var; |
Y: Rec := |
(N_Strings => 2, |
Ptrs => |
(2, |
(1..1 => null, |
2 => new Var_String' |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'M'))), |
Strings => |
(1 => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'N'), |
others => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'O')))) |
renames Check_Equal; |
begin |
|
My_Check_Equal; |
|
Check_Equal(Rec_Var, |
(N_Strings => 2, |
Ptrs => |
(2, |
(1..1 => null, |
2 => new Var_String' |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'P'))), |
Strings => |
(1 => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'Q'), |
others => |
(Finalization.Controlled with |
Length => 2, |
Comp_1 => new String'("abcdefghij"), |
Comp_2 => null, |
Comp_3 => (2..2 => ' '), |
TC_Lab => 'R')))); |
|
-- Use the objects to avoid optimizations. |
|
Check_Equal(Ptr_Const.all, Ptr_Const.all); |
Check_Equal(Ptr_Arr_Const(1).all, Ptr_Arr_Const(1).all); |
Check_Equal(Ptr_Rec_Const.Ptrs(Ptr_Rec_Const.N_Strings).all, |
Ptr_Rec_Const.Ptrs(Ptr_Rec_Const.N_Strings).all); |
Check_Equal(Ptr_Rec_Var.Ptrs(Ptr_Rec_Var.N_Strings).all, |
Ptr_Rec_Var.Ptrs(Ptr_Rec_Var.N_Strings).all); |
|
if Report.Equal (3, 2) then |
-- Can't get here. |
Check_Equal (Arr_Var(1), Default_Init_Rec_Var.Strings(1)); |
Check_Equal (Arr_Var(1), Empty_Default_Init_Rec_Var.Strings(1)); |
end if; |
|
end C761010_1.Var_Strings.Types; |
|
with C761010_1.Var_Strings; |
with C761010_1.Var_Strings.Types; |
procedure C761010_1.Main is |
begin |
-- Report.Test is called by the elaboration of C761010_1, and |
-- Report.Result is called by the finalization of C761010_1. |
-- This will happen before any objects are created, and after any |
-- are finalized. |
null; |
end C761010_1.Main; |
|
with C761010_1.Main; |
procedure C761010 is |
begin |
C761010_1.Main; |
end C761010; |
|
package body C761010_1.Var_Strings is |
|
Some_Error: exception; |
|
procedure Initialize(X: in out Var_String) is |
begin |
Failed("Initialize should never be called"); |
raise Some_Error; |
end Initialize; |
|
procedure Adjust(X: in out Var_String) is |
begin |
Failed("Adjust should never be called - case " & X.TC_Lab); |
raise Some_Error; |
end Adjust; |
|
procedure Finalize(X: in out Var_String) is |
begin |
Comment("Finalize called - case " & X.TC_Lab); |
C761010_1.TC_Finalize_Called := True; |
end Finalize; |
|
function "=" (X, Y: Var_String) return Boolean is |
-- Don't check the TC_Lab component, but do check the contents of the |
-- access values. |
begin |
if X.Length /= Y.Length then |
return False; |
end if; |
if X.Comp_3 /= Y.Comp_3 then |
return False; |
end if; |
if X.Comp_1 /= Y.Comp_1 then |
-- Still OK if the values are the same. |
if X.Comp_1 = null or else |
Y.Comp_1 = null or else |
X.Comp_1.all /= Y.Comp_1.all then |
return False; |
--else OK. |
end if; |
end if; |
if X.Comp_2 /= Y.Comp_2 then |
-- Still OK if the values are the same. |
if X.Comp_2 = null or else |
Y.Comp_2 = null or else |
X.Comp_2.all /= Y.Comp_2.all then |
return False; |
end if; |
end if; |
return True; |
end "="; |
|
procedure Check_Equal(X, Y: Var_String) is |
begin |
if X /= Y then |
Failed("Check_Equal of Var_String"); |
end if; |
end Check_Equal; |
|
begin |
Check_Equal(Another_String, Another_String); |
end C761010_1.Var_Strings; |
/c761011.a
0,0 → 1,410
-- C761011.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- The Ada Conformity Assessment Authority (ACAA) holds unlimited |
-- rights in the software and documentation contained herein. Unlimited |
-- rights are the same as those granted by the U.S. Government for older |
-- parts of the Ada Conformity Assessment Test Suite, and are defined |
-- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA |
-- intends to confer upon all recipients unlimited rights equal to those |
-- held by the ACAA. These rights include rights to use, duplicate, |
-- release or disclose the released technical data and computer software |
-- in whole or in part, in any manner and for any purpose whatsoever, and |
-- to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that if a Finalize propagates an exception, other Finalizes due |
-- to be performed are performed. |
-- Case 1: A Finalize invoked due to the end of execution of |
-- a master. (Defect Report 8652/0023, as reflected in Technical |
-- Corrigendum 1). |
-- Case 2: A Finalize invoked due to finalization of an anonymous |
-- object. (Defect Report 8652/0023, as reflected in Technical |
-- Corrigendum 1). |
-- Case 3: A Finalize invoked due to the transfer of control |
-- due to an exit statement. |
-- Case 4: A Finalize invoked due to the transfer of control |
-- due to a goto statement. |
-- Case 5: A Finalize invoked due to the transfer of control |
-- due to a return statement. |
-- Case 6: A Finalize invoked due to the transfer of control |
-- due to raises an exception. |
-- |
-- |
-- CHANGE HISTORY: |
-- 29 JAN 2001 PHL Initial version |
-- 15 MAR 2001 RLB Readied for release; added optimization blockers. |
-- Added test cases for paragraphs 18 and 19 of the |
-- standard (the previous tests were withdrawn). |
-- |
--! |
with Ada.Finalization; |
use Ada.Finalization; |
package C761011_0 is |
|
type Ctrl (D : Boolean) is new Ada.Finalization.Controlled with |
record |
Finalized : Boolean := False; |
case D is |
when False => |
C1 : Integer; |
when True => |
C2 : Float; |
end case; |
end record; |
|
function Create (Id : Integer) return Ctrl; |
procedure Finalize (Obj : in out Ctrl); |
function Was_Finalized (Id : Integer) return Boolean; |
procedure Use_It (Obj : in Ctrl); |
-- Use Obj to prevent optimization. |
|
end C761011_0; |
|
with Report; |
use Report; |
package body C761011_0 is |
|
User_Error : exception; |
|
Finalize_Called : array (0 .. 50) of Boolean := (others => False); |
|
function Create (Id : Integer) return Ctrl is |
Obj : Ctrl (Boolean'Val (Id mod Ident_Int (2))); |
begin |
case Obj.D is |
when False => |
Obj.C1 := Ident_Int (Id); |
when True => |
Obj.C2 := Float (Ident_Int (Id + Ident_Int (Id))); |
end case; |
return Obj; |
end Create; |
|
procedure Finalize (Obj : in out Ctrl) is |
begin |
if not Obj.Finalized then |
Obj.Finalized := True; |
if Obj.D then |
if Integer (Obj.C2 / 2.0) mod Ident_Int (10) = |
Ident_Int (3) then |
raise User_Error; |
else |
Finalize_Called (Integer (Obj.C2) / 2) := True; |
end if; |
else |
if Obj.C1 mod Ident_Int (10) = Ident_Int (0) then |
raise Tasking_Error; |
else |
Finalize_Called (Obj.C1) := True; |
end if; |
end if; |
end if; |
end Finalize; |
|
function Was_Finalized (Id : Integer) return Boolean is |
begin |
return Finalize_Called (Ident_Int (Id)); |
end Was_Finalized; |
|
procedure Use_It (Obj : in Ctrl) is |
-- Use Obj to prevent optimization. |
begin |
case Obj.D is |
when True => |
if not Equal (Boolean'Pos(Obj.Finalized), |
Boolean'Pos(Obj.Finalized)) then |
Failed ("Identity check - 1"); |
end if; |
when False => |
if not Equal (Obj.C1, Obj.C1) then |
Failed ("Identity check - 2"); |
end if; |
end case; |
end Use_It; |
|
end C761011_0; |
|
with Ada.Exceptions; |
use Ada.Exceptions; |
with Ada.Finalization; |
with C761011_0; |
use C761011_0; |
with Report; |
use Report; |
procedure C761011 is |
begin |
Test |
("C761011", |
" Check that if a finalize propagates an exception, other finalizes " & |
"due to be performed are performed"); |
|
Normal: -- Case 1 |
begin |
declare |
Obj1 : Ctrl := Create (Ident_Int (1)); |
Obj2 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (2)); |
Obj3 : Ctrl := |
(Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float (Ident_Int |
(3))); -- Finalization: User_Error |
Obj4 : Ctrl := Create (Ident_Int (4)); |
begin |
Comment ("Finalization of normal object"); |
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
Use_It (Obj4); |
end; |
Failed ("No exception raised by finalization of normal object"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (1)) or |
not Was_Finalized (Ident_Int (2)) or |
not Was_Finalized (Ident_Int (4)) then |
Failed ("Missing finalizations - 1"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 1"); |
end Normal; |
|
Anon: -- Case 2 |
begin |
declare |
Obj1 : Ctrl := (Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float (Ident_Int (5))); |
Obj2 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (6)); |
Obj3 : Ctrl := (Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float (Ident_Int (7))); |
Obj4 : Ctrl := Create (Ident_Int (8)); |
begin |
Comment ("Finalization of anonymous object"); |
|
-- The finalization of the anonymous object below will raise |
-- Tasking_Error. |
if Create (Ident_Int (10)).C1 /= Ident_Int (10) then |
Failed ("Incorrect construction of an anonymous object"); |
end if; |
Failed ("Anonymous object not finalized at the end of the " & |
"enclosing statement"); |
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
Use_It (Obj4); |
end; |
Failed ("No exception raised by finalization of an anonymous " & |
"object of a function"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (5)) or |
not Was_Finalized (Ident_Int (6)) or |
not Was_Finalized (Ident_Int (7)) or |
not Was_Finalized (Ident_Int (8)) then |
Failed ("Missing finalizations - 2"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 2"); |
end Anon; |
|
An_Exit: -- Case 3 |
begin |
for Counter in 1 .. 4 loop |
declare |
Obj1 : Ctrl := Create (Ident_Int (11)); |
Obj2 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (12)); |
Obj3 : Ctrl := |
(Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float ( |
Ident_Int(13))); -- Finalization: User_Error |
Obj4 : Ctrl := Create (Ident_Int (14)); |
begin |
Comment ("Finalization because of exit of loop"); |
|
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
Use_It (Obj4); |
|
exit when not Ident_Bool (Obj2.D); |
|
Failed ("Exit not taken"); |
end; |
end loop; |
Failed ("No exception raised by finalization on exit"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (11)) or |
not Was_Finalized (Ident_Int (12)) or |
not Was_Finalized (Ident_Int (14)) then |
Failed ("Missing finalizations - 3"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 3"); |
end An_Exit; |
|
A_Goto: -- Case 4 |
begin |
declare |
Obj1 : Ctrl := Create (Ident_Int (15)); |
Obj2 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (0)); |
-- Finalization: Tasking_Error |
Obj3 : Ctrl := Create (Ident_Int (16)); |
Obj4 : Ctrl := (Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float (Ident_Int (17))); |
begin |
Comment ("Finalization because of goto statement"); |
|
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
Use_It (Obj4); |
|
if Ident_Bool (Obj4.D) then |
goto Continue; |
end if; |
|
Failed ("Goto not taken"); |
end; |
<<Continue>> |
Failed ("No exception raised by finalization on goto"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (15)) or |
not Was_Finalized (Ident_Int (16)) or |
not Was_Finalized (Ident_Int (17)) then |
Failed ("Missing finalizations - 4"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 4"); |
end A_Goto; |
|
A_Return: -- Case 5 |
declare |
procedure Do_Something is |
Obj1 : Ctrl := Create (Ident_Int (18)); |
Obj2 : Ctrl := (Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float (Ident_Int (19))); |
Obj3 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (20)); |
-- Finalization: Tasking_Error |
begin |
Comment ("Finalization because of return statement"); |
|
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
|
if not Ident_Bool (Obj3.D) then |
return; |
end if; |
|
Failed ("Return not taken"); |
end Do_Something; |
begin |
Do_Something; |
Failed ("No exception raised by finalization on return statement"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (18)) or |
not Was_Finalized (Ident_Int (19)) then |
Failed ("Missing finalizations - 5"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 5"); |
end A_Return; |
|
Except: -- Case 6 |
declare |
Funky_Error : exception; |
|
procedure Do_Something is |
Obj1 : Ctrl := |
(Ada.Finalization.Controlled with |
D => True, |
Finalized => Ident_Bool (False), |
C2 => 2.0 * Float ( |
Ident_Int(23))); -- Finalization: User_Error |
Obj2 : Ctrl := Create (Ident_Int (24)); |
Obj3 : Ctrl := Create (Ident_Int (25)); |
Obj4 : constant Ctrl := (Ada.Finalization.Controlled with |
D => False, |
Finalized => Ident_Bool (False), |
C1 => Ident_Int (26)); |
begin |
Comment ("Finalization because of exception propagation"); |
|
Use_It (Obj1); -- Prevent optimization of Objects. |
Use_It (Obj2); -- (Critical if AI-147 is adopted.) |
Use_It (Obj3); |
Use_It (Obj4); |
|
if not Ident_Bool (Obj4.D) then |
raise Funky_Error; |
end if; |
|
Failed ("Exception not raised"); |
end Do_Something; |
begin |
Do_Something; |
Failed ("No exception raised by finalization on exception " & |
"propagation"); |
exception |
when Program_Error => |
if not Was_Finalized (Ident_Int (24)) or |
not Was_Finalized (Ident_Int (25)) or |
not Was_Finalized (Ident_Int (26)) then |
Failed ("Missing finalizations - 6"); |
end if; |
when Funky_Error => |
Failed ("Wrong exception propagated"); |
-- Should be Program_Error (7.6.1(19)). |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Message (E) & " - 6"); |
end Except; |
|
Result; |
end C761011; |
|
/c761012.a
0,0 → 1,151
-- C761012.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- The Ada Conformity Assessment Authority (ACAA) holds unlimited |
-- rights in the software and documentation contained herein. Unlimited |
-- rights are the same as those granted by the U.S. Government for older |
-- parts of the Ada Conformity Assessment Test Suite, and are defined |
-- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA |
-- intends to confer upon all recipients unlimited rights equal to those |
-- held by the ACAA. These rights include rights to use, duplicate, |
-- release or disclose the released technical data and computer software |
-- in whole or in part, in any manner and for any purpose whatsoever, and |
-- to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that an anonymous object is finalized with its enclosing master if |
-- a transfer of control or exception occurs prior to performing its normal |
-- finalization. (Defect Report 8652/0023, as reflected in |
-- Technical Corrigendum 1, RM95 7.6.1(13.1/1)). |
-- |
-- CHANGE HISTORY: |
-- 29 JAN 2001 PHL Initial version. |
-- 5 DEC 2001 RLB Reformatted for ACATS. |
-- |
--! |
with Ada.Finalization; |
use Ada.Finalization; |
package C761012_0 is |
|
type Ctrl (D : Boolean) is new Controlled with |
record |
case D is |
when False => |
C1 : Integer; |
when True => |
C2 : Float; |
end case; |
end record; |
|
function Create return Ctrl; |
procedure Finalize (Obj : in out Ctrl); |
function Finalize_Was_Called return Boolean; |
|
end C761012_0; |
|
with Report; |
use Report; |
package body C761012_0 is |
|
Finalization_Flag : Boolean := False; |
|
function Create return Ctrl is |
Obj : Ctrl (Ident_Bool (True)); |
begin |
Obj.C2 := 3.0; |
return Obj; |
end Create; |
|
procedure Finalize (Obj : in out Ctrl) is |
begin |
Finalization_Flag := True; |
end Finalize; |
|
function Finalize_Was_Called return Boolean is |
begin |
if Finalization_Flag then |
Finalization_Flag := False; |
return True; |
else |
return False; |
end if; |
end Finalize_Was_Called; |
|
end C761012_0; |
|
with Ada.Exceptions; |
use Ada.Exceptions; |
with C761012_0; |
use C761012_0; |
with Report; |
use Report; |
procedure C761012 is |
begin |
Test ("C761012", |
"Check that an anonymous object is finalized with its enclosing " & |
"master if a transfer of control or exception occurs prior to " & |
"performing its normal finalization"); |
|
Excep: |
begin |
|
declare |
I : Integer := Create.C1; -- Raises Constraint_Error |
begin |
Failed |
("Improper component selection did not raise Constraint_Error, I =" & |
Integer'Image (I)); |
exception |
when Constraint_Error => |
Failed ("Constraint_Error caught by the wrong handler"); |
end; |
|
Failed ("Transfer of control did not happen correctly"); |
|
exception |
when Constraint_Error => |
if not Finalize_Was_Called then |
Failed ("Finalize wasn't called when the master was left " & |
"- Constraint_Error"); |
end if; |
when E: others => |
Failed ("Exception " & Exception_Name (E) & |
" raised - " & Exception_Information (E)); |
end Excep; |
|
Transfer: |
declare |
Finalize_Was_Called_Before_Leaving_Exit : Boolean; |
begin |
|
begin |
loop |
exit when Create.C2 = 3.0; |
end loop; |
Finalize_Was_Called_Before_Leaving_Exit := Finalize_Was_Called; |
if Finalize_Was_Called_Before_Leaving_Exit then |
Comment ("Finalize called before the transfer of control"); |
end if; |
end; |
|
if not Finalize_Was_Called and then |
not Finalize_Was_Called_Before_Leaving_Exit then |
Failed ("Finalize wasn't called when the master was left " & |
"- transfer of control"); |
end if; |
end Transfer; |
|
Result; |
end C761012; |
|
/c760007.a
0,0 → 1,247
-- C760007.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that Adjust is called for the execution of a return |
-- statement for a function returning a result of a (non-limited) |
-- controlled type. |
-- |
-- Check that Adjust is called when evaluating an aggregate |
-- component association for a controlled component. |
-- |
-- Check that Adjust is called for the assignment of the ancestor |
-- expression of an extension aggregate when the type of the |
-- aggregate is controlled. |
-- |
-- TEST DESCRIPTION: |
-- A type is derived from Ada.Finalization.Controlled; the dispatching |
-- procedure Adjust is defined for the new type. Structures and |
-- subprograms to model the test objectives are used to check that |
-- Adjust is called at the right time. For the sake of simplicity, |
-- globally accessible data is used to check that the calls are made. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 DEC 94 SAIC ACVC 2.0 |
-- 14 OCT 95 SAIC Update and repair for ACVC 2.0.1 |
-- 05 APR 96 SAIC Add RM reference |
-- 06 NOV 96 SAIC Reduce adjust requirement |
-- 25 NOV 97 EDS Allowed zero calls to adjust at line 144 |
--! |
|
---------------------------------------------------------------- C760007_0 |
|
with Ada.Finalization; |
package C760007_0 is |
|
type Controlled is new Ada.Finalization.Controlled with record |
TC_ID : Natural := Natural'Last; |
end record; |
procedure Adjust( Object: in out Controlled ); |
|
type Structure is record |
Controlled_Component : Controlled; |
end record; |
|
type Child is new Controlled with record |
TC_XX : Natural := Natural'Last; |
end record; |
procedure Adjust( Object: in out Child ); |
|
Adjust_Count : Natural := 0; |
Child_Adjust_Count : Natural := 0; |
|
end C760007_0; |
|
package body C760007_0 is |
|
procedure Adjust( Object: in out Controlled ) is |
begin |
Adjust_Count := Adjust_Count +1; |
end Adjust; |
|
procedure Adjust( Object: in out Child ) is |
begin |
Child_Adjust_Count := Child_Adjust_Count +1; |
end Adjust; |
|
end C760007_0; |
|
------------------------------------------------------------------ C760007 |
|
with Report; |
with C760007_0; |
procedure C760007 is |
|
procedure Check_Adjust_Count(Message: String; |
Min: Natural := 1; |
Max: Natural := 2) is |
begin |
|
-- in order to allow for the anonymous objects referred to in |
-- the reference manual, the check for calls to Adjust must be |
-- in a range. This number must then be further adjusted |
-- to allow for the optimization that does not call for an adjust |
-- of an aggregate initial value built directly in the object |
|
if C760007_0.Adjust_Count not in Min..Max then |
Report.Failed(Message |
& " = " & Natural'Image(C760007_0.Adjust_Count)); |
end if; |
C760007_0.Adjust_Count := 0; |
end Check_Adjust_Count; |
|
procedure Check_Child_Adjust_Count(Message: String; |
Min: Natural := 1; |
Max: Natural := 2) is |
begin |
-- ditto above |
|
if C760007_0.Child_Adjust_Count not in Min..Max then |
Report.Failed(Message |
& " = " & Natural'Image(C760007_0.Child_Adjust_Count)); |
end if; |
C760007_0.Child_Adjust_Count := 0; |
end Check_Child_Adjust_Count; |
|
Object : C760007_0.Controlled; |
|
-- Check that Adjust is called for the execution of a return |
-- statement for a function returning a result of a (non-limited) |
-- controlled type or a result of a noncontrolled type with |
-- controlled components. |
|
procedure Subtest_1 is |
function Create return C760007_0.Controlled is |
New_Object : C760007_0.Controlled; |
begin |
return New_Object; |
end Create; |
|
procedure Examine( Thing : in C760007_0.Controlled ) is |
begin |
Check_Adjust_Count("Function call passed as parameter",0); |
end Examine; |
|
begin |
-- this assignment must call Adjust: |
-- 1: on the value resulting from the function |
-- ** unless this is optimized out by building the result directly |
-- in the target object. |
-- 2: on Object once it's been assigned |
-- may call adjust |
-- 1: for a anonymous object created in the evaluation of the function |
-- 2: for a anonymous object created in the assignment operation |
|
Object := Create; |
|
Check_Adjust_Count("Function call",1,4); |
|
Examine( Create ); |
|
end Subtest_1; |
|
-- Check that Adjust is called when evaluating an aggregate |
-- component association for a controlled component. |
|
procedure Subtest_2 is |
S : C760007_0.Structure; |
|
procedure Examine( Thing : in C760007_0.Structure ) is |
begin |
Check_Adjust_Count("Aggregate passed as parameter"); |
end Examine; |
|
begin |
-- this assignment must call Adjust: |
-- 1: on the value resulting from the aggregate |
-- ** unless this is optimized out by building the result directly |
-- in the target object. |
-- 2: on Object once it's been assigned |
-- may call adjust |
-- 1: for a anonymous object created in the evaluation of the aggregate |
-- 2: for a anonymous object created in the assignment operation |
S := ( Controlled_Component => Object ); |
Check_Adjust_Count("Aggregate and Assignment", 1, 4); |
|
Examine( C760007_0.Structure'(Controlled_Component => Object) ); |
end Subtest_2; |
|
-- Check that Adjust is called for the assignment of the ancestor |
-- expression of an extension aggregate when the type of the |
-- aggregate is controlled. |
|
procedure Subtest_3 is |
Bambino : C760007_0.Child; |
|
procedure Examine( Thing : in C760007_0.Child ) is |
begin |
Check_Adjust_Count("Extension aggregate as parameter (ancestor)", 0, 2); |
Check_Child_Adjust_Count("Extension aggregate as parameter", 0, 4); |
end Examine; |
|
begin |
-- implementation permissions make all of the following calls to adjust |
-- optional: |
-- these assignments may call Adjust: |
-- 1: on the value resulting from the aggregate |
-- 2: on Object once it's been assigned |
-- 3: for a anonymous object created in the evaluation of the aggregate |
-- 4: for a anonymous object created in the assignment operation |
Bambino := ( Object with TC_XX => 10 ); |
Check_Adjust_Count("Ancestor (expression) part of aggregate", 0, 2); |
Check_Child_Adjust_Count("Child aggregate assignment 1", 0, 4 ); |
|
Bambino := ( C760007_0.Controlled with TC_XX => 11 ); |
Check_Adjust_Count("Ancestor (subtype_mark) part of aggregate", 0, 2); |
Check_Child_Adjust_Count("Child aggregate assignment 2", 0, 4 ); |
|
Examine( ( Object with TC_XX => 21 ) ); |
|
Examine( ( C760007_0.Controlled with TC_XX => 37 ) ); |
|
end Subtest_3; |
|
begin -- Main test procedure. |
|
Report.Test ("C760007", "Check that Adjust is called for the " & |
"execution of a return statement for a " & |
"function returning a result containing a " & |
"controlled type. Check that Adjust is " & |
"called when evaluating an aggregate " & |
"component association for a controlled " & |
"component. " & |
"Check that Adjust is called for the " & |
"assignment of the ancestor expression of an " & |
"extension aggregate when the type of the " & |
"aggregate is controlled" ); |
|
Subtest_1; |
Subtest_2; |
Subtest_3; |
|
Report.Result; |
|
end C760007; |
/c760009.a
0,0 → 1,533
-- C760009.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that for an extension_aggregate whose ancestor_part is a |
-- subtype_mark (i.e. Typemark'( Subtype with Field => x, etc.) ) |
-- Initialize is called on all controlled subcomponents of the |
-- ancestor part; if the type of the ancestor part is itself controlled, |
-- the Initialize procedure of the ancestor type is called, unless that |
-- Initialize procedure is abstract. |
-- |
-- Check that the utilization of a controlled type for a generic actual |
-- parameter supports the correct behavior in the instantiated package. |
-- |
-- TEST DESCRIPTION: |
-- Declares a generic package instantiated to check that controlled |
-- types are not impacted by the "generic boundary." |
-- This instance is then used to perform the tests of various |
-- aggregate formations of the controlled type. After each operation |
-- in the main program that should cause implicit calls, the "state" of |
-- the software is checked. The "state" of the software is maintained in |
-- several variables which count the calls to the Initialize, Adjust and |
-- Finalize procedures in each context. Given the nature of the |
-- language rules, the test specifies a minimum number of times that |
-- these subprograms should have been called. The test also checks cases |
-- where the subprograms should not have been called. |
-- |
-- As per the example in AARM 7.6(11a..d);6.0, the distinctions between |
-- the presence/absence of default values is tested. |
-- |
-- DATA STRUCTURES |
-- |
-- C760009_3.Master_Control is derived from |
-- C760009_2.Control is derived from |
-- Ada.Finalization.Controlled |
-- |
-- C760009_1.Simple_Control is derived from |
-- Ada.Finalization.Controlled |
-- |
-- C760009_3.Master_Control contains |
-- Standard.Integer |
-- |
-- C760009_2.Control contains |
-- C760009_1.Simple_Control (default value) |
-- C760009_1.Simple_Control (default initialized) |
-- |
-- |
-- CHANGE HISTORY: |
-- 01 MAY 95 SAIC Initial version |
-- 19 FEB 96 SAIC Fixed elaboration Initialize count |
-- 14 NOV 96 SAIC Allowed for 7.6(21) optimizations |
-- 13 FEB 97 PWB.CTA Initialized counters at lines 127-129 |
-- 26 JUN 98 EDS Added pragma Elaborate_Body to C760009_0 |
-- to avoid possible instantiation error |
--! |
|
---------------------------------------------------------------- C760009_0 |
|
with Ada.Finalization; |
generic |
|
type Private_Formal is private; |
|
with procedure TC_Validate( APF: in out Private_Formal ); |
|
package C760009_0 is -- Check_1 |
|
pragma Elaborate_Body; |
procedure TC_Check_1( APF: in Private_Formal ); |
procedure TC_Check_2( APF: out Private_Formal ); |
procedure TC_Check_3( APF: in out Private_Formal ); |
|
end C760009_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760009_0 is -- Check_1 |
|
procedure TC_Check_1( APF: in Private_Formal ) is |
Local : Private_Formal; |
begin |
Local := APF; |
TC_Validate( Local ); |
end TC_Check_1; |
|
procedure TC_Check_2( APF: out Private_Formal ) is |
Local : Private_Formal; -- initialized by virtue of actual being |
-- Controlled |
begin |
APF := Local; |
TC_Validate( APF ); |
end TC_Check_2; |
|
procedure TC_Check_3( APF: in out Private_Formal ) is |
Local : Private_Formal; |
begin |
Local := APF; |
TC_Validate( Local ); |
end TC_Check_3; |
|
end C760009_0; |
|
---------------------------------------------------------------- C760009_1 |
|
with Ada.Finalization; |
package C760009_1 is |
|
Initialize_Called : Natural := 0; |
Adjust_Called : Natural := 0; |
Finalize_Called : Natural := 0; |
|
procedure Reset_Counters; |
|
type Simple_Control is new Ada.Finalization.Controlled with private; |
|
procedure Initialize( AV: in out Simple_Control ); |
procedure Adjust ( AV: in out Simple_Control ); |
procedure Finalize ( AV: in out Simple_Control ); |
procedure Validate ( AV: in out Simple_Control ); |
|
function Item( AV: Simple_Control'Class ) return String; |
|
Empty : constant Simple_Control; |
|
procedure TC_Trace( Message: String ); |
|
private |
type Simple_Control is new Ada.Finalization.Controlled with record |
Item: Natural; |
end record; |
|
Empty : constant Simple_Control := ( Ada.Finalization.Controlled with 0 ); |
|
end C760009_1; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760009_1 is |
|
-- Maintenance_Mode and TC_Trace are for the test writers and compiler |
-- developers to get more information from this test as it executes. |
-- Maintenance_Mode is always False for validation purposes. |
|
Maintenance_Mode : constant Boolean := False; |
|
procedure TC_Trace( Message: String ) is |
begin |
if Maintenance_Mode then |
Report.Comment( Message ); |
end if; |
end TC_Trace; |
|
procedure Reset_Counters is |
begin |
Initialize_Called := 0; |
Adjust_Called := 0; |
Finalize_Called := 0; |
end Reset_Counters; |
|
Master_Count : Natural := 100; -- Help distinguish values |
|
procedure Initialize( AV: in out Simple_Control ) is |
begin |
Initialize_Called := Initialize_Called +1; |
AV.Item := Master_Count; |
Master_Count := Master_Count +100; |
TC_Trace( "Initialize _1.Simple_Control" ); |
end Initialize; |
|
procedure Adjust ( AV: in out Simple_Control ) is |
begin |
Adjust_Called := Adjust_Called +1; |
AV.Item := AV.Item +1; |
TC_Trace( "Adjust _1.Simple_Control" ); |
end Adjust; |
|
procedure Finalize ( AV: in out Simple_Control ) is |
begin |
Finalize_Called := Finalize_Called +1; |
AV.Item := AV.Item +1; |
TC_Trace( "Finalize _1.Simple_Control" ); |
end Finalize; |
|
procedure Validate ( AV: in out Simple_Control ) is |
begin |
Report.Failed("Attempt to Validate at Simple_Control level"); |
end Validate; |
|
function Item( AV: Simple_Control'Class ) return String is |
begin |
return Natural'Image(AV.Item); |
end Item; |
|
end C760009_1; |
|
---------------------------------------------------------------- C760009_2 |
|
with C760009_1; |
with Ada.Finalization; |
package C760009_2 is |
|
type Control is new Ada.Finalization.Controlled with record |
Element_1 : C760009_1.Simple_Control; |
Element_2 : C760009_1.Simple_Control := C760009_1.Empty; |
end record; |
|
procedure Initialize( AV: in out Control ); |
procedure Finalize ( AV: in out Control ); |
|
Initialized : Natural := 0; |
Finalized : Natural := 0; |
|
end C760009_2; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
package body C760009_2 is |
|
procedure Initialize( AV: in out Control ) is |
begin |
Initialized := Initialized +1; |
C760009_1.TC_Trace( "Initialize _2.Control" ); |
end Initialize; |
|
procedure Finalize ( AV: in out Control ) is |
begin |
Finalized := Finalized +1; |
C760009_1.TC_Trace( "Finalize _2.Control" ); |
end Finalize; |
|
end C760009_2; |
|
---------------------------------------------------------------- C760009_3 |
|
with C760009_0; |
with C760009_2; |
package C760009_3 is |
|
type Master_Control is new C760009_2.Control with record |
Data: Integer; |
end record; |
|
procedure Initialize( AC: in out Master_Control ); |
-- calls C760009_2.Initialize |
-- embedded data causes 1 call to C760009_1.Initialize |
|
-- Adjusting operation will |
-- make 1 call to C760009_2.Adjust |
-- make 2 call to C760009_1.Adjust |
|
-- Finalize operation will |
-- make 1 call to C760009_2.Finalize |
-- make 2 call to C760009_1.Finalize |
|
procedure Validate( AC: in out Master_Control ); |
|
package Check_1 is |
new C760009_0(Master_Control, Validate); |
|
end C760009_3; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
with C760009_1; |
package body C760009_3 is |
|
procedure Initialize( AC: in out Master_Control ) is |
begin |
AC.Data := 42; |
C760009_2.Initialize(C760009_2.Control(AC)); |
C760009_1.TC_Trace( "Initialize Master_Control" ); |
end Initialize; |
|
procedure Validate( AC: in out Master_Control ) is |
begin |
if AC.Data not in 0..1000 then |
Report.Failed("C760009_3.Control did not Initialize" ); |
end if; |
end Validate; |
|
end C760009_3; |
|
--------------------------------------------------------------------- C760009 |
|
with Report; |
with C760009_1; |
with C760009_2; |
with C760009_3; |
procedure C760009 is |
|
-- Comment following declaration indicates expected calls in the order: |
-- Initialize of a C760009_2 value |
-- Finalize of a C760009_2 value |
-- Initialize of a C760009_1 value |
-- Adjust of a C760009_1 value |
-- Finalize of a C760009_1 value |
|
Global_Control : C760009_3.Master_Control; |
-- 1, 0, 1, 1, 0 |
|
Parent_Control : C760009_2.Control; |
-- 1, 0, 1, 1, 0 |
|
-- Global_Control is a derived tagged type, the parent type |
-- of Master_Control, Control, is derived from Controlled, and contains |
-- two components of a Controlled type, Simple_Control. One of these |
-- components has a default value, the other does not. |
|
procedure Fail( Which: String; Expect, Got: Natural ) is |
begin |
Report.Failed(Which & " Expected" & Natural'Image(Expect) |
& " got" & Natural'Image(Got) ); |
end Fail; |
|
procedure Master_Assertion( Layer_2_Inits : Natural; |
Layer_2_Finals : Natural; |
Layer_1_Inits : Natural; |
Layer_1_Adjs : Natural; |
Layer_1_Finals : Natural; |
Failing_Message : String ) is |
|
begin |
|
|
|
if C760009_2.Initialized /= Layer_2_Inits then |
Fail("C760009_2.Initialize " & Failing_Message, |
Layer_2_Inits, C760009_2.Initialized ); |
end if; |
|
if C760009_2.Finalized not in Layer_2_Finals..Layer_2_Finals*2 then |
Fail("C760009_2.Finalize " & Failing_Message, |
Layer_2_Finals, C760009_2.Finalized ); |
end if; |
|
if C760009_1.Initialize_Called /= Layer_1_Inits then |
Fail("C760009_1.Initialize " & Failing_Message, |
Layer_1_Inits, |
C760009_1.Initialize_Called ); |
end if; |
|
if C760009_1.Adjust_Called not in Layer_1_Adjs..Layer_1_Adjs*2 then |
Fail("C760009_1.Adjust " & Failing_Message, |
Layer_1_Adjs, C760009_1.Adjust_Called ); |
end if; |
|
if C760009_1.Finalize_Called not in Layer_1_Finals..Layer_1_Finals*2 then |
Fail("C760009_1.Finalize " & Failing_Message, |
Layer_1_Finals, C760009_1.Finalize_Called ); |
end if; |
|
C760009_1.Reset_Counters; |
C760009_2.Initialized := 0; |
C760009_2.Finalized := 0; |
|
end Master_Assertion; |
|
procedure Lesser_Assertion( Layer_2_Inits : Natural; |
Layer_2_Finals : Natural; |
Layer_1_Inits : Natural; |
Layer_1_Adjs : Natural; |
Layer_1_Finals : Natural; |
Failing_Message : String ) is |
begin |
|
|
if C760009_2.Initialized > Layer_2_Inits then |
Fail("C760009_2.Initialize " & Failing_Message, |
Layer_2_Inits, C760009_2.Initialized ); |
end if; |
|
if C760009_2.Finalized < Layer_2_Inits |
or C760009_2.Finalized > Layer_2_Finals*2 then |
Fail("C760009_2.Finalize " & Failing_Message, |
Layer_2_Finals, C760009_2.Finalized ); |
end if; |
|
if C760009_1.Initialize_Called > Layer_1_Inits then |
Fail("C760009_1.Initialize " & Failing_Message, |
Layer_1_Inits, |
C760009_1.Initialize_Called ); |
end if; |
|
if C760009_1.Adjust_Called > Layer_1_Adjs*2 then |
Fail("C760009_1.Adjust " & Failing_Message, |
Layer_1_Adjs, C760009_1.Adjust_Called ); |
end if; |
|
if C760009_1.Finalize_Called < Layer_1_Inits |
or C760009_1.Finalize_Called > Layer_1_Finals*2 then |
Fail("C760009_1.Finalize " & Failing_Message, |
Layer_1_Finals, C760009_1.Finalize_Called ); |
end if; |
|
C760009_1.Reset_Counters; |
C760009_2.Initialized := 0; |
C760009_2.Finalized := 0; |
|
end Lesser_Assertion; |
|
begin -- Main test procedure. |
|
Report.Test ("C760009", "Check that for an extension_aggregate whose " & |
"ancestor_part is a subtype_mark, Initialize " & |
"is called on all controlled subcomponents of " & |
"the ancestor part. Also check that the " & |
"utilization of a controlled type for a generic " & |
"actual parameter supports the correct behavior " & |
"in the instantiated software" ); |
|
C760009_1.TC_Trace( "=====> Case 0 <=====" ); |
|
C760009_1.Reset_Counters; |
C760009_2.Initialized := 0; |
C760009_2.Finalized := 0; |
|
C760009_3.Validate( Global_Control ); -- check that it Initialized correctly |
|
C760009_1.TC_Trace( "=====> Case 1 <=====" ); |
|
C760009_3.Check_1.TC_Check_1( ( C760009_2.Control with Data => 1 ) ); |
Lesser_Assertion( 2, 3, 2, 3, 6, "Check_1.TC_Check_1" ); |
-- | | | | + Finalize 2 embedded in aggregate |
-- | | | | + Finalize 2 at assignment in TC_Check_1 |
-- | | | | + Finalize 2 embedded in local variable |
-- | | | + Adjust 2 caused by assignment in TC_Check_1 |
-- | | | + Adjust at declaration in TC_Check_1 |
-- | | + Initialize at declaration in TC_Check_1 |
-- | | + Initialize of aggregate object |
-- | + Finalize of assignment target |
-- | + Finalize of local variable |
-- | + Finalize of aggregate object |
-- + Initialize of aggregate object |
-- + Initialize of local variable |
|
|
C760009_1.TC_Trace( "=====> Case 2 <=====" ); |
|
C760009_3.Check_1.TC_Check_2( Global_Control ); |
Master_Assertion( 1, 2, 1, 3, 4, "Check_1.TC_Check_2" ); |
-- | | | | + Finalize 2 at assignment in TC_Check_2 |
-- | | | | + Finalize 2 embedded in local variable |
-- | | | + Adjust 2 caused by assignment in TC_Check_2 |
-- | | | + Adjust at declaration in TC_Check_2 |
-- | | + Initialize at declaration in TC_Check_2 |
-- | + Finalize of assignment target |
-- | + Finalize of local variable |
-- + Initialize of local variable |
|
|
C760009_1.TC_Trace( "=====> Case 3 <=====" ); |
|
Global_Control := ( C760009_2.Control with Data => 2 ); |
Lesser_Assertion( 1, 1, 1, 3, 2, "Aggregate -> object" ); |
-- | | | | + Finalize 2 by assignment |
-- | | | + Adjust 2 caused by assignment |
-- | | | + Adjust in aggregate creation |
-- | | + Initialize of aggregate object |
-- | + Finalize of assignment target |
-- + Initialize of aggregate object |
|
|
C760009_1.TC_Trace( "=====> Case 4 <=====" ); |
|
C760009_3.Check_1.TC_Check_3( Global_Control ); |
Master_Assertion( 1, 2, 1, 3, 4, "Check_1.TC_Check_3" ); |
-- | | | | + Finalize 2 at assignment in TC_Check_3 |
-- | | | | + Finalize 2 embedded in local variable |
-- | | | + Adjust 2 at assignment in TC_Check_3 |
-- | | | + Adjust in local variable creation |
-- | | + Initialize of local variable in TC_Check_3 |
-- | + Finalize of assignment target |
-- | + Finalize of local variable |
-- + Initialize of local variable |
|
|
C760009_1.TC_Trace( "=====> Case 5 <=====" ); |
|
Global_Control := ( Parent_Control with Data => 3 ); |
Lesser_Assertion( 1, 1, 1, 3, 2, "Object Aggregate -> object" ); |
-- | | | | + Finalize 2 by assignment |
-- | | | + Adjust 2 caused by assignment |
-- | | | + Adjust in aggregate creation |
-- | | + Initialize of aggregate object |
-- | + Finalize of assignment target |
-- + Initialize of aggregate object |
|
|
|
C760009_1.TC_Trace( "=====> Case 6 <=====" ); |
|
-- perform this check a second time to make sure nothing is "remembered" |
|
C760009_3.Check_1.TC_Check_3( Global_Control ); |
Master_Assertion( 1, 2, 1, 3, 4, "Check_1.TC_Check_3 second time" ); |
-- | | | | + Finalize 2 at assignment in TC_Check_3 |
-- | | | | + Finalize 2 embedded in local variable |
-- | | | + Adjust 2 at assignment in TC_Check_3 |
-- | | | + Adjust in local variable creation |
-- | | + Initialize of local variable in TC_Check_3 |
-- | + Finalize of assignment target |
-- | + Finalize of local variable |
-- + Initialize of local variable |
|
|
Report.Result; |
|
end C760009; |
/c72001b.ada
0,0 → 1,96
-- C72001B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT A PACKAGE BODY CAN BE PROVIDED FOR A PACKAGE SPECIFICATION |
-- THAT DOES NOT CONTAIN ANY SUBPROGRAM OR TASK DECLARATIONS AND THAT |
-- STATEMENTS WITHIN THE PACKAGE BODIES CAN BE USED TO INITIALIZE |
-- VARIABLES VISIBLE WITHIN THE PACKAGE BODY. |
|
-- RM 04/30/81 |
-- RM 05/07/81 (TO INCORPORATE OLD TEST OBJECTIVE 7.1/T1 ) |
-- ABW 6/10/82 |
-- SPS 11/4/82 |
-- JBG 9/15/83 |
|
WITH REPORT; |
PROCEDURE C72001B IS |
|
USE REPORT; |
|
BEGIN |
|
TEST( "C72001B" , "CHECK: PACKAGE BODIES CAN INITIALIZE VISIBLE" & |
" VARIABLES" ); |
|
DECLARE |
|
|
PACKAGE P5 IS |
|
A : CHARACTER := 'B'; |
B : BOOLEAN := FALSE; |
|
PACKAGE P6 IS |
I : INTEGER := IDENT_INT(6); |
END P6; |
|
END P5; |
|
|
PACKAGE BODY P5 IS |
PACKAGE BODY P6 IS |
BEGIN |
A := 'C'; |
I := 17; |
B := IDENT_BOOL(TRUE); |
END P6; |
BEGIN |
A := 'A'; |
END P5; |
|
|
USE P5; |
USE P6; |
|
BEGIN |
|
IF A /= 'A' THEN |
FAILED ("INITIALIZATIONS NOT CORRECT - 1"); |
END IF; |
|
IF B /= TRUE THEN |
FAILED ("INITIALIZATIONS NOT CORRECT - 2"); |
END IF; |
|
IF I /= 17 THEN |
FAILED ("INITIALIZATIONS NOT CORRECT - 3"); |
END IF; |
|
END; |
|
|
RESULT; |
|
|
END C72001B; |
/c74211a.ada
0,0 → 1,195
-- C74211A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT WITHIN THE PACKAGE SPECIFICATION AND BODY, ANY EXPLICIT |
-- DECLARATIONS OF OPERATORS AND SUBPROGRAMS HIDE ANY OPERATIONS WHICH |
-- ARE IMPLICITLY DECLARED AT THE POINT OF THE FULL DECLARATION, |
-- REGARDLESS OF THE ORDER OF OCCURENCE OF THE DECLARATIONS. |
|
-- CHECK THAT IMPLICITLY DECLARED DERIVED SUBPROGRAMS HIDE IMPLICITLY |
-- DECLARED PREDEFINED OPERATORS, REGARDLESS OF THE ORDER OF OCCURENCE |
-- OF THE DECLARATIONS. |
|
-- DSJ 4/28/83 |
-- JBG 9/23/83 |
|
-- A) EXPLICIT DECLARATION HIDES LATER IMPLICIT DECL OF PREDEFINED OP. |
-- B) " " " LATER " " " DERIVED OP. |
-- C) " " " EARLIER " " " PREDEFINED OP. |
-- D) " " " EARLIER " " " DERIVED OP. |
|
WITH REPORT; |
PROCEDURE C74211A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST ("C74211A", "CHECK THAT HIDING OF IMPLICITLY DECLARED " & |
"OPERATORS AND DERIVED SUBPROGRAMS IS DONE " & |
"CORRECTLY REGARDLESS OF ORDER OF DECL'S"); |
|
DECLARE |
|
PACKAGE P1 IS |
TYPE T1 IS RANGE 1 .. 50; |
C1 : CONSTANT T1 := T1(IDENT_INT(2)); |
D1 : CONSTANT T1 := C1 + C1; -- PREDEFINED "+" |
FUNCTION "+" (L, R : T1) RETURN T1; -- C) FOR "+". |
FUNCTION "-" (L, R : T1) RETURN T1; -- C) FOR "-". |
FUNCTION "/" (L, R : T1) RETURN T1; |
END P1; |
|
USE P1; |
|
PACKAGE BODY P1 IS |
A,B : T1 := 3; |
|
FUNCTION "+" (L, R : T1) RETURN T1 IS |
BEGIN |
IF L = R THEN |
RETURN 1; |
ELSE RETURN 2; |
END IF; |
END "+"; |
|
FUNCTION "-" (L, R : T1) RETURN T1 IS |
BEGIN |
IF L = R THEN |
RETURN 3; |
ELSE RETURN 4; |
END IF; |
END "-"; |
|
FUNCTION "/" (L, R : T1) RETURN T1 IS |
BEGIN |
IF L = R THEN |
RETURN T1(IDENT_INT(INTEGER(L))); |
ELSE |
RETURN T1(IDENT_INT(50)); |
END IF; |
END "/"; |
|
BEGIN |
IF D1 /= 4 THEN |
FAILED ("WRONG PREDEFINED OPERATION - '+' "); |
END IF; |
|
IF D1 + C1 /= 2 THEN |
FAILED ("IMPLICIT '+' NOT HIDDEN BY EXPLICIT '+'"); |
END IF; |
|
IF A + B /= 1 THEN |
FAILED ("IMPLICIT DECLARATION NOT HIDDEN " & |
"BY EXPLICIT DECLARATION - '+' "); |
END IF; |
|
IF A - B /= 3 THEN |
FAILED ("IMPLICIT DECLARATION NOT HIDDEN " & |
"BY EXPLICIT DECLARATION - '-' "); |
END IF; |
|
IF A * B /= 9 THEN |
FAILED ("WRONG PREDEFINED OPERATION - '*' "); |
END IF; |
|
IF B / A /= T1(IDENT_INT(3)) THEN |
FAILED ("NOT REDEFINED '/' "); |
END IF; |
END P1; |
|
PACKAGE P2 IS |
TYPE T2 IS PRIVATE; |
X , Y : CONSTANT T2; |
FUNCTION "+" (L, R : T2) RETURN T2; -- B) |
FUNCTION "*" (L, R : T2) RETURN T2; -- A) |
PRIVATE |
TYPE T2 IS NEW T1; -- B) +; A) * |
Z : T2 := T2(IDENT_INT(3))/4; -- Z = 50 USING |
-- DERIVED / |
FUNCTION "/" (L, R : T2) RETURN T2; -- D) FOR / |
X , Y : CONSTANT T2 := 3; |
END P2; |
|
PACKAGE BODY P2 IS |
FUNCTION "+" (L, R : T2) RETURN T2 IS |
BEGIN |
IF L = R THEN |
RETURN T2(IDENT_INT(5)); |
ELSE RETURN T2(IDENT_INT(6)); |
END IF; |
END "+"; |
|
FUNCTION "*" (L, R : T2) RETURN T2 IS |
BEGIN |
IF L = R THEN |
RETURN T2(IDENT_INT(7)); |
ELSE RETURN T2(IDENT_INT(8)); |
END IF; |
END "*"; |
|
FUNCTION "/" (L, R : T2) RETURN T2 IS |
BEGIN |
IF L = R THEN |
RETURN T2(IDENT_INT(9)); |
ELSE RETURN T2(IDENT_INT(10)); |
END IF; |
END "/"; |
BEGIN |
IF X + Y /= 5 THEN |
FAILED ("DERIVED SUBPROGRAM NOT HIDDEN BY " & |
"EXPLICIT DECLARATION - '+' "); |
END IF; |
|
IF Y - X /= 3 THEN |
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " & |
"DERIVED SUBPROGRAM - '-' "); |
END IF; |
|
IF X * Y /= 7 THEN |
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " & |
"EXPLICIT DECLARATION - '*' "); |
END IF; |
|
IF Y / X /= T2(IDENT_INT(9)) THEN |
FAILED ("DERIVED OPERATOR NOT HIDDEN BY " & |
"EXPLICIT DECLARATION - '/' "); |
END IF; |
|
IF Z /= 50 THEN |
FAILED ("DERIVED OPERATOR HIDDEN PREMATURELY " & |
" BY REDECLARED OPERATOR"); |
END IF; |
|
END P2; |
|
BEGIN |
|
NULL; |
|
END; |
|
RESULT; |
|
END C74211A; |
/c74302a.ada
0,0 → 1,81
-- C74302A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT MULTIPLE DECLARATIONS MAY BE USED FOR DEFERRED CONSTANT |
-- DECLARATIONS, EVEN IF THE FULL DECLARATIONS ARE GIVEN INDIVIDUALLY. |
|
-- CHECK THAT MULTIPLE DECLARATIONS MAY BE USED FOR THE FULL |
-- DECLARATIONS, EVEN IF THE DEFERRED CONSTANT DECLARATIONS ARE GIVEN |
-- INDIVIDUALLY. |
|
|
-- DSJ 5/09/83 |
-- SPS 10/24/83 |
-- EG 12/19/83 |
-- JRK 12/20/83 |
|
-- DTN 11/19/91 DELETED SUBPART (C). |
|
WITH REPORT; |
PROCEDURE C74302A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST("C74302A", "CHECK THAT MULTIPLE DECLARATIONS MAY BE USED " & |
"FOR DEFERRED CONSTANT DECLARATIONS"); |
|
DECLARE |
|
PACKAGE PACK1 IS |
|
TYPE T IS PRIVATE; |
|
B, E : CONSTANT T; |
|
F : CONSTANT T; |
PRIVATE |
|
TYPE T IS NEW INTEGER; |
|
E : CONSTANT T := T(IDENT_INT(4)); |
|
B, F : CONSTANT T := T(IDENT_INT(2)); |
|
END PACK1; |
|
USE PACK1; |
|
BEGIN |
|
IF B/=F THEN |
FAILED("VALUES OF DEFERRED CONSTANTS B AND F NOT EQUAL"); |
END IF; |
|
END; |
|
RESULT; |
|
END C74302A; |
/c74211b.ada
0,0 → 1,156
-- C74211B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT IMPLICITLY DECLARED INEQUALITY WHICH ACCOMPANIES AN |
-- EXPLICIT DECLARATION OF EQUALITY HIDES OTHER IMPLICITLY DECLARED |
-- HOMOGRAPHS, AND THAT DERIVED INEQUALITY HIDES PREDEFINED INEQUALITY. |
|
-- DSJ 4/29/83 |
-- JBG 9/23/83 |
|
WITH REPORT; |
PROCEDURE C74211B IS |
|
USE REPORT; |
|
BEGIN |
|
TEST( "C74211B", "CHECK THAT HIDING OF IMPLICITLY DECLARED " & |
"OPERATORS AND DERIVED SUBPROGRAMS IS DONE " & |
"CORRECTLY REGARDLESS OF ORDER OF DECL'S"); |
|
DECLARE |
|
PACKAGE P1 IS |
TYPE LT1 IS LIMITED PRIVATE; |
FUNCTION "="(L, R : LT1) RETURN BOOLEAN; |
FUNCTION LT1_VALUE_2 RETURN LT1; |
FUNCTION LT1_VALUE_4 RETURN LT1; |
TYPE LT2 IS LIMITED PRIVATE; |
PRIVATE |
TYPE LT1 IS RANGE 1 .. 10; |
TYPE LT2 IS RANGE 1 .. 10; |
END P1; |
|
USE P1; |
|
PACKAGE P2 IS |
TYPE LT3 IS LIMITED PRIVATE; |
TYPE LT4 IS NEW LT1; |
PRIVATE |
FUNCTION "=" (L, R : LT3) RETURN BOOLEAN; |
TYPE LT3 IS NEW LT1; |
END P2; |
|
USE P2; |
|
PACKAGE BODY P1 IS |
A , B : CONSTANT LT1 := 4; |
C , D : CONSTANT LT2 := 6; |
|
FUNCTION "=" (L, R : LT1) RETURN BOOLEAN IS |
BEGIN |
RETURN INTEGER(L) /= INTEGER(R); |
END "="; |
|
FUNCTION LT1_VALUE_2 RETURN LT1 IS |
BEGIN |
RETURN 2; |
END LT1_VALUE_2; |
|
FUNCTION LT1_VALUE_4 RETURN LT1 IS |
BEGIN |
RETURN 4; |
END LT1_VALUE_4; |
|
BEGIN |
IF A = B THEN |
FAILED ("PREDEFINED EQUALITY NOT HIDDEN BY " & |
"EXPLICIT DECLARATION - LT1"); |
END IF; |
|
IF C /= D THEN |
FAILED ("WRONG PREDEFINED OPERATION - T2"); |
END IF; |
END P1; |
|
PACKAGE BODY P2 IS |
FUNCTION U RETURN LT3 IS |
BEGIN |
RETURN LT1_VALUE_2; |
END U; |
|
FUNCTION V RETURN LT3 IS |
BEGIN |
RETURN LT1_VALUE_4; |
END V; |
|
FUNCTION W RETURN LT4 IS |
BEGIN |
RETURN LT1_VALUE_2; |
END W; |
|
FUNCTION X RETURN LT4 IS |
BEGIN |
RETURN LT1_VALUE_4; |
END X; |
|
FUNCTION "=" (L, R : LT3) RETURN BOOLEAN IS |
BEGIN |
RETURN NOT (LT1(L) = LT1(R)); |
END "="; |
|
BEGIN |
IF NOT (U /= V) THEN |
FAILED ("DERIVED SUBPROGRAM NOT HIDDEN BY " & |
"IMPLICITLY DECLARED INEQUALITY " & |
"FROM EXPLICITLY DECLARED EQUALITY"); |
END IF; |
|
IF NOT (LT3(W) = U) THEN |
FAILED ("DERIVED SUBPROGRAM NOT HIDDEN BY " & |
"EXPLICIT DECLARATION - '=' "); |
END IF; |
|
IF W /= X THEN |
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " & |
"DERIVED SUBPROGRAM - '/=' "); |
END IF; |
|
IF NOT ( X = W ) THEN |
FAILED ("PREDEFINED OPERATOR NOT HIDDEN BY " & |
"DERIVED SUBPROGRAM - '=' "); |
END IF; |
|
END P2; |
|
BEGIN |
|
NULL; |
|
END; |
|
RESULT; |
|
END C74211B; |
/c74203a.ada
0,0 → 1,263
-- C74203A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT MEMBERSHIP TESTS, QUALIFICATION, AND EXPLICIT |
-- CONVERSION ARE AVAILABLE FOR LIMITED AND NON-LIMITED PRIVATE |
-- TYPES. INCLUDE TYPES WITH DISCRIMINANTS AND TYPES |
-- WITH LIMITED COMPONENTS. |
|
-- HISTORY: |
-- BCB 03/10/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74203A IS |
|
PACKAGE PP IS |
TYPE LIM IS LIMITED PRIVATE; |
PROCEDURE INIT (Z1 : OUT LIM; Z2 : INTEGER); |
|
TYPE A IS PRIVATE; |
SUBTYPE SUBA IS A; |
A1 : CONSTANT A; |
|
TYPE B IS LIMITED PRIVATE; |
B1 : CONSTANT B; |
|
TYPE C IS PRIVATE; |
C1 : CONSTANT C; |
|
TYPE D IS LIMITED PRIVATE; |
D1 : CONSTANT D; |
|
TYPE E (DISC1 : INTEGER := 5) IS PRIVATE; |
SUBTYPE SUBE IS E; |
E1 : CONSTANT E; |
|
TYPE F (DISC2 : INTEGER := 15) IS LIMITED PRIVATE; |
F1 : CONSTANT F; |
|
TYPE G (DISC3 : INTEGER) IS PRIVATE; |
G1 : CONSTANT G; |
|
TYPE H (DISC4 : INTEGER) IS LIMITED PRIVATE; |
H1 : CONSTANT H; |
|
TYPE I IS RECORD |
COMPI : LIM; |
END RECORD; |
SUBTYPE SUBI IS I; |
|
TYPE J IS ARRAY(1..5) OF LIM; |
SUBTYPE SUBJ IS J; |
|
TYPE S1 IS (VINCE, TOM, PHIL, JODIE, ROSA, TERESA); |
TYPE S2 IS (THIS, THAT, THESE, THOSE, THEM); |
TYPE S3 IS RANGE 1 .. 100; |
TYPE S4 IS RANGE 1 .. 100; |
PRIVATE |
TYPE LIM IS RANGE 1 .. 100; |
|
TYPE A IS (RED, BLUE, GREEN, YELLOW, BLACK, WHITE); |
A1 : CONSTANT A := BLUE; |
|
TYPE B IS (ONE, TWO, THREE, FOUR, FIVE, SIX); |
B1 : CONSTANT B := THREE; |
|
TYPE C IS RANGE 1 .. 100; |
C1 : CONSTANT C := 50; |
|
TYPE D IS RANGE 1 .. 100; |
D1 : CONSTANT D := 50; |
|
TYPE E (DISC1 : INTEGER := 5) IS RECORD |
COMPE : S1; |
END RECORD; |
E1 : CONSTANT E := (DISC1 => 5, COMPE => TOM); |
|
TYPE F (DISC2 : INTEGER := 15) IS RECORD |
COMPF : S2; |
END RECORD; |
F1 : CONSTANT F := (DISC2 => 15, COMPF => THAT); |
|
TYPE G (DISC3 : INTEGER) IS RECORD |
COMPG : S3; |
END RECORD; |
G1 : CONSTANT G := (DISC3 => 25, COMPG => 50); |
|
TYPE H (DISC4 : INTEGER) IS RECORD |
COMPH : S4; |
END RECORD; |
H1 : CONSTANT H := (DISC4 => 30, COMPH => 50); |
END PP; |
|
USE PP; |
|
AVAR : SUBA := A1; |
EVAR : SUBE := E1; |
|
IVAR : SUBI; |
JVAR : SUBJ; |
|
PACKAGE BODY PP IS |
PROCEDURE INIT (Z1 : OUT LIM; Z2 : INTEGER) IS |
BEGIN |
Z1 := LIM (Z2); |
END INIT; |
BEGIN |
NULL; |
END PP; |
|
PROCEDURE QUAL_PRIV (W : A) IS |
BEGIN |
NULL; |
END QUAL_PRIV; |
|
PROCEDURE QUAL_LIM_PRIV (X : B) IS |
BEGIN |
NULL; |
END QUAL_LIM_PRIV; |
|
PROCEDURE EXPL_CONV_PRIV_1 (Y : C) IS |
BEGIN |
NULL; |
END EXPL_CONV_PRIV_1; |
|
PROCEDURE EXPL_CONV_LIM_PRIV_1 (Z : D) IS |
BEGIN |
NULL; |
END EXPL_CONV_LIM_PRIV_1; |
|
PROCEDURE EXPL_CONV_PRIV_2 (Y2 : G) IS |
BEGIN |
NULL; |
END EXPL_CONV_PRIV_2; |
|
PROCEDURE EXPL_CONV_LIM_PRIV_2 (Z2 : H) IS |
BEGIN |
NULL; |
END EXPL_CONV_LIM_PRIV_2; |
|
PROCEDURE EXPL_CONV_PRIV_3 (Y3 : I) IS |
BEGIN |
NULL; |
END EXPL_CONV_PRIV_3; |
|
PROCEDURE EXPL_CONV_PRIV_4 (Y4 : J) IS |
BEGIN |
NULL; |
END EXPL_CONV_PRIV_4; |
|
BEGIN |
TEST ("C74203A", "CHECK THAT MEMBERSHIP TESTS, QUALIFICATION, " & |
"AND EXPLICIT CONVERSION ARE AVAILABLE FOR " & |
"LIMITED AND NON-LIMITED PRIVATE TYPES. " & |
"INCLUDE TYPES WITH DISCRIMINANTS AND " & |
"TYPES WITH LIMITED COMPONENTS"); |
|
INIT (IVAR.COMPI, 50); |
|
FOR K IN IDENT_INT (1) .. IDENT_INT (5) LOOP |
INIT (JVAR(K), 25); |
END LOOP; |
|
IF NOT (AVAR IN A) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"PRIVATE TYPE - 1"); |
END IF; |
|
IF (AVAR NOT IN A) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"PRIVATE TYPE - 1"); |
END IF; |
|
IF NOT (B1 IN B) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"LIMITED PRIVATE TYPE - 1"); |
END IF; |
|
IF (B1 NOT IN B) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"LIMITED PRIVATE TYPE - 1"); |
END IF; |
|
QUAL_PRIV (A'(AVAR)); |
|
QUAL_LIM_PRIV (B'(B1)); |
|
EXPL_CONV_PRIV_1 (C(C1)); |
|
EXPL_CONV_LIM_PRIV_1 (D(D1)); |
|
IF NOT (EVAR IN E) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"PRIVATE TYPE - 2"); |
END IF; |
|
IF (EVAR NOT IN E) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"PRIVATE TYPE - 2"); |
END IF; |
|
IF NOT (F1 IN F) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"LIMITED PRIVATE TYPE - 2"); |
END IF; |
|
IF (F1 NOT IN F) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"LIMITED PRIVATE TYPE - 2"); |
END IF; |
|
EXPL_CONV_PRIV_2 (G(G1)); |
|
EXPL_CONV_LIM_PRIV_2 (H(H1)); |
|
IF NOT (IVAR IN I) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"PRIVATE TYPE - 3"); |
END IF; |
|
IF (IVAR NOT IN I) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"PRIVATE TYPE - 3"); |
END IF; |
|
EXPL_CONV_PRIV_3 (I(IVAR)); |
|
IF NOT (JVAR IN J) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'IN' FOR " & |
"PRIVATE TYPE - 4"); |
END IF; |
|
IF (JVAR NOT IN J) THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST 'NOT IN' FOR " & |
"PRIVATE TYPE - 4"); |
END IF; |
|
EXPL_CONV_PRIV_4 (J(JVAR)); |
|
RESULT; |
END C74203A; |
/c74302b.ada
0,0 → 1,308
-- C74302B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT WHEN THE FULL DECLARATION OF A DEFERRED CONSTANT IS |
-- GIVEN AS A MULTIPLE DECLARATION, THE INITIALIZATION EXPRESSION |
-- IS EVALUATED ONCE FOR EACH DEFERRED CONSTANT. (USE ENUMERATION, |
-- INTEGER, FIXED POINT, FLOATING POINT, ARRAY, RECORD (INCLUDING |
-- USE OF DEFAULT EXPRESSIONS FOR COMPONENTS), ACCESS, AND PRIVATE |
-- TYPES AS FULL DECLARATION OF PRIVATE TYPE) |
|
-- HISTORY: |
-- BCB 07/25/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74302B IS |
|
TYPE ARR_RAN IS RANGE 1..2; |
|
BUMP : INTEGER := IDENT_INT(0); |
|
GENERIC |
TYPE DT IS (<>); |
FUNCTION F1 RETURN DT; |
|
GENERIC |
TYPE FE IS DELTA <>; |
FUNCTION F2 RETURN FE; |
|
GENERIC |
TYPE FLE IS DIGITS <>; |
FUNCTION F3 RETURN FLE; |
|
GENERIC |
TYPE CA IS ARRAY(ARR_RAN) OF INTEGER; |
FUNCTION F4 RETURN CA; |
|
GENERIC |
TYPE GP IS LIMITED PRIVATE; |
FUNCTION F5 (V : GP) RETURN GP; |
|
GENERIC |
TYPE GP1 IS LIMITED PRIVATE; |
FUNCTION F6 (V1 : GP1) RETURN GP1; |
|
GENERIC |
TYPE AC IS ACCESS INTEGER; |
FUNCTION F7 RETURN AC; |
|
GENERIC |
TYPE PP IS PRIVATE; |
FUNCTION F8 (P1 : PP) RETURN PP; |
|
FUNCTION F1 RETURN DT IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN DT'VAL(BUMP); |
END F1; |
|
FUNCTION F2 RETURN FE IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN FE(BUMP); |
END F2; |
|
FUNCTION F3 RETURN FLE IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN FLE(BUMP); |
END F3; |
|
FUNCTION F4 RETURN CA IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN ((BUMP,BUMP-1)); |
END F4; |
|
FUNCTION F5 (V : GP) RETURN GP IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN V; |
END F5; |
|
FUNCTION F6 (V1 : GP1) RETURN GP1 IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN V1; |
END F6; |
|
FUNCTION F7 RETURN AC IS |
VAR : AC; |
BEGIN |
BUMP := BUMP + 1; |
VAR := NEW INTEGER'(BUMP); |
RETURN VAR; |
END F7; |
|
FUNCTION F8 (P1 : PP) RETURN PP IS |
BEGIN |
BUMP := BUMP + 1; |
RETURN P1; |
END F8; |
|
PACKAGE PACK IS |
TYPE SP IS PRIVATE; |
CONS : CONSTANT SP; |
PRIVATE |
TYPE SP IS RANGE 1 .. 100; |
CONS : CONSTANT SP := 50; |
END PACK; |
|
USE PACK; |
|
PACKAGE P IS |
TYPE INT IS PRIVATE; |
TYPE ENUM IS PRIVATE; |
TYPE FIX IS PRIVATE; |
TYPE FLT IS PRIVATE; |
TYPE CON_ARR IS PRIVATE; |
TYPE REC IS PRIVATE; |
TYPE REC1 IS PRIVATE; |
TYPE ACC IS PRIVATE; |
TYPE PRIV IS PRIVATE; |
|
GENERIC |
TYPE LP IS PRIVATE; |
FUNCTION GEN_EQUAL (Z1, Z2 : LP) RETURN BOOLEAN; |
|
I1, I2, I3, I4 : CONSTANT INT; |
E1, E2, E3, E4 : CONSTANT ENUM; |
FI1, FI2, FI3, FI4 : CONSTANT FIX; |
FL1, FL2, FL3, FL4 : CONSTANT FLT; |
CA1, CA2, CA3, CA4 : CONSTANT CON_ARR; |
R1, R2, R3, R4 : CONSTANT REC; |
R1A, R2A, R3A, R4A : CONSTANT REC1; |
A1, A2, A3, A4 : CONSTANT ACC; |
PR1, PR2, PR3, PR4 : CONSTANT PRIV; |
PRIVATE |
TYPE INT IS RANGE 1 .. 100; |
|
TYPE ENUM IS (ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE); |
|
TYPE FIX IS DELTA 2.0**(-1) RANGE -100.0 .. 100.0; |
|
TYPE FLT IS DIGITS 5 RANGE -100.0 .. 100.0; |
|
TYPE CON_ARR IS ARRAY(ARR_RAN) OF INTEGER; |
|
TYPE REC IS RECORD |
COMP1 : INTEGER; |
COMP2 : INTEGER; |
COMP3 : BOOLEAN; |
END RECORD; |
|
TYPE REC1 IS RECORD |
COMP1 : INTEGER := 10; |
COMP2 : INTEGER := 20; |
COMP3 : BOOLEAN := FALSE; |
END RECORD; |
|
TYPE ACC IS ACCESS INTEGER; |
|
TYPE PRIV IS NEW SP; |
|
FUNCTION DDT IS NEW F1 (INT); |
FUNCTION EDT IS NEW F1 (ENUM); |
FUNCTION FDT IS NEW F2 (FIX); |
FUNCTION FLDT IS NEW F3 (FLT); |
FUNCTION CADT IS NEW F4 (CON_ARR); |
FUNCTION RDT IS NEW F5 (REC); |
FUNCTION R1DT IS NEW F6 (REC1); |
FUNCTION ADT IS NEW F7 (ACC); |
FUNCTION PDT IS NEW F8 (PRIV); |
|
REC_OBJ : REC := (1,2,TRUE); |
REC1_OBJ : REC1 := (3,4,FALSE); |
|
I1, I2, I3, I4 : CONSTANT INT := DDT; |
E1, E2, E3, E4 : CONSTANT ENUM := EDT; |
FI1, FI2, FI3, FI4 : CONSTANT FIX := FDT; |
FL1, FL2, FL3, FL4 : CONSTANT FLT := FLDT; |
CA1, CA2, CA3, CA4 : CONSTANT CON_ARR := CADT; |
R1, R2, R3, R4 : CONSTANT REC := RDT(REC_OBJ); |
R1A, R2A, R3A, R4A : CONSTANT REC1 := R1DT(REC1_OBJ); |
A1, A2, A3, A4 : CONSTANT ACC := ADT; |
PR1, PR2, PR3, PR4 : CONSTANT PRIV := PDT(PRIV(CONS)); |
END P; |
|
PACKAGE BODY P IS |
AVAR1 : ACC := NEW INTEGER'(29); |
AVAR2 : ACC := NEW INTEGER'(30); |
AVAR3 : ACC := NEW INTEGER'(31); |
AVAR4 : ACC := NEW INTEGER'(32); |
|
FUNCTION GEN_EQUAL (Z1, Z2 : LP) RETURN BOOLEAN IS |
BEGIN |
RETURN Z1 = Z2; |
END GEN_EQUAL; |
|
FUNCTION INT_EQUAL IS NEW GEN_EQUAL (INT); |
FUNCTION ENUM_EQUAL IS NEW GEN_EQUAL (ENUM); |
FUNCTION FIX_EQUAL IS NEW GEN_EQUAL (FIX); |
FUNCTION FLT_EQUAL IS NEW GEN_EQUAL (FLT); |
FUNCTION ARR_EQUAL IS NEW GEN_EQUAL (CON_ARR); |
FUNCTION REC_EQUAL IS NEW GEN_EQUAL (REC); |
FUNCTION REC1_EQUAL IS NEW GEN_EQUAL (REC1); |
FUNCTION ACC_EQUAL IS NEW GEN_EQUAL (INTEGER); |
FUNCTION PRIV_EQUAL IS NEW GEN_EQUAL (PRIV); |
BEGIN |
TEST ("C74302B", "CHECK THAT WHEN THE FULL DECLARATION OF " & |
"A DEFERRED CONSTANT IS GIVEN AS A " & |
"MULTIPLE DECLARATION, THE INITIALIZATION " & |
"EXPRESSION IS EVALUATED ONCE FOR EACH " & |
"DEFERRED CONSTANT"); |
|
IF NOT EQUAL(BUMP,36) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED CONSTANTS IN A MULIPLE DECLARATION"); |
END IF; |
|
IF NOT INT_EQUAL(I1,1) OR NOT INT_EQUAL(I2,2) OR |
NOT INT_EQUAL(I3,3) OR NOT INT_EQUAL(I4,4) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED INTEGER CONSTANTS"); |
END IF; |
|
IF NOT ENUM_EQUAL(E1,SIX) OR NOT ENUM_EQUAL(E2,SEVEN) OR |
NOT ENUM_EQUAL(E3,EIGHT) OR NOT ENUM_EQUAL(E4,NINE) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED ENUMERATION CONSTANTS"); |
END IF; |
|
IF NOT FIX_EQUAL(FI1,9.0) OR NOT FIX_EQUAL(FI2,10.0) OR |
NOT FIX_EQUAL(FI3,11.0) OR NOT FIX_EQUAL(FI4,12.0) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED FIXED POINT CONSTANTS"); |
END IF; |
|
IF NOT FLT_EQUAL(FL1,13.0) OR NOT FLT_EQUAL(FL2,14.0) OR |
NOT FLT_EQUAL(FL3,15.0) OR NOT FLT_EQUAL(FL4,16.0) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED FLOATING POINT CONSTANTS"); |
END IF; |
|
IF NOT ARR_EQUAL(CA1,(17,16)) OR NOT ARR_EQUAL(CA2,(18,17)) |
OR NOT ARR_EQUAL(CA3,(19,18)) OR NOT ARR_EQUAL(CA4,(20,19)) |
THEN FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED ARRAY CONSTANTS"); |
END IF; |
|
IF NOT REC_EQUAL(R1,REC_OBJ) OR NOT REC_EQUAL(R2,REC_OBJ) |
OR NOT REC_EQUAL(R3,REC_OBJ) OR NOT REC_EQUAL(R4,REC_OBJ) |
THEN FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED RECORD CONSTANTS"); |
END IF; |
|
IF NOT REC1_EQUAL(R1A,REC1_OBJ) OR NOT REC1_EQUAL(R2A, |
REC1_OBJ) OR NOT REC1_EQUAL(R3A,REC1_OBJ) OR NOT |
REC1_EQUAL(R4A,REC1_OBJ) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED RECORD CONSTANTS WITH DEFAULT " & |
"EXPRESSIONS"); |
END IF; |
|
IF NOT ACC_EQUAL(A1.ALL,AVAR1.ALL) OR NOT ACC_EQUAL(A2.ALL, |
AVAR2.ALL) OR NOT ACC_EQUAL(A3.ALL,AVAR3.ALL) OR NOT |
ACC_EQUAL(A4.ALL,AVAR4.ALL) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED ACCESS CONSTANTS"); |
END IF; |
|
IF NOT PRIV_EQUAL(PR1,PRIV(CONS)) OR NOT PRIV_EQUAL(PR2, |
PRIV(CONS)) OR NOT PRIV_EQUAL(PR3,PRIV(CONS)) OR NOT |
PRIV_EQUAL(PR4,PRIV(CONS)) THEN |
FAILED ("IMPROPER RESULTS FROM INITIALIZATION OF " & |
"DEFERRED PRIVATE CONSTANTS"); |
END IF; |
|
RESULT; |
END P; |
|
USE P; |
|
BEGIN |
NULL; |
END C74302B; |
/c74401d.ada
0,0 → 1,111
-- C74401D.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT AN OUT PARAMETER HAVING A LIMITED TYPE IS ALLOWED FOR |
-- FORMAL SUBPROGRAM PARAMETERS. (ONLY THE CASE OF PRACTICAL INTEREST, |
-- NAMELY, LIMITED PRIVATE TYPES, IS CHECKED HERE.) |
|
-- CHECK THAT AN OUT PARAMETER IN A RENAMING DECLARATION CAN HAVE A |
-- LIMITED PRIVATE TYPE WHEN IT RENAMES A GENERIC FORMAL SUBPROGRAM. |
|
-- JBG 5/1/85 |
|
WITH REPORT; USE REPORT; |
PROCEDURE C74401D IS |
|
PACKAGE P IS |
TYPE LP IS LIMITED PRIVATE; |
PROCEDURE P1 (X : OUT LP); |
PROCEDURE P2 (X : OUT LP); |
FUNCTION EQ (L, R : LP) RETURN BOOLEAN; |
VAL1 : CONSTANT LP; |
VAL2 : CONSTANT LP; |
PRIVATE |
TYPE LP IS NEW INTEGER; |
VAL1 : CONSTANT LP := LP(IDENT_INT(3)); |
VAL2 : CONSTANT LP := LP(IDENT_INT(-3)); |
END P; |
|
PACKAGE BODY P IS |
PROCEDURE P1 (X : OUT LP) IS |
BEGIN |
X := 3; |
END P1; |
|
PROCEDURE P2 (X : OUT LP) IS |
BEGIN |
X := -3; |
END P2; |
|
FUNCTION EQ (L, R : LP) RETURN BOOLEAN IS |
BEGIN |
RETURN L = R; |
END EQ; |
END P; |
|
GENERIC |
WITH PROCEDURE P3 (Y : OUT P.LP); |
TYPE GLP IS LIMITED PRIVATE; |
WITH PROCEDURE P4 (Y : OUT GLP); |
VAL_P3 : IN OUT P.LP; |
VAL_P4 : IN OUT GLP; |
PACKAGE GPACK IS |
PROCEDURE RENAMED (X : OUT GLP) RENAMES P4; -- OK. RENAMING. |
END GPACK; |
|
PACKAGE BODY GPACK IS |
BEGIN |
P3 (VAL_P3); |
P4 (VAL_P4); |
END GPACK; |
|
BEGIN |
|
TEST ("C74401D", "CHECK THAT GENERIC FORMAL SUBPROGRAMS CAN HAVE "& |
"LIMITED PRIVATE OUT PARAMETERS"); |
|
DECLARE |
VAR1 : P.LP; |
VAR2 : P.LP; |
PACKAGE PACK IS NEW GPACK (P.P1, P.LP, P.P2, VAR1, VAR2); |
BEGIN |
IF NOT P.EQ (VAR1, P.VAL1) THEN |
FAILED ("P1 INVOCATION INCORRECT"); |
END IF; |
|
IF NOT P.EQ (VAR2, P.VAL2) THEN |
FAILED ("P2 INVOCATION INCORRECT"); |
END IF; |
|
P.P1 (VAR2); -- RESET VALUE OF VAR2. |
PACK.RENAMED (VAR2); |
|
IF NOT P.EQ (VAR2, P.VAL2) THEN |
FAILED ("RENAMED INVOCATION INCORRECT"); |
END IF; |
END; |
|
RESULT; |
|
END C74401D; |
/c74306a.ada
0,0 → 1,279
-- C74306A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- AFTER THE FULL DECLARATION OF A DEFERRED CONSTANT, THE VALUE OF |
-- THE CONSTANT MAY BE USED IN ANY EXPRESSION, PARTICULARLY |
-- EXPRESSIONS IN WHICH THE USE WOULD BE ILLEGAL BEFORE THE FULL |
-- DECLARATION. |
|
-- HISTORY: |
-- BCB 03/14/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74306A IS |
|
GENERIC |
TYPE GENERAL_PURPOSE IS LIMITED PRIVATE; |
Y : IN OUT GENERAL_PURPOSE; |
FUNCTION IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE; |
|
FUNCTION IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE IS |
BEGIN |
IF EQUAL(3,3) THEN |
RETURN X; |
END IF; |
RETURN Y; |
END IDENT; |
|
PACKAGE P IS |
TYPE T IS PRIVATE; |
C : CONSTANT T; |
PRIVATE |
TYPE T IS RANGE 1 .. 100; |
|
TYPE A IS ARRAY(1..2) OF T; |
|
TYPE B IS ARRAY(INTEGER RANGE <>) OF T; |
|
TYPE D (DISC : T) IS RECORD |
NULL; |
END RECORD; |
|
C : CONSTANT T := 50; |
|
PARAM : T := 99; |
|
FUNCTION IDENT_T IS NEW IDENT (T, PARAM); |
|
FUNCTION F (X : T := C) RETURN T; |
|
SUBTYPE RAN IS T RANGE 1 .. C; |
|
SUBTYPE IND IS B(1..INTEGER(C)); |
|
SUBTYPE DIS IS D (DISC => C); |
|
OBJ : T := C; |
|
CON : CONSTANT T := C; |
|
ARR : A := (5, C); |
|
PAR : T := IDENT_T (C); |
|
RANOBJ : T RANGE 1 .. C := C; |
|
INDOBJ : B(1..INTEGER(C)); |
|
DIS_VAL : DIS; |
|
REN : T RENAMES C; |
|
GENERIC |
FOR_PAR : T := C; |
PACKAGE GENPACK IS |
VAL : T; |
END GENPACK; |
|
GENERIC |
IN_PAR : IN T; |
PACKAGE NEWPACK IS |
IN_VAL : T; |
END NEWPACK; |
END P; |
|
USE P; |
|
PACKAGE BODY P IS |
TYPE A1 IS ARRAY(1..2) OF T; |
|
TYPE B1 IS ARRAY(INTEGER RANGE <>) OF T; |
|
TYPE D1 (DISC1 : T) IS RECORD |
NULL; |
END RECORD; |
|
SUBTYPE RAN1 IS T RANGE 1 .. C; |
|
SUBTYPE IND1 IS B1(1..INTEGER(C)); |
|
SUBTYPE DIS1 IS D1 (DISC1 => C); |
|
OBJ1 : T := C; |
|
FUNCVAR : T; |
|
CON1 : CONSTANT T := C; |
|
ARR1 : A1 := (5, C); |
|
PAR1 : T := IDENT_T (C); |
|
RANOBJ1 : T RANGE 1 .. C := C; |
|
INDOBJ1 : B1(1..INTEGER(C)); |
|
DIS_VAL1 : DIS1; |
|
REN1 : T RENAMES C; |
|
FUNCTION F (X : T := C) RETURN T IS |
BEGIN |
RETURN C; |
END F; |
|
PACKAGE BODY GENPACK IS |
BEGIN |
VAL := FOR_PAR; |
END GENPACK; |
|
PACKAGE BODY NEWPACK IS |
BEGIN |
IN_VAL := IN_PAR; |
END NEWPACK; |
|
PACKAGE PACK IS NEW GENPACK (FOR_PAR => C); |
|
PACKAGE NPACK IS NEW NEWPACK (IN_PAR => C); |
BEGIN |
TEST ("C74306A", "AFTER THE FULL DECLARATION OF A DEFERRED " & |
"CONSTANT, THE VALUE OF THE CONSTANT MAY " & |
"BE USED IN ANY EXPRESSION, PARTICULARLY " & |
"EXPRESSIONS IN WHICH THE USE WOULD BE " & |
"ILLEGAL BEFORE THE FULL DECLARATION"); |
|
IF OBJ /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR OBJ"); |
END IF; |
|
IF CON /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR CON"); |
END IF; |
|
IF ARR /= (IDENT_T(5), IDENT_T(50)) THEN |
FAILED ("IMPROPER VALUES FOR ARR"); |
END IF; |
|
IF PAR /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR PAR"); |
END IF; |
|
IF OBJ1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR OBJ1"); |
END IF; |
|
IF CON1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR CON1"); |
END IF; |
|
IF ARR1 /= (IDENT_T(5), IDENT_T(50)) THEN |
FAILED ("IMPROPER VALUES FOR ARR1"); |
END IF; |
|
IF PAR1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR PAR1"); |
END IF; |
|
IF PACK.VAL /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR PACK.VAL"); |
END IF; |
|
IF NPACK.IN_VAL /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR NPACK.IN_VAL"); |
END IF; |
|
IF RAN'LAST /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR RAN'LAST"); |
END IF; |
|
IF RANOBJ /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR RANOBJ"); |
END IF; |
|
IF IND'LAST /= IDENT_INT(50) THEN |
FAILED ("IMPROPER VALUE FOR IND'LAST"); |
END IF; |
|
IF INDOBJ'LAST /= IDENT_INT(50) THEN |
FAILED ("IMPROPER VALUE FOR INDOBJ'LAST"); |
END IF; |
|
IF DIS_VAL.DISC /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR DIS_VAL.DISC"); |
END IF; |
|
IF REN /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR REN"); |
END IF; |
|
IF RAN1'LAST /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR RAN1'LAST"); |
END IF; |
|
IF RANOBJ1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR RANOBJ1"); |
END IF; |
|
IF IND1'LAST /= IDENT_INT(50) THEN |
FAILED ("IMPROPER VALUE FOR IND1'LAST"); |
END IF; |
|
IF INDOBJ1'LAST /= IDENT_INT(50) THEN |
FAILED ("IMPROPER VALUE FOR INDOBJ1'LAST"); |
END IF; |
|
IF DIS_VAL1.DISC1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR DIS_VAL1.DISC1"); |
END IF; |
|
IF REN1 /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR REN1"); |
END IF; |
|
FUNCVAR := F(C); |
|
IF FUNCVAR /= IDENT_T(50) THEN |
FAILED ("IMPROPER VALUE FOR FUNCVAR"); |
END IF; |
|
RESULT; |
END P; |
|
BEGIN |
DECLARE |
TYPE ARR IS ARRAY(1..2) OF T; |
|
VAL1 : T := C; |
|
VAL2 : ARR := (C, C); |
|
VAL3 : T RENAMES C; |
BEGIN |
NULL; |
END; |
|
NULL; |
END C74306A; |
/c74401e.ada
0,0 → 1,120
-- C74401E.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT OUT PARAMETERS HAVING A LIMITED PRIVATE TYPE CAN BE |
-- DECLARED IN A PACKAGE SPECIFICATION, INCLUDING WITHIN PACKAGES |
-- NESTED IN A VISIBLE PART. |
|
-- CHECK THAT A RENAMING DECLARATION CAN RENAME A PROCEDURE DECLARED |
-- WITH AN OUT PARAMETER. |
|
-- JBG 5/1/85 |
|
WITH REPORT; USE REPORT; |
PROCEDURE C74401E IS |
|
PACKAGE PKG IS |
TYPE LP IS LIMITED PRIVATE; |
PROCEDURE P20 (X : OUT LP); -- OK. |
PROCEDURE RESET (X : OUT LP); |
FUNCTION EQ (L, R : LP) RETURN BOOLEAN; |
VAL1 : CONSTANT LP; |
|
PACKAGE NESTED IS |
PROCEDURE NEST1 (X : OUT LP); |
PRIVATE |
PROCEDURE NEST2 (X : OUT LP); |
END NESTED; |
PRIVATE |
TYPE LP IS NEW INTEGER; |
VAL1 : CONSTANT LP := LP(IDENT_INT(3)); |
END PKG; |
|
VAR : PKG.LP; |
|
PACKAGE BODY PKG IS |
PROCEDURE P20 (X : OUT LP) IS |
BEGIN |
X := 3; |
END P20; |
|
PROCEDURE RESET (X : OUT LP) IS |
BEGIN |
X := LP(IDENT_INT(0)); |
END RESET; |
|
FUNCTION EQ (L, R : LP) RETURN BOOLEAN IS |
BEGIN |
RETURN L = R; |
END EQ; |
|
PACKAGE BODY NESTED IS |
PROCEDURE NEST1 (X : OUT LP) IS |
BEGIN |
X := 3; |
END NEST1; |
|
PROCEDURE NEST2 (X : OUT LP) IS |
BEGIN |
X := LP(IDENT_INT(3)); |
END NEST2; |
END NESTED; |
BEGIN |
VAR := LP(IDENT_INT(0)); |
END PKG; |
|
PACKAGE PKG1 IS |
PROCEDURE P21 (X : OUT PKG.LP) RENAMES PKG.P20; -- OK: |
-- RENAMING. |
END PKG1; |
|
BEGIN |
|
TEST ("C74401E", "CHECK THAT A PROCEDURE CAN HAVE AN OUT " & |
"PARAMETER WITH A LIMITED PRIVATE TYPE"); |
|
PKG.RESET (VAR); |
PKG.P20 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("DIRECT CALL NOT CORRECT"); |
END IF; |
|
PKG.RESET (VAR); |
PKG1.P21 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("RENAMED CALL NOT CORRECT"); |
END IF; |
|
PKG.RESET (VAR); |
PKG.NESTED.NEST1 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("NESTED CALL NOT CORRECT"); |
END IF; |
|
RESULT; |
|
END C74401E; |
/c74207b.ada
0,0 → 1,75
-- C74207B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT 'CONSTRAINED CAN BE APPLIED AFTER THE FULL DECLARATION OF |
-- A PRIVATE TYPE THAT IS DERIVED FROM A PRIVATE TYPE. |
|
-- BHS 6/18/84 |
|
WITH REPORT; |
USE REPORT; |
PROCEDURE C74207B IS |
BEGIN |
TEST ("C74207B", "AFTER THE FULL DECLARATION OF A PRIVATE " & |
"TYPE DERIVED FROM A PRIVATE TYPE, " & |
"'CONSTRAINED MAY BE APPLIED"); |
|
DECLARE |
PACKAGE P1 IS |
TYPE PREC (D : INTEGER) IS PRIVATE; |
TYPE P IS PRIVATE; |
PRIVATE |
TYPE PREC (D : INTEGER) IS RECORD |
NULL; |
END RECORD; |
TYPE P IS NEW INTEGER; |
END P1; |
|
PACKAGE P2 IS |
TYPE LP1 IS LIMITED PRIVATE; |
TYPE LP2 IS LIMITED PRIVATE; |
PRIVATE |
TYPE LP1 IS NEW P1.PREC(3); |
TYPE LP2 IS NEW P1.P; |
B1 : BOOLEAN := LP1'CONSTRAINED; |
B2 : BOOLEAN := LP2'CONSTRAINED; |
END P2; |
|
PACKAGE BODY P2 IS |
BEGIN |
IF NOT IDENT_BOOL(B1) THEN |
FAILED ("WRONG VALUE FOR LP1'CONSTRAINED"); |
END IF; |
IF NOT IDENT_BOOL(B2) THEN |
FAILED ("WRONG VALUE FOR LP2'CONSTRAINED"); |
END IF; |
END P2; |
|
BEGIN |
NULL; |
END; |
|
RESULT; |
|
END C74207B; |
/c731001.a
0,0 → 1,407
-- C731001.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and |
-- F08630-91-C-0015, the U.S. Government obtained unlimited rights in the |
-- software and documentation contained herein. Unlimited rights are |
-- defined in DFAR 252.227-7013(a)(19). By making this public release, |
-- the Government intends to confer upon all recipients unlimited rights |
-- equal to those held by the Government. These rights include rights to |
-- use, duplicate, release or disclose the released technical data and |
-- computer software in whole or in part, in any manner and for any purpose |
-- whatsoever, and to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE |
-- Check that inherited operations can be overridden, even when they are |
-- inherited in a body. |
-- The test cases here are inspired by the AARM examples given in |
-- the discussion of AARM-7.3.1(7.a-7.v). |
-- This discussion was confirmed by AI95-00035. |
-- |
-- TEST DESCRIPTION |
-- See AARM-7.3.1. |
-- |
-- CHANGE HISTORY: |
-- 29 JUN 1999 RAD Initial Version |
-- 23 SEP 1999 RLB Improved comments, renamed, issued. |
-- 20 AUG 2001 RLB Corrected 'verbose' flag. |
-- |
--! |
|
with Report; use Report; pragma Elaborate_All(Report); |
package C731001_1 is |
pragma Elaborate_Body; |
private |
procedure Check_String(X, Y: String); |
function Check_String(X, Y: String) return String; |
-- This one is a function, so we can call it in package specs. |
end C731001_1; |
|
package body C731001_1 is |
|
Verbose: Boolean := False; |
|
procedure Check_String(X, Y: String) is |
begin |
if Verbose then |
Comment("""" & X & """ = """ & Y & """?"); |
end if; |
if X /= Y then |
Failed("""" & X & """ should be """ & Y & """"); |
end if; |
end Check_String; |
|
function Check_String(X, Y: String) return String is |
begin |
Check_String(X, Y); |
return X; |
end Check_String; |
|
end C731001_1; |
|
private package C731001_1.Parent is |
|
procedure Call_Main; |
|
type Root is tagged null record; |
subtype Renames_Root is Root; |
subtype Root_Class is Renames_Root'Class; |
function Make return Root; |
function Op1(X: Root) return String; |
function Call_Op2(X: Root'Class) return String; |
private |
function Op2(X: Root) return String; |
end C731001_1.Parent; |
|
procedure C731001_1.Parent.Main; |
|
with C731001_1.Parent.Main; |
package body C731001_1.Parent is |
|
procedure Call_Main is |
begin |
Main; |
end Call_Main; |
|
function Make return Root is |
Result: Root; |
begin |
return Result; |
end Make; |
|
function Op1(X: Root) return String is |
begin |
return "Parent.Op1 body"; |
end Op1; |
|
function Op2(X: Root) return String is |
begin |
return "Parent.Op2 body"; |
end Op2; |
|
function Call_Op2(X: Root'Class) return String is |
begin |
return Op2(X); |
end Call_Op2; |
|
begin |
|
Check_String(Op1(Root'(Make)), "Parent.Op1 body"); |
Check_String(Op1(Root_Class(Root'(Make))), "Parent.Op1 body"); |
|
Check_String(Op2(Root'(Make)), "Parent.Op2 body"); |
Check_String(Op2(Root_Class(Root'(Make))), "Parent.Op2 body"); |
|
end C731001_1.Parent; |
|
with C731001_1.Parent; use C731001_1.Parent; |
private package C731001_1.Unrelated is |
|
type T2 is new Root with null record; |
subtype T2_Class is T2'Class; |
function Make return T2; |
function Op2(X: T2) return String; |
end C731001_1.Unrelated; |
|
with C731001_1.Parent; use C731001_1.Parent; |
pragma Elaborate(C731001_1.Parent); |
package body C731001_1.Unrelated is |
|
function Make return T2 is |
Result: T2; |
begin |
return Result; |
end Make; |
|
function Op2(X: T2) return String is |
begin |
return "Unrelated.Op2 body"; |
end Op2; |
begin |
|
Check_String(Op1(T2'(Make)), "Parent.Op1 body"); |
Check_String(Op1(T2_Class(T2'(Make))), "Parent.Op1 body"); |
Check_String(Op1(Root_Class(T2'(Make))), "Parent.Op1 body"); |
|
Check_String(Op2(T2'(Make)), "Unrelated.Op2 body"); |
Check_String(Op2(T2_Class(T2'(Make))), "Unrelated.Op2 body"); |
Check_String(Call_Op2(T2'(Make)), "Parent.Op2 body"); |
Check_String(Call_Op2(T2_Class(T2'(Make))), "Parent.Op2 body"); |
Check_String(Call_Op2(Root_Class(T2'(Make))), "Parent.Op2 body"); |
|
end C731001_1.Unrelated; |
|
package C731001_1.Parent.Child is |
pragma Elaborate_Body; |
|
type T3 is new Root with null record; |
subtype T3_Class is T3'Class; |
function Make return T3; |
|
T3_Obj: T3; |
T3_Class_Obj: T3_Class := T3_Obj; |
T3_Root_Class_Obj: Root_Class := T3_Obj; |
|
X3: constant String := |
Check_String(Op1(T3_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body"); |
|
package Nested is |
type T4 is new Root with null record; |
subtype T4_Class is T4'Class; |
function Make return T4; |
|
T4_Obj: T4; |
T4_Class_Obj: T4_Class := T4_Obj; |
T4_Root_Class_Obj: Root_Class := T4_Obj; |
|
X4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
private |
|
XX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
end Nested; |
|
use Nested; |
|
XXX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
private |
|
XX3: constant String := |
Check_String(Op1(T3_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T3_Obj), "Parent.Op2 body") & |
Check_String(Op2(T3_Class_Obj), "Parent.Op2 body") & |
Check_String(Op2(T3_Root_Class_Obj), "Parent.Op2 body"); |
|
XXXX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
end C731001_1.Parent.Child; |
|
with C731001_1.Unrelated; use C731001_1.Unrelated; |
pragma Elaborate(C731001_1.Unrelated); |
package body C731001_1.Parent.Child is |
|
XXX3: constant String := |
Check_String(Op1(T3_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T3_Obj), "Parent.Op2 body") & |
Check_String(Op2(T3_Class_Obj), "Parent.Op2 body") & |
Check_String(Op2(T3_Root_Class_Obj), "Parent.Op2 body"); |
|
XXXXX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
function Make return T3 is |
Result: T3; |
begin |
return Result; |
end Make; |
|
package body Nested is |
function Make return T4 is |
Result: T4; |
begin |
return Result; |
end Make; |
|
XXXXXX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
end Nested; |
|
type T5 is new T2 with null record; |
subtype T5_Class is T5'Class; |
function Make return T5; |
|
function Make return T5 is |
Result: T5; |
begin |
return Result; |
end Make; |
|
XXXXXXX4: constant String := |
Check_String(Op1(T4_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & |
|
Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
end C731001_1.Parent.Child; |
|
procedure C731001_1.Main; |
|
with C731001_1.Parent; |
procedure C731001_1.Main is |
begin |
C731001_1.Parent.Call_Main; |
end C731001_1.Main; |
|
with C731001_1.Parent.Child; |
use C731001_1.Parent; |
use C731001_1.Parent.Child; |
use C731001_1.Parent.Child.Nested; |
with C731001_1.Unrelated; use C731001_1.Unrelated; |
procedure C731001_1.Parent.Main is |
|
Root_Obj: Root := Make; |
Root_Class_Obj: Root_Class := Root'(Make); |
|
T2_Obj: T2 := Make; |
T2_Class_Obj: T2_Class := T2_Obj; |
T2_Root_Class_Obj: Root_Class := T2_Class_Obj; |
|
T3_Obj: T3 := Make; |
T3_Class_Obj: T3_Class := T3_Obj; |
T3_Root_Class_Obj: Root_Class := T3_Obj; |
|
T4_Obj: T4 := Make; |
T4_Class_Obj: T4_Class := T4_Obj; |
T4_Root_Class_Obj: Root_Class := T4_Obj; |
|
begin |
Test("C731001_1", "Check that inherited operations can be overridden, even" |
& " when they are inherited in a body"); |
|
Check_String(Op1(Root_Obj), "Parent.Op1 body"); |
Check_String(Op1(Root_Class_Obj), "Parent.Op1 body"); |
|
Check_String(Call_Op2(Root_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(Root_Class_Obj), "Parent.Op2 body"); |
|
Check_String(Op1(T2_Obj), "Parent.Op1 body"); |
Check_String(Op1(T2_Class_Obj), "Parent.Op1 body"); |
Check_String(Op1(T2_Root_Class_Obj), "Parent.Op1 body"); |
|
Check_String(Op2(T2_Obj), "Unrelated.Op2 body"); |
Check_String(Op2(T2_Class_Obj), "Unrelated.Op2 body"); |
Check_String(Call_Op2(T2_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T2_Class_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T2_Root_Class_Obj), "Parent.Op2 body"); |
|
Check_String(Op1(T3_Obj), "Parent.Op1 body"); |
Check_String(Op1(T3_Class_Obj), "Parent.Op1 body"); |
Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body"); |
|
Check_String(Call_Op2(T3_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body"); |
|
Check_String(Op1(T4_Obj), "Parent.Op1 body"); |
Check_String(Op1(T4_Class_Obj), "Parent.Op1 body"); |
Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body"); |
|
Check_String(Call_Op2(T4_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body"); |
Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); |
|
Result; |
end C731001_1.Parent.Main; |
|
with C731001_1.Main; |
procedure C731001 is |
begin |
C731001_1.Main; |
end C731001; |
/c74209a.ada
0,0 → 1,224
-- C74209A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT OUTSIDE A PACKAGE WHICH DEFINES PRIVATE TYPES AND LIMITED |
-- PRIVATE TYPES IT IS POSSIBLE TO DECLARE SUBPROGRAMS WHICH USE |
-- THOSE TYPES AS TYPES FOR PARAMETERS (OF ANY MODE EXCEPT OUT FOR A |
-- LIMITED TYPE) OR AS THE TYPE FOR THE RESULT (FOR FUNCTION |
-- SUBPROGRAMS). |
|
-- RM 07/14/81 |
|
|
WITH REPORT; |
PROCEDURE C74209A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST( "C74209A" , "CHECK THAT PROCEDURE SIGNATURES CAN USE " & |
"PRIVATE TYPES" ); |
|
DECLARE |
|
PACKAGE PACK IS |
|
TYPE LIM_PRIV IS LIMITED PRIVATE; |
TYPE PRIV IS PRIVATE; |
PRIV_CONST_IN : CONSTANT PRIV; |
PRIV_CONST_OUT : CONSTANT PRIV; |
FUNCTION PACKAGED( X: IN INTEGER ) RETURN LIM_PRIV; |
FUNCTION EQUALS( X , Y : LIM_PRIV ) RETURN BOOLEAN ; |
PROCEDURE ASSIGN( X : IN LIM_PRIV; Y : OUT LIM_PRIV ); |
|
PRIVATE |
|
TYPE LIM_PRIV IS NEW INTEGER; |
TYPE PRIV IS NEW STRING( 1..5 ); |
PRIV_CONST_IN : CONSTANT PRIV := "ABCDE"; |
PRIV_CONST_OUT : CONSTANT PRIV := "FGHIJ"; |
|
END PACK; |
|
|
PRIV_VAR_1 , PRIV_VAR_2 : PACK.PRIV; |
LIM_PRIV_VAR_1 , LIM_PRIV_VAR_2 : PACK.LIM_PRIV; |
|
|
USE PACK; |
|
|
PACKAGE BODY PACK IS |
|
FUNCTION PACKAGED( X: IN INTEGER ) RETURN LIM_PRIV IS |
BEGIN |
RETURN LIM_PRIV(X); |
END PACKAGED; |
|
FUNCTION EQUALS( X , Y : LIM_PRIV ) RETURN BOOLEAN IS |
BEGIN |
RETURN X = Y ; |
END EQUALS; |
|
PROCEDURE ASSIGN( X : IN LIM_PRIV; Y : OUT LIM_PRIV) IS |
BEGIN |
Y := X; |
END ASSIGN; |
|
END PACK; |
|
|
PROCEDURE PROC1( X : IN OUT PACK.PRIV; |
Y : IN PACK.PRIV := PACK.PRIV_CONST_IN; |
Z : OUT PACK.PRIV; |
U : PACK.PRIV ) IS |
BEGIN |
|
IF X /= PACK.PRIV_CONST_IN OR |
Y /= PACK.PRIV_CONST_IN OR |
U /= PACK.PRIV_CONST_IN |
THEN |
FAILED( "WRONG INPUT VALUES - PROC1" ); |
END IF; |
|
X := PACK.PRIV_CONST_OUT; |
Z := PACK.PRIV_CONST_OUT; |
|
END PROC1; |
|
|
PROCEDURE PROC2( X : IN OUT LIM_PRIV; |
Y : IN LIM_PRIV; |
Z : IN OUT LIM_PRIV; |
U : LIM_PRIV ) IS |
BEGIN |
|
IF NOT(EQUALS( X , PACKAGED(17) )) OR |
NOT(EQUALS( Y , PACKAGED(17) )) OR |
NOT(EQUALS( U , PACKAGED(17) )) |
THEN |
FAILED( "WRONG INPUT VALUES - PROC2" ); |
END IF; |
|
ASSIGN( PACKAGED(13) , X ); |
ASSIGN( PACKAGED(13) , Z ); |
|
END PROC2; |
|
|
FUNCTION FUNC1( Y : IN PRIV := PRIV_CONST_IN; |
U : PRIV ) RETURN PRIV IS |
BEGIN |
|
IF Y /= PRIV_CONST_IN OR |
U /= PRIV_CONST_IN |
THEN |
FAILED( "WRONG INPUT VALUES - FUNC1" ); |
END IF; |
|
RETURN PRIV_CONST_OUT; |
|
END FUNC1; |
|
|
FUNCTION FUNC2( Y : IN LIM_PRIV; |
U : LIM_PRIV ) RETURN LIM_PRIV IS |
BEGIN |
|
IF NOT(EQUALS( Y , PACKAGED(17) )) OR |
NOT(EQUALS( U , PACKAGED(17) )) |
THEN |
FAILED( "WRONG INPUT VALUES - FUNC2" ); |
END IF; |
|
RETURN PACKAGED(13); |
|
END FUNC2; |
|
|
BEGIN |
|
-------------------------------------------------------------- |
|
PRIV_VAR_1 := PRIV_CONST_IN; |
PRIV_VAR_2 := PRIV_CONST_IN; |
|
PROC1( PRIV_VAR_1 , Z => PRIV_VAR_2 , U => PRIV_CONST_IN ); |
|
IF PRIV_VAR_1 /= PACK.PRIV_CONST_OUT OR |
PRIV_VAR_2 /= PACK.PRIV_CONST_OUT |
THEN |
FAILED( "WRONG OUTPUT VALUES - PROC1" ); |
END IF; |
|
-------------------------------------------------------------- |
|
ASSIGN( PACKAGED(17) , LIM_PRIV_VAR_1 ); |
ASSIGN( PACKAGED(17) , LIM_PRIV_VAR_2 ); |
|
PROC2( LIM_PRIV_VAR_1 , PACKAGED(17) , |
LIM_PRIV_VAR_2 , PACKAGED(17) ); |
|
IF NOT(EQUALS( LIM_PRIV_VAR_1 , PACKAGED(13) )) OR |
NOT(EQUALS( LIM_PRIV_VAR_2 , PACKAGED(13) )) |
THEN |
FAILED( "WRONG OUTPUT VALUES - PROC2" ); |
END IF; |
|
-------------------------------------------------------------- |
|
PRIV_VAR_1 := PRIV_CONST_IN; |
PRIV_VAR_2 := PRIV_CONST_IN; |
|
PRIV_VAR_1 := |
FUNC1( PRIV_VAR_1 , U => PRIV_CONST_IN ); |
|
IF PRIV_VAR_1 /= PACK.PRIV_CONST_OUT |
THEN |
FAILED( "WRONG OUTPUT VALUES - FUNC1" ); |
END IF; |
|
-------------------------------------------------------------- |
|
ASSIGN( PACKAGED(17) , LIM_PRIV_VAR_1 ); |
ASSIGN( PACKAGED(17) , LIM_PRIV_VAR_2 ); |
|
ASSIGN( FUNC2( LIM_PRIV_VAR_1 , PACKAGED(17)) , |
LIM_PRIV_VAR_1 ); |
|
IF NOT(EQUALS( LIM_PRIV_VAR_1 , PACKAGED(13) )) |
THEN |
FAILED( "WRONG OUTPUT VALUES - FUNC2" ); |
END IF; |
|
-------------------------------------------------------------- |
|
END; |
|
|
RESULT; |
|
|
END C74209A; |
/c74407b.ada
0,0 → 1,195
-- C74407B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK, FOR A LIMITED PRIVATE TYPE, THAT PRE-DEFINED EQUALITY AND |
-- ASSIGNMENT ARE DEFINED AND AVAILABLE WITHIN THE PRIVATE PART AND |
-- THE BODY OF A PACKAGE, AFTER THE FULL DECLARATION, IF THE FULL |
-- DECLARATION IS NOT LIMITED. |
|
-- HISTORY: |
-- BCB 07/15/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74407B IS |
|
PACKAGE PP IS |
TYPE PRIV IS PRIVATE; |
C1 : CONSTANT PRIV; |
C2 : CONSTANT PRIV; |
PRIVATE |
TYPE PRIV IS (ONE, TWO, THREE, FOUR, FIVE, SIX); |
C1 : CONSTANT PRIV := ONE; |
C2 : CONSTANT PRIV := TWO; |
END PP; |
|
USE PP; |
|
PACKAGE P IS |
TYPE INT IS LIMITED PRIVATE; |
TYPE COMP IS LIMITED PRIVATE; |
TYPE DER IS LIMITED PRIVATE; |
PRIVATE |
TYPE INT IS RANGE 1 .. 100; |
TYPE COMP IS ARRAY(1..5) OF INTEGER; |
TYPE DER IS NEW PRIV; |
D, E : INT := 10; |
F : INT := 20; |
CONS_INT1 : CONSTANT INT := 30; |
G : BOOLEAN := D = E; |
H : BOOLEAN := D /= F; |
CONS_BOOL1 : CONSTANT BOOLEAN := D = E; |
CONS_BOOL2 : CONSTANT BOOLEAN := D /= F; |
I : COMP := (1,2,3,4,5); |
CONS_COMP1 : CONSTANT COMP := (6,7,8,9,10); |
J : DER := DER(C1); |
CONS_DER1 : CONSTANT DER := DER(C2); |
END P; |
|
PACKAGE BODY P IS |
A, B, C : INT; |
X, Y, Z : COMP; |
L, M, N : DER; |
CONS_INT2 : CONSTANT INT := 10; |
CONS_COMP2 : CONSTANT COMP := (1,2,3,4,5); |
CONS_DER2 : CONSTANT DER := DER(C1); |
BEGIN |
TEST ("C74407B", "CHECK, FOR A LIMITED PRIVATE TYPE, THAT " & |
"PRE-DEFINED EQUALITY AND ASSIGNMENT ARE " & |
"DEFINED AND AVAILABLE WITHIN THE PRIVATE " & |
"PART AND THE BODY OF A PACKAGE, AFTER " & |
"THE FULL DECLARATION, IF THE FULL " & |
"DECLARATION IS NOT LIMITED"); |
|
A := 10; |
|
B := 10; |
|
C := 20; |
|
IF A = C THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 1"); |
END IF; |
|
IF A /= B THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 1"); |
END IF; |
|
IF CONS_INT2 = C THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 2"); |
END IF; |
|
IF CONS_INT2 /= B THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 2"); |
END IF; |
|
IF NOT G THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PRIVATE PART OF THE " & |
"PACKAGE - 1"); |
END IF; |
|
IF NOT H THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PRIVATE PART OF THE " & |
"PACKAGE - 1"); |
END IF; |
|
IF NOT CONS_BOOL1 THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PRIVATE PART OF THE " & |
"PACKAGE - 2"); |
END IF; |
|
IF NOT CONS_BOOL2 THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PRIVATE PART OF THE " & |
"PACKAGE - 2"); |
END IF; |
|
X := (1,2,3,4,5); |
|
Y := (1,2,3,4,5); |
|
Z := (5,4,3,2,1); |
|
IF X = Z THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 3"); |
END IF; |
|
IF X /= Y THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 3"); |
END IF; |
|
IF CONS_COMP2 = Z THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 4"); |
END IF; |
|
IF CONS_COMP2 /= Y THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 4"); |
END IF; |
|
L := DER(C1); |
|
M := DER(C1); |
|
N := DER(C2); |
|
IF L = N THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 5"); |
END IF; |
|
IF L /= M THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 5"); |
END IF; |
|
IF CONS_DER2 = N THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED EQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 6"); |
END IF; |
|
IF CONS_DER2 /= M THEN |
FAILED ("IMPROPER RESULT FROM PRE-DEFINED INEQUALITY " & |
"OPERATION WITHIN THE PACKAGE BODY - 6"); |
END IF; |
|
RESULT; |
END P; |
|
USE P; |
|
BEGIN |
NULL; |
END C74407B; |
/c760010.a
0,0 → 1,418
-- C760010.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that explicit calls to Initialize, Adjust and Finalize |
-- procedures that raise exceptions propagate the exception raised, |
-- not Program_Error. Check this for both a user defined exception |
-- and a language defined exception. Check that implicit calls to |
-- initialize procedures that raise an exception propagate the |
-- exception raised, not Program_Error; |
-- |
-- Check that the utilization of a controlled type as the actual for |
-- a generic formal tagged private parameter supports the correct |
-- behavior in the instantiated software. |
-- |
-- TEST DESCRIPTION: |
-- Declares a generic package instantiated to check that controlled |
-- types are not impacted by the "generic boundary." |
-- This instance is then used to perform the tests of various calls to |
-- the procedures. After each operation in the main program that should |
-- cause implicit calls where an exception is raised, the program handles |
-- Program_Error. After each explicit call, the program handles the |
-- Expected_Error. Handlers for the opposite exception are provided to |
-- catch the obvious failure modes. The predefined exception |
-- Tasking_Error is used to be certain that some other reason has not |
-- raised a predefined exception. |
-- |
-- |
-- DATA STRUCTURES |
-- |
-- C760010_1.Simple_Control is derived from |
-- Ada.Finalization.Controlled |
-- |
-- C760010_2.Embedded_Derived is derived from C760010_1.Simple_Control |
-- by way of generic instantiation |
-- |
-- |
-- CHANGE HISTORY: |
-- 01 MAY 95 SAIC Initial version |
-- 23 APR 96 SAIC Fix visibility problem for 2.1 |
-- 14 NOV 96 SAIC Revisit for 2.1 release |
-- 26 JUN 98 EDS Added pragma Elaborate_Body to |
-- package C760010_0.Check_Formal_Tagged |
-- to avoid possible instantiation error |
--! |
|
---------------------------------------------------------------- C760010_0 |
|
package C760010_0 is |
|
User_Defined_Exception : exception; |
|
type Actions is ( No_Action, |
Init_Raise_User_Defined, Init_Raise_Standard, |
Adj_Raise_User_Defined, Adj_Raise_Standard, |
Fin_Raise_User_Defined, Fin_Raise_Standard ); |
|
Action : Actions := No_Action; |
|
function Unique return Natural; |
|
end C760010_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
package body C760010_0 is |
|
Value : Natural := 101; |
|
function Unique return Natural is |
begin |
Value := Value +1; |
return Value; |
end Unique; |
|
end C760010_0; |
|
---------------------------------------------------------------- C760010_0 |
------------------------------------------------------ Check_Formal_Tagged |
|
generic |
|
type Formal_Tagged is tagged private; |
|
package C760010_0.Check_Formal_Tagged is |
|
pragma Elaborate_Body; |
|
type Embedded_Derived is new Formal_Tagged with record |
TC_Meaningless_Value : Natural := Unique; |
end record; |
|
procedure Initialize( ED: in out Embedded_Derived ); |
procedure Adjust ( ED: in out Embedded_Derived ); |
procedure Finalize ( ED: in out Embedded_Derived ); |
|
end C760010_0.Check_Formal_Tagged; |
|
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760010_0.Check_Formal_Tagged is |
|
|
procedure Initialize( ED: in out Embedded_Derived ) is |
begin |
ED.TC_Meaningless_Value := Unique; |
case Action is |
when Init_Raise_User_Defined => raise User_Defined_Exception; |
when Init_Raise_Standard => raise Tasking_Error; |
when others => null; |
end case; |
end Initialize; |
|
procedure Adjust ( ED: in out Embedded_Derived ) is |
begin |
ED.TC_Meaningless_Value := Unique; |
case Action is |
when Adj_Raise_User_Defined => raise User_Defined_Exception; |
when Adj_Raise_Standard => raise Tasking_Error; |
when others => null; |
end case; |
end Adjust; |
|
procedure Finalize ( ED: in out Embedded_Derived ) is |
begin |
ED.TC_Meaningless_Value := Unique; |
case Action is |
when Fin_Raise_User_Defined => raise User_Defined_Exception; |
when Fin_Raise_Standard => raise Tasking_Error; |
when others => null; |
end case; |
end Finalize; |
|
end C760010_0.Check_Formal_Tagged; |
|
---------------------------------------------------------------- C760010_1 |
|
with Ada.Finalization; |
package C760010_1 is |
|
procedure Check_Counters(Init,Adj,Fin : Natural; Message: String); |
procedure Reset_Counters; |
|
type Simple_Control is new Ada.Finalization.Controlled with record |
Item: Integer; |
end record; |
procedure Initialize( AV: in out Simple_Control ); |
procedure Adjust ( AV: in out Simple_Control ); |
procedure Finalize ( AV: in out Simple_Control ); |
|
end C760010_1; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760010_1 is |
|
Initialize_Called : Natural; |
Adjust_Called : Natural; |
Finalize_Called : Natural; |
|
procedure Check_Counters(Init,Adj,Fin : Natural; Message: String) is |
begin |
if Init /= Initialize_Called then |
Report.Failed("Initialize mismatch " & Message); |
end if; |
if Adj /= Adjust_Called then |
Report.Failed("Adjust mismatch " & Message); |
end if; |
if Fin /= Finalize_Called then |
Report.Failed("Finalize mismatch " & Message); |
end if; |
end Check_Counters; |
|
procedure Reset_Counters is |
begin |
Initialize_Called := 0; |
Adjust_Called := 0; |
Finalize_Called := 0; |
end Reset_Counters; |
|
procedure Initialize( AV: in out Simple_Control ) is |
begin |
Initialize_Called := Initialize_Called +1; |
AV.Item := 0; |
end Initialize; |
|
procedure Adjust ( AV: in out Simple_Control ) is |
begin |
Adjust_Called := Adjust_Called +1; |
AV.Item := AV.Item +1; |
end Adjust; |
|
procedure Finalize ( AV: in out Simple_Control ) is |
begin |
Finalize_Called := Finalize_Called +1; |
AV.Item := AV.Item +1; |
end Finalize; |
|
end C760010_1; |
|
---------------------------------------------------------------- C760010_2 |
|
with C760010_0.Check_Formal_Tagged; |
with C760010_1; |
package C760010_2 is |
new C760010_0.Check_Formal_Tagged(C760010_1.Simple_Control); |
|
--------------------------------------------------------------------------- |
|
with Report; |
with C760010_0; |
with C760010_1; |
with C760010_2; |
procedure C760010 is |
|
use type C760010_0.Actions; |
|
procedure Case_Failure(Message: String) is |
begin |
Report.Failed(Message & " for case " |
& C760010_0.Actions'Image(C760010_0.Action) ); |
end Case_Failure; |
|
procedure Check_Implicit_Initialize is |
Item : C760010_2.Embedded_Derived; -- exception here propagates to |
Gadget : C760010_2.Embedded_Derived; -- caller |
begin |
if C760010_0.Action |
in C760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_Standard |
then |
Case_Failure("Anticipated exception at implicit init"); |
end if; |
begin |
Item := Gadget; -- exception here handled locally |
if C760010_0.Action in C760010_0.Adj_Raise_User_Defined |
.. C760010_0.Fin_Raise_Standard then |
Case_Failure ("Anticipated exception at assignment"); |
end if; |
exception |
when Program_Error => |
if C760010_0.Action not in C760010_0.Adj_Raise_User_Defined |
.. C760010_0.Fin_Raise_Standard then |
Report.Failed("Program_Error in Check_Implicit_Initialize"); |
end if; |
when Tasking_Error => |
Report.Failed("Tasking_Error in Check_Implicit_Initialize"); |
when C760010_0.User_Defined_Exception => |
Report.Failed("User_Error in Check_Implicit_Initialize"); |
when others => |
Report.Failed("Wrong exception Check_Implicit_Initialize"); |
end; |
end Check_Implicit_Initialize; |
|
--------------------------------------------------------------------------- |
|
Global_Item : C760010_2.Embedded_Derived; |
|
--------------------------------------------------------------------------- |
|
procedure Check_Explicit_Initialize is |
begin |
begin |
C760010_2.Initialize( Global_Item ); |
if C760010_0.Action |
in C760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_Standard |
then |
Case_Failure("Anticipated exception at explicit init"); |
end if; |
exception |
when Program_Error => |
Report.Failed("Program_Error in Check_Explicit_Initialize"); |
when Tasking_Error => |
if C760010_0.Action /= C760010_0.Init_Raise_Standard then |
Report.Failed("Tasking_Error in Check_Explicit_Initialize"); |
end if; |
when C760010_0.User_Defined_Exception => |
if C760010_0.Action /= C760010_0.Init_Raise_User_Defined then |
Report.Failed("User_Error in Check_Explicit_Initialize"); |
end if; |
when others => |
Report.Failed("Wrong exception in Check_Explicit_Initialize"); |
end; |
end Check_Explicit_Initialize; |
|
--------------------------------------------------------------------------- |
|
procedure Check_Explicit_Adjust is |
begin |
begin |
C760010_2.Adjust( Global_Item ); |
if C760010_0.Action |
in C760010_0.Adj_Raise_User_Defined..C760010_0.Adj_Raise_Standard |
then |
Case_Failure("Anticipated exception at explicit Adjust"); |
end if; |
exception |
when Program_Error => |
Report.Failed("Program_Error in Check_Explicit_Adjust"); |
when Tasking_Error => |
if C760010_0.Action /= C760010_0.Adj_Raise_Standard then |
Report.Failed("Tasking_Error in Check_Explicit_Adjust"); |
end if; |
when C760010_0.User_Defined_Exception => |
if C760010_0.Action /= C760010_0.Adj_Raise_User_Defined then |
Report.Failed("User_Error in Check_Explicit_Adjust"); |
end if; |
when others => |
Report.Failed("Wrong exception in Check_Explicit_Adjust"); |
end; |
end Check_Explicit_Adjust; |
|
--------------------------------------------------------------------------- |
|
procedure Check_Explicit_Finalize is |
begin |
begin |
C760010_2.Finalize( Global_Item ); |
if C760010_0.Action |
in C760010_0.Fin_Raise_User_Defined..C760010_0.Fin_Raise_Standard |
then |
Case_Failure("Anticipated exception at explicit Finalize"); |
end if; |
exception |
when Program_Error => |
Report.Failed("Program_Error in Check_Explicit_Finalize"); |
when Tasking_Error => |
if C760010_0.Action /= C760010_0.Fin_Raise_Standard then |
Report.Failed("Tasking_Error in Check_Explicit_Finalize"); |
end if; |
when C760010_0.User_Defined_Exception => |
if C760010_0.Action /= C760010_0.Fin_Raise_User_Defined then |
Report.Failed("User_Error in Check_Explicit_Finalize"); |
end if; |
when others => |
Report.Failed("Wrong exception in Check_Explicit_Finalize"); |
end; |
end Check_Explicit_Finalize; |
|
--------------------------------------------------------------------------- |
|
begin -- Main test procedure. |
|
Report.Test ("C760010", "Check that explicit calls to finalization " & |
"procedures that raise exceptions propagate " & |
"the exception raised. Check the utilization " & |
"of a controlled type as the actual for a " & |
"generic formal tagged private parameter" ); |
|
for Act in C760010_0.Actions loop |
C760010_1.Reset_Counters; |
C760010_0.Action := Act; |
|
begin |
Check_Implicit_Initialize; |
if Act in |
C760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_Standard then |
Case_Failure("No exception at Check_Implicit_Initialize"); |
end if; |
exception |
when Tasking_Error => |
if Act /= C760010_0.Init_Raise_Standard then |
Case_Failure("Tasking_Error at Check_Implicit_Initialize"); |
end if; |
when C760010_0.User_Defined_Exception => |
if Act /= C760010_0.Init_Raise_User_Defined then |
Case_Failure("User_Error at Check_Implicit_Initialize"); |
end if; |
when Program_Error => |
-- If finalize raises an exception, all other object are finalized |
-- first and Program_Error is raised upon leaving the master scope. |
-- 7.6.1:14 |
if Act not in C760010_0.Fin_Raise_User_Defined.. |
C760010_0.Fin_Raise_Standard then |
Case_Failure("Program_Error at Check_Implicit_Initialize"); |
end if; |
when others => |
Case_Failure("Wrong exception at Check_Implicit_Initialize"); |
end; |
|
Check_Explicit_Initialize; |
Check_Explicit_Adjust; |
Check_Explicit_Finalize; |
|
C760010_1.Check_Counters(0,0,0, C760010_0.Actions'Image(Act)); |
|
end loop; |
|
-- Set to No_Action to avoid exception in finalizing Global_Item |
C760010_0.Action := C760010_0.No_Action; |
|
Report.Result; |
|
end C760010; |
/c761001.a
0,0 → 1,117
-- C761001.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that controlled objects declared immediately within a library |
-- package are finalized following the completion of the environment |
-- task (and prior to termination of the program). |
-- |
-- TEST DESCRIPTION: |
-- This test derives a type from Ada.Finalization.Controlled, and |
-- declares an object of that type in the body of a library package. |
-- The dispatching procedure Finalize is redefined for the derived |
-- type to perform a check that it has been called only once, and in |
-- turn calls Report.Result. This test may fail by not calling |
-- Report.Result. This test may also fail by calling Report.Result |
-- twice, the first call will report a false pass. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 13 Nov 95 SAIC Updated for ACVC 2.0.1 |
-- |
--! |
|
with Ada.Finalization; |
package C761001_0 is |
|
type Global is new Ada.Finalization.Controlled with null record; |
procedure Finalize( It: in out Global ); |
|
end C761001_0; |
|
package C761001_1 is |
|
task Library_Task is |
entry Never_Called; |
end Library_Task; |
|
end C761001_1; |
|
with Report; |
with C761001_1; |
package body C761001_0 is |
|
My_Object : Global; |
|
Done : Boolean := False; |
|
procedure Finalize( It: in out Global ) is |
begin |
if not C761001_1.Library_Task'Terminated then |
Report.Failed("Library task not terminated before finalize"); |
end if; |
if Done then -- checking included "just in case" |
Report.Comment("Test FAILED, even if previously reporting passed"); |
Report.Failed("Unwarranted multiple call to finalize"); |
end if; |
Report.Result; |
Done := True; |
end Finalize; |
|
end C761001_0; |
|
with Report; |
package body C761001_1 is |
|
task body Library_Task is |
begin |
if Report.Ident_Int( 1 ) /= 1 then |
Report.Failed( "Baseline failure in Library_Task"); |
end if; |
end Library_Task; |
|
end C761001_1; |
|
with Report; |
with C761001_0; |
|
procedure C761001 is |
|
begin -- Main test procedure. |
|
Report.Test ("C761001", "Check that controlled objects declared " |
& "immediately within a library package are " |
& "finalized following the completion of the " |
& "environment task (and prior to termination " |
& "of the program)"); |
|
-- note that if the test DOES call report twice, the first will report a |
-- false pass, the second call will correctly fail the test. |
|
-- not calling Report.Result; |
-- Result is called as part of the finalization of C761001_0.My_Object. |
|
end C761001; |
/c760011.a
0,0 → 1,291
-- C760011.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that the anonymous objects of a controlled type associated with |
-- function results and aggregates are finalized no later than the |
-- end of the innermost enclosing declarative_item or statement. Also |
-- check this for function calls and aggregates of a noncontrolled type |
-- with controlled components. |
-- |
-- TEST DESCRIPTION: |
-- This test defines a controlled type with a discriminant, the |
-- discriminant is use as an index into a global table to indicate that |
-- the object has been finalized. The controlled type is used as the |
-- component of a non-controlled type, and the non-controlled type is |
-- used for the same set of tests. Following is a table of the tests |
-- performed and their associated tag character. |
-- |
-- 7.6(21) allows for the optimizations that remove these temporary |
-- objects from ever existing. As such this test checks that in the |
-- case the object was initialized (the only access we have to |
-- determining if it ever existed) it must subsequently be finalized. |
-- |
-- CASE TABLE: |
-- A - aggregate test, controlled |
-- B - aggregate test, controlled |
-- C - aggregate test, non_controlled |
-- D - function test, controlled |
-- E - function test, non_controlled |
-- F - formal parameter function test, controlled |
-- G - formal parameter aggregate test, controlled |
-- H - formal parameter function test, non_controlled |
-- I - formal parameter aggregate test, non_controlled |
-- |
-- X - scratch object, not consequential to the objective |
-- Y - scratch object, not consequential to the objective |
-- Z - scratch object, not consequential to the objective |
-- |
-- |
-- CHANGE HISTORY: |
-- 22 MAY 95 SAIC Initial version |
-- 24 APR 96 SAIC Minor doc fixes, visibility patch |
-- 14 NOV 96 SAIC Revised for release 2.1 |
-- |
--! |
|
------------------------------------------------------------------- C760011_0 |
|
with Ada.Finalization; |
package C760011_0 is |
type Tracking_Array is array(Character range 'A'..'Z') of Boolean; |
|
Initialized : Tracking_Array := (others => False); |
Finalized : Tracking_Array := (others => False); |
|
type Controlled_Type(Tag : Character) is |
new Ada.Finalization.Controlled with record |
TC_Component : String(1..4) := "ACVC"; |
end record; |
procedure Initialize( It: in out Controlled_Type ); |
procedure Finalize ( It: in out Controlled_Type ); |
function Create(With_Tag: Character) return Controlled_Type; |
|
type Non_Controlled(Tag : Character := 'Y') is record |
Controlled_Component : Controlled_Type(Tag); |
end record; |
procedure Initialize( It: in out Non_Controlled ); |
procedure Finalize ( It: in out Non_Controlled ); |
function Create(With_Tag: Character) return Non_Controlled; |
|
Under_Debug : constant Boolean := False; -- construction lines |
|
end C760011_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
package body C760011_0 is |
|
procedure Initialize( It: in out Controlled_Type ) is |
begin |
It.TC_Component := (others => It.Tag); |
if It.Tag in Tracking_Array'Range then |
Initialized(It.Tag) := True; |
end if; |
if Under_Debug then |
Report.Comment("Initializing Tag: " & It.Tag ); |
end if; |
end Initialize; |
|
procedure Finalize( It: in out Controlled_Type ) is |
begin |
if Under_Debug then |
Report.Comment("Finalizing for Tag: " & It.Tag ); |
end if; |
if It.Tag in Finalized'Range then |
Finalized(It.Tag) := True; |
end if; |
end Finalize; |
|
function Create(With_Tag: Character) return Controlled_Type is |
begin |
return Controlled_Type'(Ada.Finalization.Controlled |
with Tag => With_Tag, |
TC_Component => "*CON" ); |
end Create; |
|
procedure Initialize( It: in out Non_Controlled ) is |
begin |
Report.Failed("Called Initialize for Non_Controlled"); |
end Initialize; |
|
procedure Finalize( It: in out Non_Controlled ) is |
begin |
Report.Failed("Called Finalize for Non_Controlled"); |
end Finalize; |
|
function Create(With_Tag: Character) return Non_Controlled is |
begin |
return Non_Controlled'(Tag => With_Tag, Controlled_Component => ( |
Ada.Finalization.Controlled |
with Tag => With_Tag, |
TC_Component => "#NON" ) ); |
end Create; |
|
end C760011_0; |
|
--------------------------------------------------------------------- C760011 |
|
with Report; |
with TCTouch; |
with C760011_0; |
with Ada.Finalization; -- needed to be able to create extension aggregates |
procedure C760011 is |
|
use type C760011_0.Controlled_Type; |
use type C760011_0.Controlled_Type'Class; |
use type C760011_0.Non_Controlled; |
|
subtype AFC is Ada.Finalization.Controlled; |
|
procedure Check_Result( Tag : Character; Message : String ) is |
-- make allowance for 7.6(21) optimizations |
begin |
if C760011_0.Initialized(Tag) then |
TCTouch.Assert(C760011_0.Finalized(Tag),Message); |
elsif C760011_0.Under_Debug then |
Report.Comment("Optimized away: " & Tag ); |
end if; |
end Check_Result; |
|
procedure Subtest_1 is |
|
|
procedure Subtest_1_Local_1 is |
An_Object : C760011_0.Controlled_Type'Class |
:= C760011_0.Controlled_Type'(AFC with 'X', "ONE*"); |
-- initialize An_Object |
begin |
if C760011_0.Controlled_Type(An_Object) |
= C760011_0.Controlled_Type'(AFC with 'A', "ONE*") then |
Report.Failed("Comparison bad"); -- A = X !!! |
end if; |
end Subtest_1_Local_1; |
-- An_Object must be Finalized by this point. |
|
procedure Subtest_1_Local_2 is |
An_Object : C760011_0.Controlled_Type('B'); |
begin |
An_Object := (AFC with 'B', "TWO!" ); |
if Report.Ident_Char(An_Object.Tag) /= 'B' then |
Report.Failed("Subtest_1_Local_2 Optimization Foil: Bad Data!"); |
end if; |
exception |
when others => Report.Failed("Bad controlled assignment"); |
end Subtest_1_Local_2; |
-- An_Object must be Finalized by this point. |
|
procedure Subtest_1_Local_3 is |
An_Object : C760011_0.Non_Controlled('C'); |
begin |
TCTouch.Assert_Not(C760011_0.Finalized('C'), |
"Non_Controlled declaration C"); |
An_Object := C760011_0.Non_Controlled'('C', Controlled_Component |
=> (AFC with 'C', "TEE!")); |
if Report.Ident_Char(An_Object.Tag) /= 'C' then |
Report.Failed("Subtest_1_Local_3 Optimization Foil: Bad Data!"); |
end if; |
end Subtest_1_Local_3; |
-- Only controlled components of An_Object must be finalized; it is an |
-- error to call Finalize for An_Object |
|
begin |
Subtest_1_Local_1; |
Check_Result( 'A', "Aggregate in subprogram 1" ); |
|
Subtest_1_Local_2; |
Check_Result( 'B', "Aggregate in subprogram 2" ); |
|
Subtest_1_Local_3; |
Check_Result( 'C', "Embedded aggregate in subprogram 3" ); |
end Subtest_1; |
|
|
procedure Subtest_2 is |
-- using 'Z' for both evades order issues |
Con_Object : C760011_0.Controlled_Type('Z'); |
Non_Object : C760011_0.Non_Controlled('Z'); |
begin |
if Report.Ident_Bool( Con_Object = C760011_0.Create('D') ) then |
Report.Failed("Con_Object catastrophe"); |
end if; |
-- Controlled function result should be finalized by now |
Check_Result( 'D', "Function Result" ); |
|
if Report.Ident_Bool( Non_Object = C760011_0.Create('E') ) then |
Report.Failed("Non_Object catastrophe"); |
end if; |
-- Controlled component of function result should be finalized by now |
Check_Result( 'E', "Function Result" ); |
end Subtest_2; |
|
|
procedure Subtest_3(Con : in C760011_0.Controlled_Type) is |
begin |
if Con.Tag not in 'F'..'G' then |
Report.Failed("Bad value passed to subtest 3 " & Con.Tag & ' ' |
& Report.Ident_Str(Con.TC_Component)); |
end if; |
end Subtest_3; |
|
|
procedure Subtest_4(Non : in C760011_0.Non_Controlled) is |
begin |
if Non.Tag not in 'H'..'I' then |
Report.Failed("Bad value passed to subtest 4 " |
& Non.Tag & ' ' |
& Report.Ident_Str(Non.Controlled_Component.TC_Component)); |
end if; |
end Subtest_4; |
|
|
begin -- Main test procedure. |
|
Report.Test ("C760011", "Check that anonymous objects of controlled " & |
"types or types containing controlled types " & |
"are finalized no later than the end of the " & |
"innermost enclosing declarative_item or " & |
"statement" ); |
|
Subtest_1; |
|
Subtest_2; |
|
Subtest_3(C760011_0.Create('F')); |
Check_Result( 'F', "Function as formal F" ); |
|
Subtest_3(C760011_0.Controlled_Type'(AFC with 'G',"GIGI")); |
Check_Result( 'G', "Aggregate as formal G" ); |
|
Subtest_4(C760011_0.Create('H')); |
Check_Result( 'H', "Function as formal H" ); |
|
Subtest_4(C760011_0.Non_Controlled'('I', (AFC with 'I',"IAGO"))); |
Check_Result( 'I', "Aggregate as formal I" ); |
|
Report.Result; |
|
end C760011; |
/c74409b.ada
0,0 → 1,93
-- C74409B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT IF A COMPOSITE TYPE IS DECLARED IN THE SAME PACKAGE |
-- AS A LIMITED PRIVATE TYPE AND HAS A COMPONENT OF THAT TYPE, |
-- THE COMPOSITE TYPE IS TREATED AS A LIMITED TYPE UNTIL THE |
-- EARLIEST PLACE WITHIN THE IMMEDIATE SCOPE OF THE DECLARATION |
-- OF THE COMPOSITE TYPE AND AFTER THE FULL DECLARATION OF THE |
-- LIMITED PRIVATE TYPE |
|
-- DSJ 5/5/83 |
-- JBG 9/23/83 |
|
WITH REPORT; |
PROCEDURE C74409B IS |
|
USE REPORT; |
|
BEGIN |
|
TEST("C74409B", "CHECK THAT A COMPOSITE TYPE WITH A LIMITED " & |
"PRIVATE COMPONENT IS TREATED AS A LIMITED " & |
"TYPE UNTIL ASSIGNMENT AND EQUALITY ARE BOTH " & |
"AVAILABLE FOR THE COMPOSITE TYPE"); |
|
DECLARE |
|
PACKAGE P IS |
TYPE LP IS LIMITED PRIVATE; |
PACKAGE Q IS |
TYPE LP_ARRAY IS ARRAY (1 .. 2) OF LP; |
END Q; |
PRIVATE |
TYPE LP IS NEW INTEGER; |
END P; |
|
PACKAGE BODY P IS |
USE Q; |
FUNCTION "=" (L,R : LP_ARRAY) RETURN BOOLEAN IS -- LEGAL |
BEGIN |
RETURN TRUE; |
END; |
|
GENERIC |
TYPE T IS PRIVATE; -- NOTE: NOT LIMITED PRIVATE |
C, D : T; |
PACKAGE A IS |
-- IRRELEVANT DETAILS |
END A; |
|
PACKAGE BODY A IS |
BEGIN |
IF C = D THEN |
FAILED ("USED WRONG EQUALITY OPERATOR"); |
END IF; |
END A; |
|
PACKAGE BODY Q IS |
PACKAGE ANOTHER_NEW_A IS |
NEW A (LP_ARRAY, (2,3), (4,5)); -- LEGAL |
END Q; |
END P; |
|
BEGIN |
|
NULL; |
|
END; |
|
RESULT; |
|
END C74409B; |
/c761002.a
0,0 → 1,245
-- C761002.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that objects of a controlled type that are created |
-- by an allocator are finalized at the appropriate time. In |
-- particular, check that such objects are not finalized due to |
-- completion of the master in which they were allocated if the |
-- corresponding access type is declared outside of that master. |
-- |
-- Check that Unchecked_Deallocation of a controlled |
-- object causes finalization of that object. |
-- |
-- TEST DESCRIPTION: |
-- This test derives a type from Ada.Finalization.Controlled, and |
-- declares access types to that type in various scope scenarios. |
-- The dispatching procedure Finalize is redefined for the derived |
-- type to perform a check that it has been called at the |
-- correct time. This is accomplished using a global variable |
-- which indicates what state the software is currently |
-- executing. The test utilizes the TCTouch facilities to |
-- verify that Finalize is called the correct number of times, at |
-- the correct times. Several calls are made to validate passing |
-- the null string to check that Finalize has NOT been called at |
-- that point. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- |
--! |
|
with Ada.Finalization; |
package C761002_0 is |
type Global is new Ada.Finalization.Controlled with null record; |
procedure Finalize( It: in out Global ); |
|
type Second is new Ada.Finalization.Limited_Controlled with null record; |
procedure Finalize( It: in out Second ); |
end C761002_0; |
|
with Report; |
with TCTouch; |
package body C761002_0 is |
|
procedure Finalize( It: in out Global ) is |
begin |
TCTouch.Touch('F'); ------------------------------------------------- F |
end Finalize; |
|
procedure Finalize( It: in out Second ) is |
begin |
TCTouch.Touch('S'); ------------------------------------------------- S |
end Finalize; |
end C761002_0; |
|
with Report; |
with TCTouch; |
with C761002_0; |
with Unchecked_Deallocation; |
procedure C761002 is |
|
-- check the straightforward case |
procedure Subtest_1 is |
type Access_1 is access C761002_0.Global; |
V1 : Access_1; |
procedure Allocate is |
V2 : Access_1; |
begin |
V2 := new C761002_0.Global; |
V1 := V2; -- "dead" assignment must not be optimized away due to |
-- finalization "side effects", many more of these follow |
end Allocate; |
begin |
Allocate; |
-- no calls to Finalize should have occurred at this point |
TCTouch.Validate("","Allocated nested, retained"); |
end Subtest_1; |
|
-- check Unchecked_Deallocation |
procedure Subtest_2 is |
type Access_2 is access C761002_0.Global; |
procedure Free is |
new Unchecked_Deallocation(C761002_0.Global, Access_2); |
V1 : Access_2; |
V2 : Access_2; |
|
procedure Allocate is |
begin |
V1 := new C761002_0.Global; |
V2 := new C761002_0.Global; |
end Allocate; |
|
begin |
Allocate; |
-- no calls to Finalize should have occurred at this point. |
TCTouch.Validate("","Allocated nested, non-local"); |
|
Free(V1); -- instance of Unchecked_Deallocation |
-- should cause the finalization of V1.all |
TCTouch.Validate("F","Unchecked Deallocation"); |
end Subtest_2; -- leaving this scope should cause the finalization of V2.all |
|
-- check various master-exit scenarios |
-- the "Fake" parameters are used to avoid unwanted optimizations |
procedure Subtest_3 is |
procedure With_Local_Block is |
type Access_3 is access C761002_0.Global; |
V1 : Access_3; |
begin |
declare |
V2 : Access_3 := new C761002_0.Global; |
begin |
V1 := V2; |
end; |
TCTouch.Validate("","Local Block, normal exit"); |
-- the allocated object should be finalized on leaving this scope |
end With_Local_Block; |
|
procedure With_Local_Block_Return(Fake: Integer) is |
type Access_4 is access C761002_0.Global; |
V1 : Access_4 := new C761002_0.Global; |
begin |
if Fake = 0 then |
declare |
V2 : Access_4; |
begin |
V2 := new C761002_0.Global; |
return; -- the two allocated objects should be finalized |
end; -- upon leaving this scope |
else |
V1 := null; |
end if; |
end With_Local_Block_Return; |
|
procedure With_Goto(Fake: Integer) is |
type Access_5 is access C761002_0.Global; |
V1 : Access_5 := new C761002_0.Global; |
V2 : Access_5; |
V3 : Access_5; |
begin |
if Fake = 0 then |
declare |
type Access_6 is access C761002_0.Second; |
V6 : Access_6; |
begin |
V6 := new C761002_0.Second; |
goto check; |
end; |
else |
V2 := V1; |
end if; |
V3 := V2; |
<<check>> |
TCTouch.Validate("S","goto past master end"); |
end With_Goto; |
|
begin |
With_Local_Block; |
TCTouch.Validate("F","Local Block, normal exit, after master"); |
|
With_Local_Block_Return( Report.Ident_Int(0) ); |
TCTouch.Validate("FF","Local Block, return from block"); |
|
With_Goto( Report.Ident_Int(0) ); |
TCTouch.Validate("F","With Goto"); |
|
end Subtest_3; |
|
procedure Subtest_4 is |
|
Oops : exception; |
|
procedure Alley( Fake: Integer ) is |
type Access_1 is access C761002_0.Global; |
V1 : Access_1; |
begin |
V1 := new C761002_0.Global; |
if Fake = 1 then |
raise Oops; |
end if; |
V1 := null; |
end Alley; |
|
begin |
Catch: begin |
Alley( Report.Ident_Int(1) ); |
exception |
when Oops => TCTouch.Validate("F","leaving via exception"); |
when others => Report.Failed("Wrong exception"); |
end Catch; |
end Subtest_4; |
|
begin -- Main test procedure. |
|
Report.Test ("C761002", "Check that objects of a controlled type created " |
& "by an allocator are finalized appropriately. " |
& "Check that Unchecked_Deallocation of a " |
& "controlled object causes finalization " |
& "of that object" ); |
|
Subtest_1; |
-- leaving the scope of the access type should finalize the |
-- collection |
TCTouch.Validate("F","Allocated nested, Subtest 1"); |
|
Subtest_2; |
-- Unchecked_Deallocation already finalized one of the two |
-- objects allocated, the other should be the only one finalized |
-- at leaving the scope of the access type. |
TCTouch.Validate("F","Allocated non-local"); |
|
Subtest_3; |
-- there should be no remaining finalizations from this subtest |
TCTouch.Validate("","Localized objects"); |
|
Subtest_4; |
-- there should be no remaining finalizations from this subtest |
TCTouch.Validate("","Exception testing"); |
|
Report.Result; |
|
end C761002; |
/c760012.a
0,0 → 1,256
-- C760012.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that record components that have per-object access discriminant |
-- constraints are initialized in the order of their component |
-- declarations, and after any components that are not so constrained. |
-- |
-- Check that record components that have per-object access discriminant |
-- constraints are finalized in the reverse order of their component |
-- declarations, and before any components that are not so constrained. |
-- |
-- TEST DESCRIPTION: |
-- The type List_Item is the "container" type. It holds two fields that |
-- have per-object access discriminant constraints, and two fields that |
-- are not discriminated. These four fields are all controlled types. |
-- A fifth field is a pointer used to maintain a linked list of these |
-- data objects. Each component is of a unique type which allows for |
-- the test to simply track the order of initialization and finalization. |
-- |
-- The types and their purpose are: |
-- Constrained_First - a controlled discriminated type |
-- Constrained_Second - a controlled discriminated type |
-- Simple_First - a controlled type with no discriminant |
-- Simple_Second - a controlled type with no discriminant |
-- |
-- The required order of operations: |
-- Initialize |
-- ( Simple_First | Simple_Second ) -- no "internal order" required |
-- Constrained_First |
-- Constrained_Second |
-- Finalize |
-- Constrained_Second |
-- Constrained_First |
-- ( Simple_First | Simple_Second ) -- must be inverse of init. |
-- |
-- |
-- CHANGE HISTORY: |
-- 23 MAY 95 SAIC Initial version |
-- 02 MAY 96 SAIC Reorganized for 2.1 |
-- 05 DEC 96 SAIC Simplified for 2.1; added init/fin ordering check |
-- 31 DEC 97 EDS Remove references to and uses of |
-- Initialization_Sequence |
--! |
|
---------------------------------------------------------------- C760012_0 |
|
with Ada.Finalization; |
with Ada.Unchecked_Deallocation; |
package C760012_0 is |
|
type List_Item; |
|
type List is access all List_Item; |
|
package Firsts is -- distinguish first from second |
type Constrained_First(Container : access List_Item) is |
new Ada.Finalization.Limited_Controlled with null record; |
procedure Initialize( T : in out Constrained_First ); |
procedure Finalize ( T : in out Constrained_First ); |
|
type Simple_First is new Ada.Finalization.Controlled with |
record |
My_Init_Seq_Number : Natural; |
end record; |
procedure Initialize( T : in out Simple_First ); |
procedure Finalize ( T : in out Simple_First ); |
|
end Firsts; |
|
type Constrained_Second(Container : access List_Item) is |
new Ada.Finalization.Limited_Controlled with null record; |
procedure Initialize( T : in out Constrained_Second ); |
procedure Finalize ( T : in out Constrained_Second ); |
|
type Simple_Second is new Ada.Finalization.Controlled with |
record |
My_Init_Seq_Number : Natural; |
end record; |
procedure Initialize( T : in out Simple_Second ); |
procedure Finalize ( T : in out Simple_Second ); |
|
-- by 3.8(18);6.0 the following type contains components constrained |
-- by per-object expressions |
|
|
type List_Item is new Ada.Finalization.Limited_Controlled |
with record |
ContentA : Firsts.Constrained_First( List_Item'Access ); -- C S |
SimpleA : Firsts.Simple_First; -- A T |
SimpleB : Simple_Second; -- A T |
ContentB : Constrained_Second( List_Item'Access ); -- D R |
Next : List; -- | | |
end record; -- | | |
procedure Initialize( L : in out List_Item ); ------------------+ | |
procedure Finalize ( L : in out List_Item ); --------------------+ |
|
-- the tags are the same for SimpleA and SimpleB due to the fact that |
-- the language does not specify an ordering with respect to this |
-- component pair. 7.6(12) does specify the rest of the ordering. |
|
procedure Deallocate is new Ada.Unchecked_Deallocation(List_Item,List); |
|
end C760012_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with TCTouch; |
package body C760012_0 is |
|
package body Firsts is |
|
procedure Initialize( T : in out Constrained_First ) is |
begin |
TCTouch.Touch('C'); ----------------------------------------------- C |
end Initialize; |
|
procedure Finalize ( T : in out Constrained_First ) is |
begin |
TCTouch.Touch('S'); ----------------------------------------------- S |
end Finalize; |
|
procedure Initialize( T : in out Simple_First ) is |
begin |
T.My_Init_Seq_Number := 0; |
TCTouch.Touch('A'); ----------------------------------------------- A |
end Initialize; |
|
procedure Finalize ( T : in out Simple_First ) is |
begin |
TCTouch.Touch('T'); ----------------------------------------------- T |
end Finalize; |
|
end Firsts; |
|
procedure Initialize( T : in out Constrained_Second ) is |
begin |
TCTouch.Touch('D'); ------------------------------------------------- D |
end Initialize; |
|
procedure Finalize ( T : in out Constrained_Second ) is |
begin |
TCTouch.Touch('R'); ------------------------------------------------- R |
end Finalize; |
|
|
procedure Initialize( T : in out Simple_Second ) is |
begin |
T.My_Init_Seq_Number := 0; |
TCTouch.Touch('A'); ------------------------------------------------- A |
end Initialize; |
|
procedure Finalize ( T : in out Simple_Second ) is |
begin |
TCTouch.Touch('T'); ------------------------------------------------- T |
end Finalize; |
|
procedure Initialize( L : in out List_Item ) is |
begin |
TCTouch.Touch('F'); ------------------------------------------------- F |
end Initialize; |
|
procedure Finalize ( L : in out List_Item ) is |
begin |
TCTouch.Touch('Q'); ------------------------------------------------- Q |
end Finalize; |
|
end C760012_0; |
|
--------------------------------------------------------------------- C760012 |
|
with Report; |
with TCTouch; |
with C760012_0; |
procedure C760012 is |
|
use type C760012_0.List; |
|
procedure Subtest_1 is |
-- by 3.8(18);6.0 One_Of_Them is constrained by per-object constraints |
-- 7.6.1(9);6.0 dictates the order of finalization of the components |
|
One_Of_Them : C760012_0.List_Item; |
begin |
if One_Of_Them.Next /= null then -- just to hold the subtest in place |
Report.Failed("No default value for Next"); |
end if; |
end Subtest_1; |
|
List : C760012_0.List; |
|
procedure Subtest_2 is |
begin |
|
List := new C760012_0.List_Item; |
|
List.Next := new C760012_0.List_Item; |
|
end Subtest_2; |
|
procedure Subtest_3 is |
begin |
|
C760012_0.Deallocate( List.Next ); |
|
C760012_0.Deallocate( List ); |
|
end Subtest_3; |
|
begin -- Main test procedure. |
|
Report.Test ("C760012", "Check that record components that have " & |
"per-object access discriminant constraints " & |
"are initialized in the order of their " & |
"component declarations, and after any " & |
"components that are not so constrained. " & |
"Check that record components that have " & |
"per-object access discriminant constraints " & |
"are finalized in the reverse order of their " & |
"component declarations, and before any " & |
"components that are not so constrained" ); |
|
Subtest_1; |
TCTouch.Validate("AACDFQRSTT", "One object"); |
|
Subtest_2; |
TCTouch.Validate("AACDFAACDF", "Two objects dynamically allocated"); |
|
Subtest_3; |
TCTouch.Validate("QRSTTQRSTT", "Two objects deallocated"); |
|
Report.Result; |
|
end C760012; |
/c74401k.ada
0,0 → 1,136
-- C74401K.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT OUT PARAMETERS OF AN ENTRY DECLARATION CAN HAVE A LIMITED |
-- PRIVATE TYPE IF THE ENTRY DECLARATION OCCURS IN THE VISIBLE PART OF A |
-- PACKAGE SPECIFICATION, INCLUDING WITHIN PACKAGES NESTED IN A VISIBLE |
-- PART. |
|
-- CHECK THAT A RENAMING DECLARATION CAN RENAME AN ENTRY DECLARED |
-- WITH AN OUT PARAMETER. |
|
-- JBG 5/1/85 |
|
WITH REPORT; USE REPORT; |
PROCEDURE C74401K IS |
|
PACKAGE PKG IS |
TYPE LP IS LIMITED PRIVATE; |
TASK P20 IS |
ENTRY TP20 (X : OUT LP); -- OK. |
ENTRY RESET (X : OUT LP); |
END P20; |
FUNCTION EQ (L, R : LP) RETURN BOOLEAN; |
VAL1 : CONSTANT LP; |
|
PACKAGE NESTED IS |
TASK NEST1 IS |
ENTRY TNEST1 (X : OUT LP); |
END NEST1; |
PRIVATE |
TASK NEST2 IS |
ENTRY TNEST2 (X : OUT LP); |
END NEST2; |
END NESTED; |
PRIVATE |
TYPE LP IS NEW INTEGER; |
VAL1 : CONSTANT LP := LP(IDENT_INT(3)); |
END PKG; |
|
VAR : PKG.LP; |
|
PACKAGE BODY PKG IS |
TASK BODY P20 IS |
BEGIN |
LOOP |
SELECT |
ACCEPT TP20 (X : OUT LP) DO |
X := 3; |
END TP20; |
OR |
ACCEPT RESET (X : OUT LP) DO |
X := 0; |
END RESET; |
OR |
TERMINATE; |
END SELECT; |
END LOOP; |
END P20; |
|
FUNCTION EQ (L, R : LP) RETURN BOOLEAN IS |
BEGIN |
RETURN L = R; |
END EQ; |
|
PACKAGE BODY NESTED IS |
TASK BODY NEST1 IS |
BEGIN |
ACCEPT TNEST1 (X : OUT LP) DO |
X := 3; |
END TNEST1; |
END NEST1; |
|
TASK BODY NEST2 IS |
BEGIN |
NULL; |
END NEST2; |
END NESTED; |
BEGIN |
VAR := LP(IDENT_INT(0)); |
END PKG; |
|
PACKAGE PKG1 IS |
PROCEDURE P21 (X : OUT PKG.LP) RENAMES PKG.P20.TP20; -- OK: |
-- RENAMING. |
END PKG1; |
|
BEGIN |
|
TEST ("C74401K", "CHECK THAT A PROCEDURE CAN HAVE AN OUT " & |
"PARAMETER WITH A LIMITED PRIVATE TYPE"); |
|
PKG.P20.RESET (VAR); |
PKG.P20.TP20 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("DIRECT CALL NOT CORRECT"); |
END IF; |
|
PKG.P20.RESET (VAR); |
PKG1.P21 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("RENAMED CALL NOT CORRECT"); |
END IF; |
|
PKG.P20.RESET (VAR); |
PKG.NESTED.NEST1.TNEST1 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("NESTED CALL NOT CORRECT"); |
END IF; |
|
RESULT; |
|
END C74401K; |
/c761003.a
0,0 → 1,447
-- C761003.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that an object of a controlled type is finalized when the |
-- enclosing master is complete. |
-- Check this for controlled types where the derived type has a |
-- discriminant. |
-- Check this for subprograms of abstract types derived from the |
-- types in Ada.Finalization. |
-- |
-- Check that finalization of controlled objects is |
-- performed in the correct order. In particular, check that if |
-- multiple objects of controlled types are declared immediately |
-- within the same declarative part then type are finalized in the |
-- reverse order of their creation. |
-- |
-- TEST DESCRIPTION: |
-- This test checks these conditions for subprograms and |
-- block statements; both variables and constants of controlled |
-- types; cases of a controlled component of a record type, as |
-- well as an array with controlled components. |
-- |
-- The base controlled types used for the test are defined |
-- with a character discriminant. The initialize procedure for |
-- the types will record the order of creation in a globally |
-- accessible array, the finalize procedure for the types will call |
-- TCTouch with that tag character. The test can then check that |
-- the order of finalization is indeed the reverse of the order of |
-- creation (assuming that the implementation calls Initialize in |
-- the order that the objects are created). |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 02 Nov 95 SAIC ACVC 2.0.1 |
-- |
--! |
|
------------------------------------------------------------ C761003_Support |
|
package C761003_Support is |
|
function Pick_Char return Character; |
-- successive calls to Pick_Char return distinct characters which may |
-- be assigned to objects to track an order sequence. These characters |
-- are then used in calls to TCTouch.Touch. |
|
procedure Validate(Initcount : Natural; |
Testnumber : Natural; |
Check_Order : Boolean := True); |
-- does a little extra processing prior to calling TCTouch.Validate, |
-- specifically, it reverses the stored string of characters, and checks |
-- for a correct count. |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
|
end C761003_Support; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with Report; |
with TCTouch; |
package body C761003_Support is |
type Pick_Rotation is mod 52; |
type Pick_String is array(Pick_Rotation) of Character; |
|
From : constant Pick_String := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
& "abcdefghijklmnopqrstuvwxyz"; |
Recent_Pick : Pick_Rotation := Pick_Rotation'Last; |
|
function Pick_Char return Character is |
begin |
Recent_Pick := Recent_Pick +1; |
return From(Recent_Pick); |
end Pick_Char; |
|
function Invert(S:String) return String is |
T: String(1..S'Length); |
begin |
for SI in reverse S'Range loop |
T(S'Last - SI + 1) := S(SI); |
end loop; |
return T; |
end Invert; |
|
procedure Validate(Initcount : Natural; |
Testnumber : Natural; |
Check_Order : Boolean := True) is |
Number : constant String := Natural'Image(Testnumber); |
begin |
if Inits_Called /= Initcount then |
Report.Failed("Got" & Natural'Image(Inits_Called) & " inits, expected" |
& Natural'Image(Initcount) & ", Subtest " & Number); |
TCTouch.Flush; |
else |
TCTouch.Validate( |
Invert(Inits_Order(1..Inits_Called)), |
"Subtest " & Number, Order_Meaningful => Check_Order ); |
end if; |
Inits_Called := 0; -- reset for the next batch |
end Validate; |
|
end C761003_Support; |
|
------------------------------------------------------------------ C761003_0 |
|
with Ada.Finalization; |
package C761003_0 is |
|
type Global(Tag: Character) is new Ada.Finalization.Controlled |
with null record; |
|
procedure Initialize( It: in out Global ); |
procedure Finalize ( It: in out Global ); |
|
Null_Global : Global('1') := (Ada.Finalization.Controlled with Tag => '1'); |
|
type Second(Tag: Character) is new Ada.Finalization.Limited_Controlled |
with null record; |
|
procedure Initialize( It: in out Second ); |
procedure Finalize ( It: in out Second ); |
|
end C761003_0; |
|
------------------------------------------------------------------ C761003_1 |
|
with Ada.Finalization; |
package C761003_1 is |
|
type Global is abstract new Ada.Finalization.Controlled with record |
Tag: Character; |
end record; |
|
procedure Initialize( It: in out Global ); |
procedure Finalize ( It: in out Global ); |
|
type Second is abstract new Ada.Finalization.Limited_Controlled with record |
Tag: Character; |
end record; |
|
procedure Initialize( It: in out Second ); |
procedure Finalize ( It: in out Second ); |
|
end C761003_1; |
|
------------------------------------------------------------------ C761003_2 |
|
with C761003_1; |
package C761003_2 is |
|
type Global is new C761003_1.Global with null record; |
-- inherits Initialize and Finalize |
|
type Second is new C761003_1.Second with null record; |
-- inherits Initialize and Finalize |
|
end C761003_2; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- C761003_0 |
|
with TCTouch; |
with C761003_Support; |
package body C761003_0 is |
|
package Sup renames C761003_Support; |
|
procedure Initialize( It: in out Global ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Global ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
|
procedure Initialize( It: in out Second ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Second ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
|
end C761003_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- C761003_1 |
|
with TCTouch; |
with C761003_Support; |
package body C761003_1 is |
|
package Sup renames C761003_Support; |
|
procedure Initialize( It: in out Global ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Global ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
|
procedure Initialize( It: in out Second ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Second ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
|
end C761003_1; |
|
-------------------------------------------------------------------- C761003 |
|
with Report; |
with TCTouch; |
with C761003_0; |
with C761003_2; |
with C761003_Support; |
procedure C761003 is |
|
package Sup renames C761003_Support; |
|
---------------------------------------------------------------- Subtest_1 |
|
Subtest_1_Inits_Expected : constant := 5; -- includes 1 previous |
|
procedure Subtest_1 is |
|
-- the constant will take its constraint from the value. |
-- must be declared first to be finalized last (and take the |
-- initialize from before calling subtest_1) |
Item_1 : constant C761003_0.Global := C761003_0.Null_Global; |
|
-- Item_2, declared second, should be finalized second to last. |
Item_2 : C761003_0.Global(Sup.Pick_Char); |
|
-- Item_3 and Item_4 will be created in the order of the |
-- list. |
Item_3, Item_4 : C761003_0.Global(Sup.Pick_Char); |
|
-- Item_5 will be finalized first. |
Item_5 : C761003_0.Second(Sup.Pick_Char); |
|
begin |
if Item_3.Tag >= Item_4.Tag then |
Report.Failed("Controlled objects created by list in wrong order"); |
end if; |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 1 body"); |
end Subtest_1; |
|
---------------------------------------------------------------- Subtest_2 |
|
-- These declarations should cause calls to initialize and |
-- finalize. The expected operations are the subprograms associated |
-- with the abstract types. Note that for these objects, the |
-- Initialize and Finalize are visible only by inheritance. |
|
Subtest_2_Inits_Expected : constant := 4; |
|
procedure Subtest_2 is |
|
Item_1 : C761003_2.Global; |
Item_2, Item_3 : C761003_2.Global; |
Item_4 : C761003_2.Second; |
|
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 2 body"); |
end Subtest_2; |
|
---------------------------------------------------------------- Subtest_3 |
|
-- Test for controlled objects embedded in arrays. Using structures |
-- that will cause a checkable order. |
|
Subtest_3_Inits_Expected : constant := 8; |
|
procedure Subtest_3 is |
|
type Global_List is array(Natural range <>) |
of C761003_0.Global(Sup.Pick_Char); |
|
Items : Global_List(1..4); -- components have the same tag |
|
type Second_List is array(Natural range <>) |
of C761003_0.Second(Sup.Pick_Char); |
|
Second_Items : Second_List(1..4); -- components have the same tag, |
-- distinct from the tag used in Items |
|
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 3 body"); |
end Subtest_3; |
|
---------------------------------------------------------------- Subtest_4 |
|
-- These declarations should cause dispatching calls to initialize and |
-- finalize. The expected operations are the subprograms associated |
-- with the abstract types. |
|
Subtest_4_Inits_Expected : constant := 2; |
|
procedure Subtest_4 is |
|
type Global_Rec is record |
Item1: C761003_0.Global(Sup.Pick_Char); |
end record; |
|
type Second_Rec is record |
Item2: C761003_2.Second; |
end record; |
|
G : Global_Rec; |
S : Second_Rec; |
|
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 4 body"); |
end Subtest_4; |
|
---------------------------------------------------------------- Subtest_5 |
|
-- Test for controlled objects embedded in arrays. In these cases, the |
-- order of the finalization of the components is not defined by the |
-- language. |
|
Subtest_5_Inits_Expected : constant := 8; |
|
procedure Subtest_5 is |
|
|
type Another_Global_List is array(Natural range <>) |
of C761003_2.Global; |
|
More_Items : Another_Global_List(1..4); |
|
type Another_Second_List is array(Natural range <>) |
of C761003_2.Second; |
|
Second_More_Items : Another_Second_List(1..4); |
|
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 5 body"); |
end Subtest_5; |
|
---------------------------------------------------------------- Subtest_6 |
|
-- These declarations should cause dispatching calls to initialize and |
-- finalize. The expected operations are the subprograms associated |
-- with the abstract types. |
|
Subtest_6_Inits_Expected : constant := 2; |
|
procedure Subtest_6 is |
|
type Global_Rec is record |
Item2: C761003_2.Global; |
end record; |
|
type Second_Rec is record |
Item1: C761003_0.Second(Sup.Pick_Char); |
end record; |
|
G : Global_Rec; |
S : Second_Rec; |
|
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 6 body"); |
end Subtest_6; |
|
begin -- Main test procedure. |
|
Report.Test ("C761003", "Check that an object of a controlled type " |
& "is finalized when the enclosing master is " |
& "complete, left by a transfer of control, " |
& "and performed in the correct order" ); |
|
-- adjust for optional adjusts and initializes for C761003_0.Null_Global |
TCTouch.Flush; -- clear the optional adjust |
if Sup.Inits_Called /= 1 then |
-- C761003_0.Null_Global did not get "initialized" |
C761003_0.Initialize(C761003_0.Null_Global); -- prime the pump |
end if; |
|
Subtest_1; |
Sup.Validate(Subtest_1_Inits_Expected, 1); |
|
Subtest_2; |
Sup.Validate(Subtest_2_Inits_Expected, 2); |
|
Subtest_3; |
Sup.Validate(Subtest_3_Inits_Expected, 3); |
|
Subtest_4; |
Sup.Validate(Subtest_4_Inits_Expected, 4); |
|
Subtest_5; |
Sup.Validate(Subtest_5_Inits_Expected, 5, Check_Order => False); |
|
Subtest_6; |
Sup.Validate(Subtest_6_Inits_Expected, 6); |
|
Report.Result; |
|
end C761003; |
/c760013.a
0,0 → 1,108
-- C760013.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- The Ada Conformity Assessment Authority (ACAA) holds unlimited |
-- rights in the software and documentation contained herein. Unlimited |
-- rights are the same as those granted by the U.S. Government for older |
-- parts of the Ada Conformity Assessment Test Suite, and are defined |
-- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA |
-- intends to confer upon all recipients unlimited rights equal to those |
-- held by the ACAA. These rights include rights to use, duplicate, |
-- release or disclose the released technical data and computer software |
-- in whole or in part, in any manner and for any purpose whatsoever, and |
-- to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that Initialize is not called for default-initialized subcomponents |
-- of the ancestor type of an extension aggregate. (Defect Report |
-- 8652/0021, Technical Corrigendum 7.6(11/1)). |
-- |
-- CHANGE HISTORY: |
-- 25 JAN 2001 PHL Initial version. |
-- 29 JUN 2001 RLB Reformatted for ACATS. |
-- |
--! |
with Ada.Finalization; |
use Ada.Finalization; |
package C760013_0 is |
|
type Ctrl1 is new Controlled with |
record |
C : Integer := 0; |
end record; |
type Ctrl2 is new Controlled with |
record |
C : Integer := 0; |
end record; |
|
procedure Initialize (Obj1 : in out Ctrl1); |
procedure Initialize (Obj2 : in out Ctrl2); |
|
end C760013_0; |
|
with Report; |
use Report; |
package body C760013_0 is |
|
procedure Initialize (Obj1 : in out Ctrl1) is |
begin |
Obj1.C := Ident_Int (47); |
end Initialize; |
|
procedure Initialize (Obj2 : in out Ctrl2) is |
begin |
Failed ("Initialize called for type Ctrl2"); |
end Initialize; |
|
end C760013_0; |
|
with Ada.Finalization; |
with C760013_0; |
use C760013_0; |
with Report; |
use Report; |
procedure C760013 is |
|
type T is tagged |
record |
C1 : Ctrl1; |
C2 : Ctrl2 := (Ada.Finalization.Controlled with |
C => Ident_Int (23)); |
end record; |
|
type Nt is new T with |
record |
C3 : Float; |
end record; |
|
X : Nt; |
|
begin |
Test ("C760013", |
"Check that Initialize is not called for " & |
"default-initialized subcomponents of the ancestor type of an " & |
"extension aggregate"); |
|
X := (T with C3 => 5.0); |
|
if X.C1.C /= Ident_Int (47) then |
Failed ("Initialize not called for type Ctrl1"); |
end if; |
if X.C2.C /= Ident_Int (23) then |
Failed ("Initial value not assigned for type Ctrl2"); |
end if; |
|
Result; |
end C760013; |
|
/c761004.a
0,0 → 1,305
-- C761004.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that an object of a controlled type is finalized with the |
-- enclosing master is complete. |
-- Check that finalization occurs in the case where the master is |
-- left by a transfer of control. |
-- Specifically check for types where the derived types do not have |
-- discriminants. |
-- |
-- Check that finalization of controlled objects is |
-- performed in the correct order. In particular, check that if |
-- multiple objects of controlled types are declared immediately |
-- within the same declarative part then they are finalized in the |
-- reverse order of their creation. |
-- |
-- TEST DESCRIPTION: |
-- This test checks these conditions for subprograms and |
-- block statements; both variables and constants of controlled |
-- types; cases of a controlled component of a record type, as |
-- well as an array with controlled components. |
-- |
-- The base controlled types used for the test are defined |
-- with a character discriminant. The initialize procedure for |
-- the types will record the order of creation in a globally |
-- accessible array, the finalize procedure for the types will call |
-- TCTouch with that tag character. The test can then check that |
-- the order of finalization is indeed the reverse of the order of |
-- creation (assuming that the implementation calls Initialize in |
-- the order that the objects are created). |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 04 Nov 95 SAIC Fixed bugs for ACVC 2.0.1 |
-- |
--! |
|
package C761004_Support is |
|
function Pick_Char return Character; |
-- successive calls to Pick_Char return distinct characters which may |
-- be assigned to objects to track an order sequence. These characters |
-- are then used in calls to TCTouch.Touch. |
|
procedure Validate(Initcount: Natural; Testnumber:Natural); |
-- does a little extra processing prior to calling TCTouch.Validate, |
-- specifically, it reverses the stored string of characters, and checks |
-- for a correct count. |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
|
end C761004_Support; |
|
with Report; |
with TCTouch; |
package body C761004_Support is |
type Pick_Rotation is mod 52; |
type Pick_String is array(Pick_Rotation) of Character; |
|
From : constant Pick_String := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
& "abcdefghijklmnopqrstuvwxyz"; |
Recent_Pick : Pick_Rotation := Pick_Rotation'Last; |
|
function Pick_Char return Character is |
begin |
Recent_Pick := Recent_Pick +1; |
return From(Recent_Pick); |
end Pick_Char; |
|
function Invert(S:String) return String is |
T: String(1..S'Length); |
TI: Positive := 1; |
begin |
for SI in reverse S'Range loop |
T(TI) := S(SI); |
TI := TI +1; |
end loop; |
return T; |
end Invert; |
|
procedure Validate(Initcount: Natural; Testnumber:Natural) is |
Number : constant String := Natural'Image(Testnumber); |
begin |
if Inits_Called /= Initcount then |
Report.Failed("Wrong number of inits, Subtest " & Number); |
TCTouch.Flush; |
else |
TCTouch.Validate( |
Invert(Inits_Order(1..Inits_Called)), |
"Subtest " & Number, True); |
end if; |
end Validate; |
|
end C761004_Support; |
|
----------------------------------------------------------------- C761004_0 |
|
with Ada.Finalization; |
package C761004_0 is |
type Global is new Ada.Finalization.Controlled with record |
Tag : Character; |
end record; |
procedure Initialize( It: in out Global ); |
procedure Finalize ( It: in out Global ); |
|
type Second is new Ada.Finalization.Limited_Controlled with record |
Tag : Character; |
end record; |
procedure Initialize( It: in out Second ); |
procedure Finalize ( It: in out Second ); |
|
end C761004_0; |
|
with TCTouch; |
with C761004_Support; |
package body C761004_0 is |
|
package Sup renames C761004_Support; |
|
procedure Initialize( It: in out Global ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Global ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
|
procedure Initialize( It: in out Second ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Second ) is |
begin |
TCTouch.Touch(It.Tag); --------------------------------------------- Tag |
end Finalize; |
end C761004_0; |
|
------------------------------------------------------------------- C761004 |
|
with Report; |
with TCTouch; |
with C761004_0; |
with C761004_Support; |
with Ada.Finalization; -- needed to be able to create extension aggregates |
procedure C761004 is |
|
Verbose : constant Boolean := False; |
|
package Sup renames C761004_Support; |
|
-- Subtest 1, general case. Check that several objects declared in a |
-- subprogram are created, and finalized in opposite order. |
|
Subtest_1_Expected_Inits : constant := 3; |
|
procedure Subtest_1 is |
Item_1 : C761004_0.Global; |
Item_2, Item_3 : C761004_0.Global; |
begin |
if Item_2.Tag = Item_3.Tag then -- not germane to the test |
Report.Failed("Duplicate tag");-- but helps prevent code elimination |
end if; |
end Subtest_1; |
|
-- Subtest 2, extension of the general case. Check that several objects |
-- created identically on the stack (via a recursive procedure) are |
-- finalized in the opposite order of their creation. |
Subtest_2_Expected_Inits : constant := 12; |
User_Exception : exception; |
|
procedure Subtest_2 is |
|
Item_1 : C761004_0.Global; |
|
-- combine recursion and exit by exception: |
|
procedure Nested(Recurs: Natural) is |
Item_3 : C761004_0.Global; |
begin |
if Verbose then |
Report.Comment("going in: " & Item_3.Tag); |
end if; |
if Recurs = 1 then |
raise User_Exception; |
else |
Nested(Recurs -1); |
end if; |
end Nested; |
|
Item_2 : C761004_0.Global; |
|
begin |
Nested(10); |
end Subtest_2; |
|
-- subtest 3, check the case of objects embedded in structures: |
-- an array |
-- a record |
Subtest_3_Expected_Inits : constant := 3; |
procedure Subtest_3 is |
type G_List is array(Positive range <>) of C761004_0.Global; |
type Pandoras_Box is record |
G : G_List(1..1); |
end record; |
|
procedure Nested(Recursions: Natural) is |
Merlin : Pandoras_Box; |
begin |
if Recursions > 1 then |
Nested(Recursions-1); |
else |
TCTouch.Validate("","Final Nested call"); |
end if; |
end Nested; |
|
begin |
Nested(3); |
end Subtest_3; |
|
-- subtest 4, check the case of objects embedded in structures: |
-- an array |
-- a record |
Subtest_4_Expected_Inits : constant := 3; |
procedure Subtest_4 is |
type S_List is array(Positive range <>) of C761004_0.Second; |
type Pandoras_Box is record |
S : S_List(1..1); |
end record; |
|
procedure Nested(Recursions: Natural) is |
Merlin : Pandoras_Box; |
begin |
if Recursions > 1 then |
Nested(Recursions-1); |
else |
TCTouch.Validate("","Final Nested call"); |
end if; |
end Nested; |
|
begin |
Nested(3); |
end Subtest_4; |
|
begin -- Main test procedure. |
|
Report.Test ("C761004", "Check that an object of a controlled type " |
& "is finalized when the enclosing master is " |
& "complete, left by a transfer of control, " |
& "and performed in the correct order" ); |
|
Subtest_1; |
Sup.Validate(Subtest_1_Expected_Inits,1); |
|
Subtest_2_Frame: begin |
Sup.Inits_Called := 0; |
Subtest_2; |
exception |
when User_Exception => null; |
when others => Report.Failed("Wrong Exception, Subtest 2"); |
end Subtest_2_Frame; |
Sup.Validate(Subtest_2_Expected_Inits,2); |
|
Sup.Inits_Called := 0; |
Subtest_3; |
Sup.Validate(Subtest_3_Expected_Inits,3); |
|
Sup.Inits_Called := 0; |
Subtest_4; |
Sup.Validate(Subtest_4_Expected_Inits,4); |
|
Report.Result; |
|
end C761004; |
/c761005.a
0,0 → 1,288
-- C761005.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that deriving abstract types from the types in Ada.Finalization |
-- does not negatively impact the implicit operations. |
-- Check that an object of a controlled type is finalized when the |
-- enclosing master is complete. |
-- Check that finalization occurs in the case where the master is |
-- left by a transfer of control. |
-- Check this for controlled types where the derived type has a |
-- discriminant. |
-- Check this for cases where the type is defined as private, |
-- and the full type is derived from the types in Ada.Finalization. |
-- |
-- Check that finalization of controlled objects is |
-- performed in the correct order. In particular, check that if |
-- multiple objects of controlled types are declared immediately |
-- within the same declarative part then type are finalized in the |
-- reverse order of their creation. |
-- |
-- TEST DESCRIPTION: |
-- This test checks these conditions for subprograms and |
-- block statements; both variables and constants of controlled |
-- types; cases of a controlled component of a record type, as |
-- well as an array with controlled components. |
-- |
-- The base controlled types used for the test are defined |
-- with a character discriminant. The initialize procedure for |
-- the types will record the order of creation in a globally |
-- accessible array, the finalize procedure for the types will call |
-- TCTouch with that tag character. The test can then check that |
-- the order of finalization is indeed the reverse of the order of |
-- creation (assuming that the implementation calls Initialize in |
-- the order that the objects are created). |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 10 Oct 95 SAIC Fixed bugs for ACVC 2.0.1 |
-- |
--! |
|
package C761005_Support is |
|
function Pick_Char return Character; |
procedure Validate(Initcount: Natural; Testnumber:Natural); |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
|
end C761005_Support; |
|
with Report; |
with TCTouch; |
package body C761005_Support is |
type Pick_Rotation is mod 52; |
type Pick_String is array(Pick_Rotation) of Character; |
|
From : constant Pick_String := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
& "abcdefghijklmnopqrstuvwxyz"; |
Recent_Pick : Pick_Rotation := Pick_Rotation'Last; |
|
function Pick_Char return Character is |
begin |
Recent_Pick := Recent_Pick +1; |
return From(Recent_Pick); |
end Pick_Char; |
|
function Invert(S:String) return String is |
T: String(1..S'Length); |
TI: Positive := 1; |
begin |
for SI in reverse S'Range loop |
T(TI) := S(SI); |
TI := TI +1; |
end loop; |
return T; |
end Invert; |
|
procedure Validate(Initcount: Natural; Testnumber:Natural) is |
Number : constant String := Natural'Image(Testnumber); |
begin |
if Inits_Called /= Initcount then |
Report.Failed("Wrong number of inits, Subtest " & Number); |
else |
TCTouch.Validate( |
Invert(Inits_Order(1..Inits_Called)), |
"Subtest " & Number, True); |
end if; |
Inits_Called := 0; |
end Validate; |
|
end C761005_Support; |
|
----------------------------------------------------------------------------- |
with Ada.Finalization; |
package C761005_0 is |
type Final_Root(Tag: Character) is private; |
|
type Ltd_Final_Root(Tag: Character) is limited private; |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
private |
type Final_Root(Tag: Character) is new Ada.Finalization.Controlled |
with null record; |
procedure Initialize( It: in out Final_Root ); |
procedure Finalize ( It: in out Final_Root ); |
|
type Ltd_Final_Root(Tag: Character) is new |
Ada.Finalization.Limited_Controlled |
with null record; |
procedure Initialize( It: in out Ltd_Final_Root ); |
procedure Finalize ( It: in out Ltd_Final_Root ); |
end C761005_0; |
|
----------------------------------------------------------------------------- |
with Ada.Finalization; |
package C761005_1 is |
type Final_Abstract is abstract tagged private; |
|
type Ltd_Final_Abstract_Child is abstract tagged limited private; |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
|
private |
type Final_Abstract is abstract new Ada.Finalization.Controlled with record |
Tag: Character; |
end record; |
procedure Initialize( It: in out Final_Abstract ); |
procedure Finalize ( It: in out Final_Abstract ); |
|
type Ltd_Final_Abstract_Child is |
abstract new Ada.Finalization.Limited_Controlled with record |
Tag: Character; |
end record; |
procedure Initialize( It: in out Ltd_Final_Abstract_Child ); |
procedure Finalize ( It: in out Ltd_Final_Abstract_Child ); |
|
end C761005_1; |
|
----------------------------------------------------------------------------- |
with C761005_1; |
package C761005_2 is |
|
type Final_Child is new C761005_1.Final_Abstract with null record; |
type Ltd_Final_Child is |
new C761005_1.Ltd_Final_Abstract_Child with null record; |
|
end C761005_2; |
|
----------------------------------------------------------------------------- |
with Report; |
with TCTouch; |
with C761005_Support; |
package body C761005_0 is |
|
package Sup renames C761005_Support; |
|
procedure Initialize( It: in out Final_Root ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Final_Root ) is |
begin |
TCTouch.Touch(It.Tag); |
end Finalize; |
|
procedure Initialize( It: in out Ltd_Final_Root ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Ltd_Final_Root ) is |
begin |
TCTouch.Touch(It.Tag); |
end Finalize; |
end C761005_0; |
|
----------------------------------------------------------------------------- |
with Report; |
with TCTouch; |
with C761005_Support; |
package body C761005_1 is |
|
package Sup renames C761005_Support; |
|
procedure Initialize( It: in out Final_Abstract ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Final_Abstract ) is |
begin |
TCTouch.Touch(It.Tag); |
end Finalize; |
|
procedure Initialize( It: in out Ltd_Final_Abstract_Child ) is |
begin |
Sup.Inits_Called := Sup.Inits_Called +1; |
It.Tag := Sup.Pick_Char; |
Sup.Inits_Order(Sup.Inits_Called) := It.Tag; |
end Initialize; |
|
procedure Finalize( It: in out Ltd_Final_Abstract_Child ) is |
begin |
TCTouch.Touch(It.Tag); |
end Finalize; |
end C761005_1; |
|
----------------------------------------------------------------------------- |
with Report; |
with TCTouch; |
with C761005_0; |
with C761005_2; |
with C761005_Support; |
procedure C761005 is |
|
package Sup renames C761005_Support; |
|
Subtest_1_Inits_Expected : constant := 4; |
procedure Subtest_1 is |
Item_1 : C761005_0.Final_Root(Sup.Pick_Char); |
Item_2, Item_3 : C761005_0.Final_Root(Sup.Pick_Char); |
Item_4 : C761005_0.Ltd_Final_Root(Sup.Pick_Char); |
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 1 body"); |
end Subtest_1; |
|
-- These declarations should cause calls to initialize and |
-- finalize. The expected operations are the subprograms associated |
-- with the abstract types. |
Subtest_2_Inits_Expected : constant := 4; |
procedure Subtest_2 is |
Item_1 : C761005_2.Final_Child; |
Item_2, Item_3 : C761005_2.Final_Child; |
Item_4 : C761005_2.Ltd_Final_Child; |
begin |
-- check that nothing has happened yet! |
TCTouch.Validate("","Subtest 2 body"); |
end Subtest_2; |
|
begin -- Main test procedure. |
|
Report.Test ("C761005", "Check that an object of a controlled type " |
& "is finalized when the enclosing master is " |
& "complete, left by a transfer of control, " |
& "and performed in the correct order" ); |
|
Subtest_1; |
Sup.Validate(Subtest_1_Inits_Expected,1); |
|
Subtest_2; |
Sup.Validate(Subtest_2_Inits_Expected,2); |
|
Report.Result; |
|
end C761005; |
/c761006.a
0,0 → 1,425
-- C761006.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that Program_Error is raised when: |
-- * an exception is raised if Finalize invoked as part of an |
-- assignment operation; or |
-- * an exception is raised if Adjust invoked as part of an assignment |
-- operation, after any other adjustment due to be performed are |
-- performed; or |
-- * an exception is raised if Finalize invoked as part of a call on |
-- Unchecked_Deallocation, after any other finalizations to be |
-- performed are performed. |
-- |
-- TEST DESCRIPTION: |
-- This test defines these four controlled types: |
-- Good |
-- Bad_Initialize |
-- Bad_Adjust |
-- Bad_Finalize |
-- The type name conveys the associated failure. The operations in type |
-- good will "touch" the boolean array indicating correct path |
-- utilization for the purposes of checking "other <operations> are |
-- performed", where <operations> ::= initialization, adjusting, and |
-- finalization |
-- |
-- |
-- |
-- CHANGE HISTORY: |
-- 12 APR 94 SAIC Initial version |
-- 02 MAY 96 SAIC Visibility fixed for 2.1 |
-- 13 FEB 97 PWB.CTA Corrected value of Events_Occurring at line 286 |
-- 01 DEC 97 EDS Made correction wrt RM 7.6(21) |
-- 16 MAR 01 RLB Corrected Adjust cases to avoid problems with |
-- RM 7.6.1(16/1) from Technical Corrigendum 1. |
-- |
--! |
|
------------------------------------------------------------- C761006_Support |
|
package C761006_Support is |
|
type Events is ( Good_Initialize, Good_Adjust, Good_Finalize ); |
|
type Event_Array is array(Events) of Boolean; |
|
Events_Occurring : Event_Array := (others => False); |
|
Propagating_Exception : exception; |
|
procedure Raise_Propagating_Exception(Do_It: Boolean); |
|
function Unique_Value return Natural; |
|
end C761006_Support; |
|
------------------------------------------------------------- C761006_Support |
|
with Report; |
package body C761006_Support is |
|
procedure Raise_Propagating_Exception(Do_It: Boolean) is |
begin |
if Report.Ident_Bool(Do_It) then |
raise Propagating_Exception; |
end if; |
end Raise_Propagating_Exception; |
|
Seed : Natural := 0; |
|
function Unique_Value return Natural is |
begin |
Seed := Seed +1; |
return Seed; |
end Unique_Value; |
|
end C761006_Support; |
|
------------------------------------------------------------------- C761006_0 |
|
with Ada.Finalization; |
with C761006_Support; |
package C761006_0 is |
|
type Good is new Ada.Finalization.Controlled |
with record |
Initialized : Boolean := False; |
Adjusted : Boolean := False; |
Unique : Natural := C761006_Support.Unique_Value; |
end record; |
|
procedure Initialize( It: in out Good ); |
procedure Adjust ( It: in out Good ); |
procedure Finalize ( It: in out Good ); |
|
type Bad_Initialize is private; |
|
type Bad_Adjust is private; |
|
type Bad_Finalize is private; |
|
Inits_Order : String(1..255); |
Inits_Called : Natural := 0; |
private |
type Bad_Initialize is new Ada.Finalization.Controlled |
with null record; |
procedure Initialize( It: in out Bad_Initialize ); |
|
type Bad_Adjust is new Ada.Finalization.Controlled |
with null record; |
procedure Adjust ( It: in out Bad_Adjust ); |
|
type Bad_Finalize is |
new Ada.Finalization.Controlled with null record; |
procedure Finalize ( It: in out Bad_Finalize ); |
end C761006_0; |
|
------------------------------------------------------------------- C761006_1 |
|
with Ada.Finalization; |
with C761006_0; |
package C761006_1 is |
|
type Init_Check_Root is new Ada.Finalization.Controlled with record |
Good_Component : C761006_0.Good; |
Init_Fails : C761006_0.Bad_Initialize; |
end record; |
|
type Adj_Check_Root is new Ada.Finalization.Controlled with record |
Good_Component : C761006_0.Good; |
Adj_Fails : C761006_0.Bad_Adjust; |
end record; |
|
type Fin_Check_Root is new Ada.Finalization.Controlled with record |
Good_Component : C761006_0.Good; |
Fin_Fails : C761006_0.Bad_Finalize; |
end record; |
|
end C761006_1; |
|
------------------------------------------------------------------- C761006_2 |
|
with C761006_1; |
package C761006_2 is |
|
type Init_Check is new C761006_1.Init_Check_Root with null record; |
type Adj_Check is new C761006_1.Adj_Check_Root with null record; |
type Fin_Check is new C761006_1.Fin_Check_Root with null record; |
|
end C761006_2; |
|
------------------------------------------------------------------- C761006_0 |
|
with Report; |
with C761006_Support; |
package body C761006_0 is |
|
package Sup renames C761006_Support; |
|
procedure Initialize( It: in out Good ) is |
begin |
Sup.Events_Occurring( Sup.Good_Initialize ) := True; |
It.Initialized := True; |
end Initialize; |
|
procedure Adjust ( It: in out Good ) is |
begin |
Sup.Events_Occurring( Sup.Good_Adjust ) := True; |
It.Adjusted := True; |
It.Unique := C761006_Support.Unique_Value; |
end Adjust; |
|
procedure Finalize ( It: in out Good ) is |
begin |
Sup.Events_Occurring( Sup.Good_Finalize ) := True; |
end Finalize; |
|
procedure Initialize( It: in out Bad_Initialize ) is |
begin |
Sup.Raise_Propagating_Exception(Report.Ident_Bool(True)); |
end Initialize; |
|
procedure Adjust( It: in out Bad_Adjust ) is |
begin |
Sup.Raise_Propagating_Exception(Report.Ident_Bool(True)); |
end Adjust; |
|
procedure Finalize( It: in out Bad_Finalize ) is |
begin |
Sup.Raise_Propagating_Exception(Report.Ident_Bool(True)); |
end Finalize; |
|
end C761006_0; |
|
--------------------------------------------------------------------- C761006 |
|
with Report; |
with C761006_0; |
with C761006_2; |
with C761006_Support; |
with Ada.Exceptions; |
with Ada.Finalization; |
with Unchecked_Deallocation; |
procedure C761006 is |
|
package Sup renames C761006_Support; |
use type Sup.Event_Array; |
|
type Procedure_Handle is access procedure; |
|
type Test_ID is ( Simple, Initialize, Adjust, Finalize ); |
|
Sub_Tests : array(Test_ID) of Procedure_Handle; |
|
procedure Simple_Test is |
A_Good_Object : C761006_0.Good; -- should call Initialize |
begin |
if not A_Good_Object.Initialized then |
Report.Failed("Good object not initialized"); |
end if; |
|
-- should call Adjust |
A_Good_Object := ( Ada.Finalization.Controlled |
with Unique => 0, others => False ); |
if not A_Good_Object.Adjusted then |
Report.Failed("Good object not adjusted"); |
end if; |
|
-- should call Finalize before end of scope |
end Simple_Test; |
|
procedure Initialize_Test is |
begin |
declare |
This_Object_Fails_In_Initialize : C761006_2.Init_Check; |
begin |
Report.Failed("Exception in Initialize did not occur"); |
exception |
when others => |
Report.Failed("Initialize caused exception at wrong lex"); |
end; |
|
Report.Failed("Error in execution sequence"); |
|
exception |
when Sup.Propagating_Exception => -- this is correct |
if not Sup.Events_Occurring(Sup.Good_Initialize) then |
Report.Failed("Initialization of Good Component did not occur"); |
end if; |
end Initialize_Test; |
|
procedure Adjust_Test is |
This_Object_OK : C761006_2.Adj_Check; |
This_Object_Target : C761006_2.Adj_Check; |
begin |
|
Check_Adjust_Due_To_Assignment: begin |
This_Object_Target := This_Object_OK; |
Report.Failed("Adjust did not propagate any exception"); |
exception |
when Program_Error => -- expected case |
if not This_Object_Target.Good_Component.Adjusted then |
Report.Failed("other adjustment not performed"); |
end if; |
when others => |
Report.Failed("Adjust propagated wrong exception"); |
end Check_Adjust_Due_To_Assignment; |
|
C761006_Support.Events_Occurring := (True, False, False); |
|
Check_Adjust_Due_To_Initial_Assignment: declare |
Another_Target : C761006_2.Adj_Check := This_Object_OK; |
begin |
Report.Failed("Adjust did not propagate any exception"); |
exception |
when others => Report.Failed("Adjust caused exception at wrong lex"); |
end Check_Adjust_Due_To_Initial_Assignment; |
|
exception |
when Program_Error => -- expected case |
if Sup.Events_Occurring(Sup.Good_Finalize) /= |
Sup.Events_Occurring(Sup.Good_Adjust) then |
-- RM 7.6.1(16/1) says that the good Adjust may or may not |
-- be performed; but if it is, then the Finalize must be |
-- performed; and if it is not, then the Finalize must not |
-- performed. |
if Sup.Events_Occurring(Sup.Good_Finalize) then |
Report.Failed("Good adjust not performed with bad adjust, " & |
"but good finalize was"); |
else |
Report.Failed("Good adjust performed with bad adjust, " & |
"but good finalize was not"); |
end if; |
end if; |
when others => |
Report.Failed("Adjust propagated wrong exception"); |
end Adjust_Test; |
|
procedure Finalize_Test is |
|
Fin_Not_Perf : constant String := "other finalizations not performed"; |
|
procedure Finalize_15 is |
Item : C761006_2.Fin_Check; |
Target : C761006_2.Fin_Check; |
begin |
|
Item := Target; |
-- finalization of Item should cause PE |
-- ARM7.6:21 allows the implementation to omit the assignment of the |
-- value into an anonymous object, which is the point at which Adjust |
-- is normally called. However, this would result in Program_Error's |
-- being raised before the call to Adjust, with the consequence that |
-- Adjust is never called. |
|
exception |
when Program_Error => -- expected case |
if not Sup.Events_Occurring(Sup.Good_Finalize) then |
Report.Failed("Assignment: " & Fin_Not_Perf); |
end if; |
when others => |
Report.Failed("Other exception in Finalize_15"); |
|
-- finalization of Item/Target should cause PE |
end Finalize_15; |
|
-- check failure in finalize due to Unchecked_Deallocation |
|
type Shark is access C761006_2.Fin_Check; |
|
procedure Catch is |
new Unchecked_Deallocation( C761006_2.Fin_Check, Shark ); |
|
procedure Finalize_17 is |
White : Shark := new C761006_2.Fin_Check; |
begin |
Catch( White ); |
exception |
when Program_Error => |
if not Sup.Events_Occurring(Sup.Good_Finalize) then |
Report.Failed("Unchecked_Deallocation: " & Fin_Not_Perf); |
end if; |
end Finalize_17; |
|
begin |
|
Exception_In_Finalization: begin |
Finalize_15; |
exception |
when Program_Error => null; -- anticipated |
end Exception_In_Finalization; |
|
Use_Of_Unchecked_Deallocation: begin |
Finalize_17; |
exception |
when others => |
Report.Failed("Unchecked_Deallocation check, unwanted exception"); |
end Use_Of_Unchecked_Deallocation; |
|
end Finalize_Test; |
|
begin -- Main test procedure. |
|
Report.Test ("C761006", "Check that exceptions raised in Initialize, " & |
"Adjust and Finalize are processed correctly" ); |
|
Sub_Tests := (Simple_Test'Access, Initialize_Test'Access, |
Adjust_Test'Access, Finalize_Test'Access); |
|
for Test in Sub_Tests'Range loop |
begin |
|
Sup.Events_Occurring := (others => False); |
|
Sub_Tests(Test).all; |
|
case Test is |
when Simple | Adjust => |
if Sup.Events_Occurring /= Sup.Event_Array ' ( others => True ) then |
Report.Failed ( "Other operation missing in " & |
Test_ID'Image ( Test ) ); |
end if; |
when Initialize => |
null; |
when Finalize => |
-- Note that for Good_Adjust, we may get either True or False |
if Sup.Events_Occurring ( Sup.Good_Initialize ) = False or |
Sup.Events_Occurring ( Sup.Good_Finalize ) = False |
then |
Report.Failed ( "Other operation missing in " & |
Test_ID'Image ( Test ) ); |
end if; |
end case; |
|
exception |
when How: others => Report.Failed( Ada.Exceptions.Exception_Name( How ) |
& " from " & Test_ID'Image( Test ) ); |
end; |
end loop; |
|
Report.Result; |
|
end C761006; |
/c761007.a
0,0 → 1,419
-- C761007.A |
-- |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that if a finalize procedure invoked by a transfer of control |
-- due to selection of a terminate alternative attempts to propagate an |
-- exception, the exception is ignored, but any other finalizations due |
-- to be performed are performed. |
-- |
-- |
-- TEST DESCRIPTION: |
-- This test declares a nested controlled data type, and embeds an object |
-- of that type within a protected type. Objects of the protected type |
-- are created and destroyed, and the actions of the embedded controlled |
-- object are checked. The container controlled type causes an exception |
-- as the last part of it's finalization operation. |
-- |
-- This test utilizes several tasks to accomplish the objective. The |
-- tasks contain delays to ensure that the expected order of processing |
-- is indeed accomplished. |
-- |
-- Subtest 1: |
-- local task object runs to normal completion |
-- |
-- Subtest 2: |
-- local task aborts a nested task to cause finalization |
-- |
-- Subtest 3: |
-- local task sleeps long enough to allow procedure started |
-- asynchronously to go into infinite loop. Procedure is then aborted |
-- via ATC, causing finalization of objects. |
-- |
-- Subtest 4: |
-- local task object takes terminate alternative, causing finalization |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 JUN 95 SAIC Initial version |
-- 05 APR 96 SAIC Documentation changes |
-- 03 MAR 97 PWB.CTA Allowed two finalization orders for ATC test |
-- 02 DEC 97 EDS Remove duplicate characters from check string. |
--! |
|
---------------------------------------------------------------- C761007_0 |
|
with Ada.Finalization; |
package C761007_0 is |
|
type Internal is new Ada.Finalization.Controlled |
with record |
Effect : Character; |
end record; |
|
procedure Finalize( I: in out Internal ); |
|
Side_Effect : String(1..80); -- way bigger than needed |
Side_Effect_Finger : Natural := 0; |
|
end C761007_0; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with TCTouch; |
package body C761007_0 is |
|
procedure Finalize( I : in out Internal ) is |
Previous_Side_Effect : Boolean := False; |
begin |
-- look to see if this character has been finalized yet |
for SEI in 1..Side_Effect_Finger loop |
Previous_Side_Effect := Previous_Side_Effect |
or Side_Effect(Side_Effect_Finger) = I.Effect; |
end loop; |
|
-- if not, then tack it on to the string, and touch the character |
if not Previous_Side_Effect then |
Side_Effect_Finger := Side_Effect_Finger +1; |
Side_Effect(Side_Effect_Finger) := I.Effect; |
TCTouch.Touch(I.Effect); |
end if; |
|
end Finalize; |
|
end C761007_0; |
|
---------------------------------------------------------------- C761007_1 |
|
with C761007_0; |
with Ada.Finalization; |
package C761007_1 is |
|
type Container is new Ada.Finalization.Controlled |
with record |
Effect : Character; |
Content : C761007_0.Internal; |
end record; |
|
procedure Finalize( C: in out Container ); |
|
Side_Effect : String(1..80); -- way bigger than needed |
Side_Effect_Finger : Natural := 0; |
|
This_Exception_Is_Supposed_To_Be_Ignored : exception; |
|
end C761007_1; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
with TCTouch; |
package body C761007_1 is |
|
procedure Finalize( C: in out Container ) is |
Previous_Side_Effect : Boolean := False; |
begin |
-- look to see if this character has been finalized yet |
for SEI in 1..Side_Effect_Finger loop |
Previous_Side_Effect := Previous_Side_Effect |
or Side_Effect(Side_Effect_Finger) = C.Effect; |
end loop; |
|
-- if not, then tack it on to the string, and touch the character |
if not Previous_Side_Effect then |
Side_Effect_Finger := Side_Effect_Finger +1; |
Side_Effect(Side_Effect_Finger) := C.Effect; |
TCTouch.Touch(C.Effect); |
end if; |
|
raise This_Exception_Is_Supposed_To_Be_Ignored; |
|
end Finalize; |
|
end C761007_1; |
|
---------------------------------------------------------------- C761007_2 |
with C761007_1; |
package C761007_2 is |
|
protected type Prot_W_Fin_Obj is |
procedure Set_Effects( Container, Filling: Character ); |
private |
The_Data_Under_Test : C761007_1.Container; |
-- finalization for this will occur when the Prot_W_Fin_Obj object |
-- "goes out of existence" for whatever reason. |
end Prot_W_Fin_Obj; |
|
end C761007_2; |
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
|
package body C761007_2 is |
|
protected body Prot_W_Fin_Obj is |
procedure Set_Effects( Container, Filling: Character ) is |
begin |
The_Data_Under_Test.Effect := Container; -- A, etc. |
The_Data_Under_Test.Content.Effect := Filling; -- B, etc. |
end Set_Effects; |
end Prot_W_Fin_Obj; |
|
end C761007_2; |
|
------------------------------------------------------------------ C761007 |
|
with Report; |
with Impdef; |
with TCTouch; |
with C761007_0; |
with C761007_1; |
with C761007_2; |
procedure C761007 is |
|
task type Subtests( Outer, Inner : Character) is |
entry Ready; |
entry Complete; |
end Subtests; |
|
task body Subtests is |
Local_Prot_W_Fin_Obj : C761007_2.Prot_W_Fin_Obj; |
begin |
Local_Prot_W_Fin_Obj.Set_Effects( Outer, Inner ); |
|
accept Ready; |
|
select |
accept Complete; |
or terminate; -- used in Subtest 4 |
end select; |
exception |
-- the exception caused by the finalization of Local_Prot_W_Fin_Obj |
-- should never be visible to this scope. |
when others => Report.Failed("Exception in a Subtest object " |
& Outer & Inner); |
end Subtests; |
|
procedure Subtest_1 is |
-- check the case where "nothing special" happens. |
|
This_Subtest : Subtests( 'A', 'B' ); |
begin |
|
This_Subtest.Ready; |
This_Subtest.Complete; |
|
while not This_Subtest'Terminated loop -- wait for finalization |
delay Impdef.Clear_Ready_Queue; |
end loop; |
|
-- in the finalization of This_Subtest, the controlled object embedded in |
-- the Prot_W_Fin_Obj will finalize. An exception is raised in the |
-- container object, after "touching" it's tag character. |
-- The finalization of the contained controlled object must be performed. |
|
|
TCTouch.Validate( "AB", "Item embedded in task" ); |
|
|
exception |
when others => Report.Failed("Undesirable exception in Subtest_1"); |
|
end Subtest_1; |
|
procedure Subtest_2 is |
-- check for explicit abort |
|
task Subtest_Task is |
entry Complete; |
end Subtest_Task; |
|
task body Subtest_Task is |
|
task Nesting; |
task body Nesting is |
Deep_Nesting : Subtests( 'E', 'F' ); |
begin |
if Report.Ident_Bool( True ) then |
-- controlled objects have been created in the elaboration of |
-- Deep_Nesting. Deep_Nesting must call the Set_Effects operation |
-- in the Prot_W_Fin_Obj, and then hang waiting for the Complete |
-- entry call. |
Deep_Nesting.Ready; |
abort Deep_Nesting; |
else |
Report.Failed("Dead code in Nesting"); |
end if; |
exception |
when others => Report.Failed("Exception in Subtest_Task.Nesting"); |
end Nesting; |
|
Local_2 : C761007_2.Prot_W_Fin_Obj; |
|
begin |
-- Nesting has activated at this point, which implies the activation |
-- of Deep_Nesting as well. |
|
Local_2.Set_Effects( 'C', 'D' ); |
|
-- wait for Nesting to terminate |
|
while not Nesting'Terminated loop |
delay Impdef.Clear_Ready_Queue; |
end loop; |
|
accept Complete; |
|
exception |
when others => Report.Failed("Exception in Subtest_Task"); |
end Subtest_Task; |
|
begin |
|
-- wait for everything in Subtest_Task to happen |
Subtest_Task.Complete; |
|
while not Subtest_Task'Terminated loop -- wait for finalization |
delay Impdef.Clear_Ready_Queue; |
end loop; |
|
TCTouch.Validate( "EFCD", "Aborted nested task" ); |
|
exception |
when others => Report.Failed("Undesirable exception in Subtest_2"); |
end Subtest_2; |
|
procedure Subtest_3 is |
-- check abort caused by asynchronous transfer of control |
|
task Subtest_3_Task is |
entry Complete; |
end Subtest_3_Task; |
|
procedure Check_Atc_Operation is |
Check_Atc : C761007_2.Prot_W_Fin_Obj; |
begin |
|
Check_Atc.Set_Effects( 'G', 'H' ); |
|
|
while Report.Ident_Bool( True ) loop -- wait to be aborted |
if Report.Ident_Bool( True ) then |
Impdef.Exceed_Time_Slice; |
delay Impdef.Switch_To_New_Task; |
else |
Report.Failed("Optimization prevention"); |
end if; |
end loop; |
|
Report.Failed("Check_Atc_Operation loop completed"); |
|
end Check_Atc_Operation; |
|
task body Subtest_3_Task is |
task Nesting is |
entry Complete; |
end Nesting; |
|
task body Nesting is |
Nesting_3 : C761007_2.Prot_W_Fin_Obj; |
begin |
Nesting_3.Set_Effects( 'G', 'H' ); |
|
-- give Check_Atc_Operation sufficient time to perform it's |
-- Set_Effects on it's local Prot_W_Fin_Obj object |
delay Impdef.Clear_Ready_Queue; |
|
accept Complete; |
exception |
when others => Report.Failed("Exception in Subtest_3_Task.Nesting"); |
end Nesting; |
|
Local_3 : C761007_2.Prot_W_Fin_Obj; |
|
begin -- Subtest_3_Task |
|
Local_3.Set_Effects( 'I', 'J' ); |
|
select |
Nesting.Complete; |
then abort ---------------------------------------------------- cause KL |
Check_ATC_Operation; |
end select; |
|
accept Complete; |
|
exception |
when others => Report.Failed("Exception in Subtest_3_Task"); |
end Subtest_3_Task; |
|
begin -- Subtest_3 |
Subtest_3_Task.Complete; |
|
while not Subtest_3_Task'Terminated loop -- wait for finalization |
delay Impdef.Clear_Ready_Queue; |
end loop; |
|
TCTouch.Validate( "GHIJ", "Asynchronously aborted operation" ); |
|
exception |
when others => Report.Failed("Undesirable exception in Subtest_3"); |
end Subtest_3; |
|
procedure Subtest_4 is |
-- check the case where transfer is caused by terminate alternative |
-- highly similar to Subtest_1 |
|
This_Subtest : Subtests( 'M', 'N' ); |
begin |
|
This_Subtest.Ready; |
-- don't call This_Subtest.Complete; |
|
exception |
when others => Report.Failed("Undesirable exception in Subtest_4"); |
|
end Subtest_4; |
|
begin -- Main test procedure. |
|
Report.Test ("C761007", "Check that if a finalize procedure invoked by " & |
"a transfer of control or selection of a " & |
"terminate alternative attempts to propagate " & |
"an exception, the exception is ignored, but " & |
"any other finalizations due to be performed " & |
"are performed" ); |
|
Subtest_1; -- checks internal |
|
Subtest_2; -- checks internal |
|
Subtest_3; -- checks internal |
|
Subtest_4; |
TCTouch.Validate( "MN", "transfer due to terminate alternative" ); |
|
Report.Result; |
|
end C761007; |
/c74401q.ada
0,0 → 1,119
-- C74401Q.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT OUT PARAMETERS HAVING A LIMITED PRIVATE TYPE CAN BE |
-- DECLARED FOR A GENERIC SUBPROGRAM IN A PACKAGE SPECIFICATION, |
-- INCLUDING WITHIN PACKAGES NESTED IN A VISIBLE PART. |
|
-- JBG 5/1/85 |
|
WITH REPORT; USE REPORT; |
PROCEDURE C74401Q IS |
|
PACKAGE PKG IS |
TYPE LP IS LIMITED PRIVATE; |
|
GENERIC |
PROCEDURE P20 (X : OUT LP); -- OK. |
PROCEDURE RESET (X : OUT LP); |
FUNCTION EQ (L, R : LP) RETURN BOOLEAN; |
VAL1 : CONSTANT LP; |
|
PACKAGE NESTED IS |
GENERIC |
PROCEDURE NEST1 (X : OUT LP); |
PRIVATE |
GENERIC |
PROCEDURE NEST2 (X : OUT LP); |
END NESTED; |
PRIVATE |
TYPE LP IS NEW INTEGER; |
VAL1 : CONSTANT LP := LP(IDENT_INT(3)); |
END PKG; |
|
VAR : PKG.LP; |
|
PACKAGE BODY PKG IS |
PROCEDURE P20 (X : OUT LP) IS |
BEGIN |
X := 3; |
END P20; |
|
PROCEDURE RESET (X : OUT LP) IS |
BEGIN |
X := 0; |
END RESET; |
|
FUNCTION EQ (L, R : LP) RETURN BOOLEAN IS |
BEGIN |
RETURN L = R; |
END EQ; |
|
PACKAGE BODY NESTED IS |
PROCEDURE NEST1 (X : OUT LP) IS |
BEGIN |
X := 3; |
END NEST1; |
|
PROCEDURE NEST2 (X : OUT LP) IS |
BEGIN |
X := LP(IDENT_INT(3)); |
END NEST2; |
END NESTED; |
BEGIN |
VAR := LP(IDENT_INT(0)); |
END PKG; |
|
PACKAGE INSTANCES IS |
PROCEDURE NP20 IS NEW PKG.P20; |
PROCEDURE NNEST1 IS NEW PKG.NESTED.NEST1; |
END INSTANCES; |
USE INSTANCES; |
|
PACKAGE PKG1 IS |
PROCEDURE P21 (X : OUT PKG.LP) RENAMES INSTANCES.NP20; |
END PKG1; |
|
BEGIN |
|
TEST ("C74401Q", "CHECK THAT A PROCEDURE CAN HAVE AN OUT " & |
"PARAMETER WITH A LIMITED PRIVATE TYPE"); |
|
PKG.RESET (VAR); |
NP20 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("DIRECT CALL NOT CORRECT"); |
END IF; |
|
PKG.RESET (VAR); |
PKG1.P21 (VAR); |
|
IF NOT PKG.EQ (VAR, PKG.VAL1) THEN |
FAILED ("RENAMED CALL NOT CORRECT"); |
END IF; |
|
RESULT; |
|
END C74401Q; |
/c730a01.a
0,0 → 1,176
-- C730A01.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that a tagged type declared in a package specification |
-- may be passed as a generic formal (tagged) private type to a generic |
-- package declaration. Check that the formal type may be extended with |
-- a private extension in the generic package. |
-- |
-- Check that, in the instance, the private extension inherits the |
-- user-defined primitive subprograms of the tagged actual. |
-- |
-- TEST DESCRIPTION: |
-- Declare a tagged type and an associated primitive subprogram in a |
-- package specification (foundation code). Declare a generic package |
-- which takes a tagged type as a formal parameter, and then extends |
-- it with a private extension (foundation code). |
-- |
-- Instantiate the generic package with the tagged type from the first |
-- package (the "generic" extension should now have inherited |
-- the primitive subprogram of the tagged type from the first |
-- package). |
-- |
-- In the main program, call the primitive subprogram inherited by the |
-- "generic" extension, and verify the correctness of the components. |
-- |
-- TEST FILES: |
-- The following files comprise this test: |
-- |
-- F730A000.A |
-- F730A001.A |
-- => C730A01.A |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- |
--! |
|
|
with F730A001; -- Book definitions. |
package C730A01_0 is -- Raw data to be used in creating book elements. |
|
|
Book_Count : constant := 3; |
|
subtype Number_Of_Books is Integer range 1 .. Book_Count; |
|
type Data_List is array (Number_Of_Books) of F730A001.Text_Ptr; |
|
Title_List : Data_List := (new String'("Wuthering Heights"), |
new String'("Heart of Darkness"), |
new String'("Ulysses")); |
|
Author_List : Data_List := (new String'("Bronte, Emily"), |
new String'("Conrad, Joseph"), |
new String'("Joyce, James")); |
|
end C730A01_0; |
|
|
--==================================================================-- |
|
|
|
|
--==================================================================-- |
|
|
-- Library-level instantiation. Actual parameter is tagged record. |
|
with F730A001; -- Book definitions. |
with F730A000; -- Singly-linked list abstraction. |
package C730A01_1 is new F730A000 (Parent_Type => F730A001.Book_Type); |
|
|
--==================================================================-- |
|
|
with Report; |
|
with F730A001; -- Book definitions. |
with C730A01_0; -- Raw book data. |
with C730A01_1; -- Instance. |
|
use F730A001; -- Primitive operations of Book_Type directly visible. |
use C730A01_1; -- Operations inherited by Node_Type directly visible. |
|
procedure C730A01 is |
|
|
List_Of_Books : Priv_Node_Ptr := null; -- Head of linked list of books. |
|
|
--========================================================-- |
|
|
procedure Create_List (Title, Author : in C730A01_0.Data_List; |
Head : in out Priv_Node_Ptr) is |
|
Book : Priv_Node_Type; -- Object of extended type. |
Book_Ptr : Priv_Node_Ptr; |
|
begin |
for I in C730A01_0.Number_Of_Books loop |
Create_Book (Title (I), Author (I), Book); -- Call inherited |
-- operation. |
Book_Ptr := new Priv_Node_Type'(Book); |
Add (Book_Ptr, Head); |
end loop; |
end Create_List; |
|
|
--========================================================-- |
|
|
function Bad_List_Contents return Boolean is |
Book1_Ptr : Priv_Node_Ptr; |
Book2_Ptr : Priv_Node_Ptr; |
Book3_Ptr : Priv_Node_Ptr; |
begin |
Remove (List_Of_Books, Book1_Ptr); |
Remove (List_Of_Books, Book2_Ptr); |
Remove (List_Of_Books, Book3_Ptr); |
return (Book1_Ptr.Title.all /= "Ulysses" or -- Inherited |
Book1_Ptr.Author.all /= "Joyce, James" or -- components |
Book2_Ptr.Title.all /= "Heart of Darkness" or -- should still |
Book2_Ptr.Author.all /= "Conrad, Joseph" or -- be visible in |
Book3_Ptr.Title.all /= "Wuthering Heights" or -- private |
Book3_Ptr.Author.all /= "Bronte, Emily"); -- extension. |
|
end Bad_List_Contents; |
|
|
--========================================================-- |
|
|
begin -- Main program. |
|
Report.Test ("C730A01", "Inheritance of primitive operations: private " & |
"extension of formal tagged private type; actual is " & |
"an ultimate ancestor type"); |
|
-- Create linked list using inherited operation: |
Create_List (C730A01_0.Title_List, C730A01_0.Author_List, List_Of_Books); |
|
-- Verify results: |
if Bad_List_Contents then |
Report.Failed ("Wrong values after call to inherited operation"); |
end if; |
|
Report.Result; |
|
end C730A01; |
/c730a02.a
0,0 → 1,252
-- C730A02.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that a private extension (declared in a package specification) of |
-- a tagged type (declared in a different package specification) may be |
-- passed as a generic formal (tagged) private type to a generic package |
-- declaration. Check that the formal type may be further extended with a |
-- private extension in the generic package. |
-- |
-- Check that the (visible) components inherited by the "generic" |
-- extension are visible outside the generic package. |
-- |
-- Check that, in the instance, the private extension inherits the |
-- user-defined primitive subprograms of the tagged actual, including |
-- those inherited by the actual from its parent. |
-- |
-- TEST DESCRIPTION: |
-- Declare a tagged type and an associated primitive subprogram in a |
-- package specification (foundation code). Declare a private extension |
-- of the tagged type and an associated primitive subprogram in a second |
-- package specification. Declare a generic package which takes a tagged |
-- type as a formal parameter, and then extends it with a private |
-- extension (foundation code). |
-- |
-- Instantiate the generic package with the private extension from the |
-- second package (the "generic" extension should now have inherited |
-- the primitive subprograms of the private extension from the second |
-- package). |
-- |
-- In the main program, call the primitive subprograms inherited by the |
-- "generic" extension. There are two: (1) Create_Book, declared for |
-- the root tagged type in the first package (inherited by the private |
-- extension of the second package, and then in turn by the "generic" |
-- extension), and (2) Update_Pages, declared for the private extension |
-- in the second package. Verify the correctness of the components. |
-- |
-- TEST FILES: |
-- The following files comprise this test: |
-- |
-- F730A000.A |
-- F730A001.A |
-- => C730A02.A |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- |
--! |
|
with F730A001; -- Book definitions. |
package C730A02_0 is -- Extended book abstraction. |
|
|
type Detailed_Book_Type is new F730A001.Book_Type -- Private ext. |
with private; -- of root tagged |
-- type. |
|
-- Inherits Create_Book from Book_Type. |
|
procedure Update_Pages (Book : in out Detailed_Book_Type; -- Primitive op. |
Pages : in Natural); -- of extension. |
|
|
-- The following function is needed to verify the value of the |
-- extension's private component. It will be inherited by extensions |
-- of Detailed_Book_Type. |
|
function Get_Pages (Book : in Detailed_Book_Type) return Natural; |
|
private |
|
type Detailed_Book_Type is new F730A001.Book_Type with record |
Pages : Natural; |
end record; |
|
end C730A02_0; |
|
|
--==================================================================-- |
|
|
package body C730A02_0 is |
|
|
procedure Update_Pages (Book : in out Detailed_Book_Type; |
Pages : in Natural) is |
begin |
Book.Pages := Pages; |
end Update_Pages; |
|
|
function Get_Pages (Book : in Detailed_Book_Type) return Natural is |
begin |
return (Book.Pages); |
end Get_Pages; |
|
|
end C730A02_0; |
|
|
--==================================================================-- |
|
|
with F730A001; -- Book definitions. |
package C730A02_1 is -- Raw data to be used in creating book elements. |
|
|
Book_Count : constant := 3; |
|
subtype Number_Of_Books is Integer range 1 .. Book_Count; |
|
type Data_List is array (Number_Of_Books) of F730A001.Text_Ptr; |
type Page_Counts is array (Number_Of_Books) of Natural; |
|
Title_List : Data_List := (new String'("Wuthering Heights"), |
new String'("Heart of Darkness"), |
new String'("Ulysses")); |
|
Author_List : Data_List := (new String'("Bronte, Emily"), |
new String'("Conrad, Joseph"), |
new String'("Joyce, James")); |
|
Page_List : Page_Counts := (237, 215, 456); |
|
end C730A02_1; |
|
|
-- No body for C730A02_1. |
|
|
--==================================================================-- |
|
|
-- Library-level instantiation. Actual parameter is private extension. |
|
with C730A02_0; -- Extended book abstraction. |
with F730A000; -- Singly-linked list abstraction. |
package C730A02_2 is new F730A000 |
(Parent_Type => C730A02_0.Detailed_Book_Type); |
|
|
--==================================================================-- |
|
|
with Report; |
|
with C730A02_0; -- Extended book abstraction. |
with C730A02_1; -- Raw book data. |
with C730A02_2; -- Instance. |
|
use C730A02_0; -- Primitive operations of Detailed_Book_Type directly visible. |
use C730A02_2; -- Operations inherited by Priv_Node_Type directly visible. |
|
procedure C730A02 is |
|
|
List_Of_Books : Priv_Node_Ptr := null; -- Head of linked list of books. |
|
|
--========================================================-- |
|
|
procedure Create_List (Title, Author : in C730A02_1.Data_List; |
Pages : in C730A02_1.Page_Counts; |
Head : in out Priv_Node_Ptr) is |
|
Book : Priv_Node_Type; -- Object of extended type. |
Book_Ptr : Priv_Node_Ptr; |
|
begin |
for I in C730A02_1.Number_Of_Books loop |
Create_Book (Title (I), Author (I), Book); -- Call twice-inherited |
-- operation. |
Update_Pages (Book, Pages (I)); -- Call inherited op. |
Book_Ptr := new Priv_Node_Type'(Book); |
Add (Book_Ptr, Head); |
end loop; |
end Create_List; |
|
|
--========================================================-- |
|
|
function Bad_List_Contents return Boolean is |
Book1_Ptr : Priv_Node_Ptr; |
Book2_Ptr : Priv_Node_Ptr; |
Book3_Ptr : Priv_Node_Ptr; |
begin |
|
Remove (List_Of_Books, Book1_Ptr); |
Remove (List_Of_Books, Book2_Ptr); |
Remove (List_Of_Books, Book3_Ptr); |
|
return (Book1_Ptr.Title.all /= "Ulysses" or -- Inherited |
Book1_Ptr.Author.all /= "Joyce, James" or -- components |
Book2_Ptr.Title.all /= "Heart of Darkness" or -- should still |
Book2_Ptr.Author.all /= "Conrad, Joseph" or -- be visible |
Book3_Ptr.Title.all /= "Wuthering Heights" or -- in private |
Book3_Ptr.Author.all /= "Bronte, Emily" or -- "generic" |
-- extension. |
-- Call inherited operations using dereferenced pointers. |
Get_Pages (Book1_Ptr.all) /= 456 or |
Get_Pages (Book2_Ptr.all) /= 215 or |
Get_Pages (Book3_Ptr.all) /= 237); |
|
end Bad_List_Contents; |
|
|
--========================================================-- |
|
|
begin -- Main program. |
|
Report.Test ("C730A02", "Inheritance of primitive operations: private " & |
"extension of formal tagged private type; actual is " & |
"a private extension"); |
|
-- Create linked list using inherited operation: |
Create_List (C730A02_1.Title_List, C730A02_1.Author_List, |
C730A02_1.Page_List, List_Of_Books); |
|
-- Verify results: |
if Bad_List_Contents then |
Report.Failed ("Wrong values after call to inherited operations"); |
end if; |
|
Report.Result; |
|
end C730A02; |
/c72002a.ada
0,0 → 1,229
-- C72002A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT THE DECLARATIVE ITEMS IN A PACKAGE SPECIFICATION ARE |
-- ELABORATED IN THE ORDER DECLARED. |
|
-- HISTORY: |
-- DHH 03/09/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
PROCEDURE C72002A IS |
|
A : INTEGER := 0; |
TYPE ORDER_ARRAY IS ARRAY(1 .. 14) OF INTEGER; |
OBJECT_ARRAY : ORDER_ARRAY; |
TYPE REAL IS DIGITS 4; |
TYPE ENUM IS (RED,YELLOW,BLUE); |
|
TYPE ARR IS ARRAY(1 ..2) OF BOOLEAN; |
D : ARR := (TRUE, TRUE); |
E : ARR := (FALSE, FALSE); |
|
TYPE REC IS |
RECORD |
I : INTEGER; |
END RECORD; |
B : REC := (I => IDENT_INT(1)); |
C : REC := (I => IDENT_INT(2)); |
|
FUNCTION GIVEN_ORDER(X : INTEGER) RETURN INTEGER IS |
Y : INTEGER; |
BEGIN |
Y := X + 1; |
RETURN Y; |
END GIVEN_ORDER; |
|
FUNCTION BOOL(X : INTEGER) RETURN BOOLEAN IS |
BEGIN |
IF X = IDENT_INT(1) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN TRUE; |
ELSIF X = IDENT_INT(8) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN FALSE; |
END IF; |
END BOOL; |
|
FUNCTION INT(X : INTEGER) RETURN INTEGER IS |
BEGIN |
IF X = IDENT_INT(2) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN IDENT_INT(1); |
ELSIF X = IDENT_INT(9) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN IDENT_INT(2); |
END IF; |
END INT; |
|
FUNCTION FLOAT(X : INTEGER) RETURN REAL IS |
BEGIN |
IF X = IDENT_INT(3) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN 1.0; |
ELSIF X = IDENT_INT(10) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN 2.0; |
END IF; |
END FLOAT; |
|
FUNCTION CHAR(X : INTEGER) RETURN CHARACTER IS |
BEGIN |
IF X = IDENT_INT(4) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN 'A'; |
ELSIF X = IDENT_INT(11) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN 'Z'; |
END IF; |
END CHAR; |
|
FUNCTION ENUMR(X : INTEGER) RETURN ENUM IS |
BEGIN |
IF X = IDENT_INT(5) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN RED; |
ELSIF X = IDENT_INT(12) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN YELLOW; |
END IF; |
END ENUMR; |
|
FUNCTION ARRY(X : INTEGER) RETURN ARR IS |
BEGIN |
IF X = IDENT_INT(6) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN D; |
ELSIF X = IDENT_INT(13) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN E; |
END IF; |
END ARRY; |
|
FUNCTION RECOR(X : INTEGER) RETURN REC IS |
BEGIN |
IF X = IDENT_INT(7) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN B; |
ELSIF X = IDENT_INT(14) THEN |
A := GIVEN_ORDER(A); |
OBJECT_ARRAY(X) := A; |
RETURN C; |
END IF; |
END RECOR; |
|
PACKAGE PACK IS |
A : BOOLEAN := BOOL(1); |
B : INTEGER := INT(2); |
C : REAL := FLOAT(3); |
D : CHARACTER := CHAR(4); |
E : ENUM := ENUMR(5); |
F : ARR := ARRY(6); |
G : REC := RECOR(7); |
H : BOOLEAN := BOOL(8); |
I : INTEGER := INT(9); |
J : REAL := FLOAT(10); |
K : CHARACTER := CHAR(11); |
L : ENUM := ENUMR(12); |
M : ARR := ARRY(13); |
N : REC := RECOR(14); |
END PACK; |
|
BEGIN |
TEST("C72002A", "CHECK THAT THE DECLARATIVE ITEMS IN A PACKAGE " & |
"SPECIFICATION ARE ELABORATED IN THE ORDER " & |
"DECLARED"); |
|
IF OBJECT_ARRAY(1) /= IDENT_INT(1) THEN |
FAILED("BOOLEAN 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(2) /= IDENT_INT(2) THEN |
FAILED("INTEGER 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(3) /= IDENT_INT(3) THEN |
FAILED("REAL 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(4) /= IDENT_INT(4) THEN |
FAILED("CHARACTER 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(5) /= IDENT_INT(5) THEN |
FAILED("ENUMERATION 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(6) /= IDENT_INT(6) THEN |
FAILED("ARRAY 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(7) /= IDENT_INT(7) THEN |
FAILED("RECORD 1 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(8) /= IDENT_INT(8) THEN |
FAILED("BOOLEAN 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(9) /= IDENT_INT(9) THEN |
FAILED("INTEGER 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(10) /= IDENT_INT(10) THEN |
FAILED("REAL 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(11) /= IDENT_INT(11) THEN |
FAILED("CHARACTER 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(12) /= IDENT_INT(12) THEN |
FAILED("ENUMERATION 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(13) /= IDENT_INT(13) THEN |
FAILED("ARRAY 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
IF OBJECT_ARRAY(14) /= IDENT_INT(14) THEN |
FAILED("RECORD 2 ELABORATED OUT OF ORDER"); |
END IF; |
|
RESULT; |
END C72002A; |
/c73002a.ada
0,0 → 1,110
-- C73002A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT THE STATEMENTS IN A PACKAGE BODY ARE EXECUTED AFTER THE |
-- ELABORATION OF THE DECLARATIONS (IN SPEC AND IN BODY). |
|
|
-- RM 05/15/81 |
-- JBG 9/21/83 |
|
WITH REPORT; |
PROCEDURE C73002A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST( "C73002A" , "CHECK: EXECUTION OF STATEMENTS IN A PACKAGE " & |
"BODY FOLLOWS ELABORATION OF THE DECLARATIONS"); |
|
DECLARE |
|
PACKAGE P1 IS |
|
A : INTEGER := IDENT_INT(7); |
|
PACKAGE P2 IS |
B : INTEGER := IDENT_INT(11); |
END P2; |
|
END P1; |
|
|
PACKAGE BODY P1 IS -- A AA B BB |
|
AA : INTEGER := IDENT_INT(7); -- 7 7 11 (11) |
|
PACKAGE BODY P2 IS |
BB : INTEGER := IDENT_INT(11);-- 7 11 11 |
BEGIN |
|
B := 2*B ; -- 7 7 22 11 |
BB := 2*BB; -- 7 7 22 22 |
A := 5*A ; -- 35 7 22 22 |
AA := 2*AA; -- 35 14 22 22 |
|
IF BB /= 22 OR |
AA /= 14 OR |
A /= 35 OR |
B /= 22 |
THEN |
FAILED( "ASSIGNED VALUES INCORRECT - 1" ); |
END IF; |
|
END P2; |
|
BEGIN |
|
A := A + 20; -- 55 14 22 22 |
AA := AA + 20; -- 55 34 22 22 |
|
IF AA /= 34 OR |
A /= 55 OR |
P2.B /= 22 |
THEN |
FAILED( "ASSIGNED VALUES INCORRECT - 2" ); |
END IF; |
|
END P1; |
|
|
USE P1; |
USE P2; |
|
BEGIN |
|
IF A /= 55 OR |
B /= 22 |
THEN |
FAILED( "ASSIGNED VALUES INCORRECT - 3" ); |
END IF; |
|
END; |
|
|
RESULT; |
|
|
END C73002A; |
/c74210a.ada
0,0 → 1,117
-- C74210A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT OPERATOR SYMBOLS OVERLOADED IN A PACKAGE ARE |
-- USED AND DERIVED IN PREFERENCE TO THOSE OF THE PARENT OF A DERIVED |
-- PRIVATE TYPE. |
|
-- CHECK THAT OPERATOR DEFINITIONS FOR A PRIVATE TYPE MAY BE |
-- OVERLOADED OUTSIDE THE PACKAGE. |
|
-- CHECK THAT EQUALITY CAN BE DEFINED FOR LIMITED TYPES AND COMPOSITE |
-- TYPES WITH LIMITED COMPONENTS. |
|
-- DAT 5/11/81 |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74210A IS |
BEGIN |
TEST ("C74210A", "OVERLOADED OPERATORS FOR PRIVATE TYPES"); |
|
DECLARE |
PACKAGE P IS |
TYPE T IS PRIVATE; |
FUNCTION "+" (X, Y : T) RETURN T; |
ONE, TWO : CONSTANT T; |
|
TYPE L IS LIMITED PRIVATE; |
TYPE A IS ARRAY (0 .. 0) OF L; |
TYPE R IS RECORD |
C : L; |
END RECORD; |
FUNCTION "=" (X, Y : L) RETURN BOOLEAN; |
PRIVATE |
TYPE T IS NEW INTEGER; |
ONE : CONSTANT T := T(IDENT_INT(1)); |
TWO : CONSTANT T := T(IDENT_INT(2)); |
TYPE L IS (ENUM); |
END P; |
USE P; |
|
VR : R; |
VA : A; |
|
PACKAGE BODY P IS |
FUNCTION "+" (X, Y : T) RETURN T IS |
BEGIN |
RETURN 1; |
END "+"; |
|
FUNCTION "=" (X, Y : L) RETURN BOOLEAN IS |
BEGIN |
RETURN IDENT_BOOL(FALSE); |
END "="; |
BEGIN |
VR := (C => ENUM); |
VA := (0 => VR.C); |
END P; |
BEGIN |
IF ONE + TWO /= ONE THEN |
FAILED ("WRONG ""+"" OPERATOR"); |
END IF; |
|
DECLARE |
TYPE NEW_T IS NEW T; |
|
FUNCTION "=" (X, Y : A) RETURN BOOLEAN; |
FUNCTION "=" (X, Y : R) RETURN BOOLEAN; |
|
FUNCTION "+" (X, Y : T) RETURN T IS |
BEGIN |
RETURN TWO; |
END "+"; |
|
FUNCTION "=" (X, Y : A) RETURN BOOLEAN IS |
BEGIN |
RETURN X(0) = Y(0); |
END "="; |
|
FUNCTION "=" (X, Y : R) RETURN BOOLEAN IS |
BEGIN |
RETURN X.C = Y.C; |
END "="; |
BEGIN |
IF ONE + TWO /= TWO THEN |
FAILED ("WRONG DERIVED ""+"" OPERATOR"); |
END IF; |
|
IF VR = VR OR VA = VA THEN |
FAILED ("CANNOT OVERLOAD ""="" CORRECTLY"); |
END IF; |
END; |
END; |
|
RESULT; |
END C74210A; |
/c74004a.ada
0,0 → 1,375
-- C74004A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT OPERATIONS DEPENDING ON THE FULL DECLARATION OF A |
-- PRIVATE TYPE ARE AVAILABLE WITHIN THE PACKAGE BODY. |
|
-- HISTORY: |
-- BCB 04/05/88 CREATED ORIGINAL TEST. |
-- PWN 01/31/95 REMOVED INCONSISTENCIES WITH ADA 9X. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74004A IS |
|
PACKAGE P IS |
TYPE PR IS PRIVATE; |
TYPE ARR1 IS LIMITED PRIVATE; |
TYPE ARR2 IS PRIVATE; |
TYPE REC (D : INTEGER) IS PRIVATE; |
TYPE ACC IS PRIVATE; |
TYPE TSK IS LIMITED PRIVATE; |
TYPE FLT IS LIMITED PRIVATE; |
TYPE FIX IS LIMITED PRIVATE; |
|
TASK TYPE T IS |
ENTRY ONE(V : IN OUT INTEGER); |
END T; |
|
PROCEDURE CHECK (V : ARR2); |
PRIVATE |
TYPE PR IS NEW INTEGER; |
|
TYPE ARR1 IS ARRAY(1..5) OF INTEGER; |
|
TYPE ARR2 IS ARRAY(1..5) OF BOOLEAN; |
|
TYPE REC (D : INTEGER) IS RECORD |
COMP1 : INTEGER; |
COMP2 : BOOLEAN; |
END RECORD; |
|
TYPE ACC IS ACCESS INTEGER; |
|
TYPE TSK IS NEW T; |
|
TYPE FLT IS DIGITS 5; |
|
TYPE FIX IS DELTA 2.0**(-1) RANGE -100.0 .. 100.0; |
END P; |
|
PACKAGE BODY P IS |
X1, X2, X3 : PR; |
BOOL : BOOLEAN := IDENT_BOOL(FALSE); |
VAL : INTEGER := IDENT_INT(0); |
FVAL : FLOAT := 0.0; |
ST : STRING(1..2); |
O1 : ARR1 := (1,2,3,4,5); |
Y1 : ARR2 := (FALSE,TRUE,FALSE,TRUE,FALSE); |
Y2 : ARR2 := (OTHERS => TRUE); |
Y3 : ARR2 := (OTHERS => FALSE); |
Z1 : REC(0) := (0,1,FALSE); |
W1, W2 : ACC := NEW INTEGER'(0); |
V1 : TSK; |
|
TASK BODY T IS |
BEGIN |
ACCEPT ONE(V : IN OUT INTEGER) DO |
V := IDENT_INT(10); |
END ONE; |
END T; |
|
PROCEDURE CHECK (V : ARR2) IS |
BEGIN |
IF V /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
FAILED ("IMPROPER VALUE PASSED AS AGGREGATE"); |
END IF; |
END CHECK; |
BEGIN |
TEST ("C74004A", "CHECK THAT OPERATIONS DEPENDING ON THE " & |
"FULL DECLARATION OF A PRIVATE TYPE ARE " & |
"AVAILABLE WITHIN THE PACKAGE BODY"); |
|
X1 := 10; |
X2 := 5; |
|
X3 := X1 + X2; |
|
IF X3 /= 15 THEN |
FAILED ("IMPROPER RESULT FROM ADDITION OPERATOR"); |
END IF; |
|
X3 := X1 - X2; |
|
IF X3 /= 5 THEN |
FAILED ("IMPROPER RESULT FROM SUBTRACTION OPERATOR"); |
END IF; |
|
X3 := X1 * X2; |
|
IF X3 /= 50 THEN |
FAILED ("IMPROPER RESULT FROM MULTIPLICATION OPERATOR"); |
END IF; |
|
X3 := X1 / X2; |
|
IF X3 /= 2 THEN |
FAILED ("IMPROPER RESULT FROM DIVISION OPERATOR"); |
END IF; |
|
X3 := X1 ** 2; |
|
IF X3 /= 100 THEN |
FAILED ("IMPROPER RESULT FROM EXPONENTIATION OPERATOR"); |
END IF; |
|
BOOL := X1 < X2; |
|
IF BOOL THEN |
FAILED ("IMPROPER RESULT FROM LESS THAN OPERATOR"); |
END IF; |
|
BOOL := X1 > X2; |
|
IF NOT BOOL THEN |
FAILED ("IMPROPER RESULT FROM GREATER THAN OPERATOR"); |
END IF; |
|
BOOL := X1 <= X2; |
|
IF BOOL THEN |
FAILED ("IMPROPER RESULT FROM LESS THAN OR EQUAL TO " & |
"OPERATOR"); |
END IF; |
|
BOOL := X1 >= X2; |
|
IF NOT BOOL THEN |
FAILED ("IMPROPER RESULT FROM GREATER THAN OR EQUAL " & |
"TO OPERATOR"); |
END IF; |
|
X3 := X1 MOD X2; |
|
IF X3 /= 0 THEN |
FAILED ("IMPROPER RESULT FROM MOD OPERATOR"); |
END IF; |
|
X3 := X1 REM X2; |
|
IF X3 /= 0 THEN |
FAILED ("IMPROPER RESULT FROM REM OPERATOR"); |
END IF; |
|
X3 := ABS(X1); |
|
IF X3 /= 10 THEN |
FAILED ("IMPROPER RESULT FROM ABS OPERATOR - 1"); |
END IF; |
|
X1 := -10; |
|
X3 := ABS(X1); |
|
IF X3 /= 10 THEN |
FAILED ("IMPROPER RESULT FROM ABS OPERATOR - 2"); |
END IF; |
|
X3 := PR'BASE'FIRST; |
|
IF X3 /= PR(INTEGER'FIRST) THEN |
FAILED ("IMPROPER RESULT FROM 'BASE'FIRST"); |
END IF; |
|
X3 := PR'FIRST; |
|
IF X3 /= PR(INTEGER'FIRST) THEN |
FAILED ("IMPROPER RESULT FROM 'FIRST"); |
END IF; |
|
VAL := PR'WIDTH; |
|
IF NOT EQUAL(VAL,INTEGER'WIDTH) THEN |
FAILED ("IMPROPER RESULT FROM 'WIDTH"); |
END IF; |
|
VAL := PR'POS(X3); |
|
IF NOT EQUAL(VAL,INTEGER'FIRST) THEN |
FAILED ("IMPROPER RESULT FROM 'POS"); |
END IF; |
|
X3 := PR'VAL(VAL); |
|
IF X3 /= PR(INTEGER'FIRST) THEN |
FAILED ("IMPROPER RESULT FROM 'VAL"); |
END IF; |
|
X3 := PR'SUCC(X2); |
|
IF X3 /= 6 THEN |
FAILED ("IMPROPER RESULT FROM 'SUCC"); |
END IF; |
|
X3 := PR'PRED(X2); |
|
IF X3 /= 4 THEN |
FAILED ("IMPROPER RESULT FROM 'PRED"); |
END IF; |
|
ST := PR'IMAGE(X3); |
|
IF ST /= INTEGER'IMAGE(INTEGER(X3)) THEN |
FAILED ("IMPROPER RESULT FROM 'IMAGE"); |
END IF; |
|
X3 := PR'VALUE(ST); |
|
IF X3 /= PR(INTEGER'VALUE(ST)) THEN |
FAILED ("IMPROPER RESULT FROM 'VALUE"); |
END IF; |
|
CHECK ((TRUE,FALSE,TRUE,FALSE,TRUE)); |
|
IF O1(2) /= IDENT_INT(2) THEN |
FAILED ("IMPROPER VALUE FROM INDEXING"); |
END IF; |
|
IF O1(2..4) /= (2,3,4) THEN |
FAILED ("IMPROPER VALUES FROM SLICING"); |
END IF; |
|
IF VAL IN O1'RANGE THEN |
FAILED ("IMPROPER RESULT FROM 'RANGE"); |
END IF; |
|
VAL := O1'LENGTH; |
|
IF NOT EQUAL(VAL,5) THEN |
FAILED ("IMPROPER RESULT FROM 'LENGTH"); |
END IF; |
|
Y3 := Y1(1..2) & Y2(3..5); |
|
IF Y3 /= (FALSE,TRUE,TRUE,TRUE,TRUE) THEN |
FAILED ("IMPROPER RESULT FROM CATENATION"); |
END IF; |
|
Y3 := NOT Y1; |
|
IF Y3 /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
FAILED ("IMPROPER RESULT FROM NOT OPERATOR"); |
END IF; |
|
Y3 := Y1 AND Y2; |
|
IF Y3 /= (FALSE,TRUE,FALSE,TRUE,FALSE) THEN |
FAILED ("IMPROPER RESULT FROM AND OPERATOR"); |
END IF; |
|
Y3 := Y1 OR Y2; |
|
IF Y3 /= (TRUE,TRUE,TRUE,TRUE,TRUE) THEN |
FAILED ("IMPROPER RESULT FROM OR OPERATOR"); |
END IF; |
|
Y3 := Y1 XOR Y2; |
|
IF Y3 /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
FAILED ("IMPROPER RESULT FROM XOR OPERATOR"); |
END IF; |
|
VAL := Z1.COMP1; |
|
IF NOT EQUAL(VAL,1) THEN |
FAILED ("IMPROPER RESULT FROM SELECTION OF RECORD " & |
"COMPONENTS"); |
END IF; |
|
W1 := NEW INTEGER'(0); |
|
IF NOT EQUAL(W1.ALL,0) THEN |
FAILED ("IMPROPER RESULT FROM ALLOCATION"); |
END IF; |
|
W1 := NULL; |
|
IF W1 /= NULL THEN |
FAILED ("IMPROPER RESULT FROM NULL LITERAL"); |
END IF; |
|
VAL := W2.ALL; |
|
IF NOT EQUAL(VAL,0) THEN |
FAILED ("IMPROPER RESULT FROM SELECTED COMPONENT"); |
END IF; |
|
BOOL := V1'CALLABLE; |
|
IF NOT BOOL THEN |
FAILED ("IMPROPER RESULT FROM 'CALLABLE"); |
END IF; |
|
BOOL := V1'TERMINATED; |
|
IF BOOL THEN |
FAILED ("IMPROPER RESULT FROM 'TERMINATED"); |
END IF; |
|
V1.ONE(VAL); |
|
IF NOT EQUAL(VAL,10) THEN |
FAILED ("IMPROPER RESULT RETURNED FROM ENTRY SELECTION"); |
END IF; |
|
IF NOT (FLT(1.0) IN FLT) THEN |
FAILED ("IMPROPER RESULT FROM IMPLICIT CONVERSION"); |
END IF; |
|
VAL := FLT'DIGITS; |
|
IF NOT EQUAL(VAL,5) THEN |
FAILED ("IMPROPER RESULT FROM 'DIGITS"); |
END IF; |
|
BOOL := FLT'MACHINE_ROUNDS; |
|
BOOL := FLT'MACHINE_OVERFLOWS; |
|
VAL := FLT'MACHINE_RADIX; |
|
VAL := FLT'MACHINE_MANTISSA; |
|
VAL := FLT'MACHINE_EMAX; |
|
VAL := FLT'MACHINE_EMIN; |
|
FVAL := FIX'DELTA; |
|
IF FVAL /= 2.0**(-1) THEN |
FAILED ("IMPROPER RESULT FROM 'DELTA"); |
END IF; |
|
VAL := FIX'FORE; |
|
VAL := FIX'AFT; |
|
END P; |
|
USE P; |
|
BEGIN |
RESULT; |
END C74004A; |
/c74402a.ada
0,0 → 1,154
-- C74402A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT A SUBPROGRAM PARAMETER OF A LIMITED TYPE MAY HAVE A |
-- DEFAULT EXPRESSION, EVEN IF THE SUBPROGRAM IS DECLARED OUTSIDE |
-- THE PACKAGE THAT DECLARES THE LIMITED TYPE. |
-- (SEE ALSO 6.4.2/T1 FOR TESTS OF OTHER LIMITED TYPES.) |
|
-- DSJ 5/6/83 |
-- SPS 10/24/83 |
|
WITH REPORT; |
PROCEDURE C74402A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST("C74402A", "CHECK THAT A SUBPROGRAM PARAMETER OF A LIMITED " & |
"TYPE MAY HAVE A DEFAULT EXPRESSION, EVEN IF " & |
"THE SUBPROGRAM IS DECLARED OUTSIDE THE PACKAGE " & |
"THAT DECLARES THE LIMITED TYPE"); |
|
DECLARE |
|
PACKAGE PACK1 IS |
|
TYPE LP1 IS LIMITED PRIVATE; |
TYPE LP2 IS ARRAY (1 .. 2) OF LP1; |
TYPE LP3 IS |
RECORD |
C1, C2 : LP2; |
END RECORD; |
|
FUNCTION F1 RETURN LP1; |
FUNCTION F2 RETURN LP2; |
FUNCTION F3 RETURN LP3; |
|
PROCEDURE G1 (X : LP1 := F1); -- LEGAL |
PROCEDURE G2 (X : LP2 := F2); -- LEGAL |
PROCEDURE G3 (X : LP3 := F3); -- LEGAL |
|
PRIVATE |
|
TYPE LP1 IS NEW INTEGER; |
|
END PACK1; |
|
PACKAGE BODY PACK1 IS |
|
FUNCTION F1 RETURN LP1 IS |
BEGIN |
RETURN LP1'(1); |
END F1; |
|
FUNCTION F2 RETURN LP2 IS |
BEGIN |
RETURN LP2'(2,3); |
END F2; |
|
FUNCTION F3 RETURN LP3 IS |
BEGIN |
RETURN LP3'((4,5),(6,7)); |
END F3; |
|
PROCEDURE G1 (X : LP1 := F1) IS |
BEGIN |
IF X /= LP1'(1) THEN |
FAILED("WRONG DEFAULT VALUE - LP1"); |
END IF; |
END G1; |
|
PROCEDURE G2 (X : LP2 := F2) IS |
BEGIN |
IF X /= LP2'(2,3) THEN |
FAILED("WRONG DEFAULT VALUE - LP2"); |
END IF; |
END G2; |
|
PROCEDURE G3 (X : LP3 := F3) IS |
BEGIN |
IF X /= LP3'((4,5),(6,7)) THEN |
FAILED("WRONG DEFAULT VALUE - LP3"); |
END IF; |
END G3; |
|
BEGIN |
|
G1; -- LEGAL, DEFAULT USED |
G2; -- LEGAL, DEFAULT USED |
G3; -- LEGAL, DEFAULT USED |
|
G1(F1); -- LEGAL |
G2(F2); -- LEGAL |
G3(F3); -- LEGAL |
|
END PACK1; |
|
USE PACK1; |
|
PROCEDURE G4 (X : LP1 := F1) IS |
BEGIN |
G1; -- LEGAL, DEFAULT USED |
G1(X); |
END G4; |
|
PROCEDURE G5 (X : LP2 := F2) IS |
BEGIN |
G2; -- LEGAL, DEFAULT USED |
G2(X); |
END G5; |
|
PROCEDURE G6 (X : LP3 := F3) IS |
BEGIN |
G3; -- DEFAULT USED |
G3(X); |
END G6; |
|
BEGIN |
|
G4; -- LEGAL, DEFAULT USED |
G5; -- LEGAL, DEFAULT USED |
G6; -- LEGAL, DEFAULT USED |
|
G4(F1); -- LEGAL |
G5(F2); -- LEGAL |
G6(F3); -- LEGAL |
|
END; |
|
RESULT; |
|
END C74402A; |
/c74402b.ada
0,0 → 1,103
-- C74402B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT INITIALIZATION OF IN PARAMETERS THAT ARE OF |
-- LIMITED PRIVATE TYPE IS PERMITTED. |
-- (SEE ALSO 6.4.2/T1 FOR TESTS OF OTHER LIMITED TYPES.) |
|
-- DAS 1/21/81 |
-- ABW 6/30/82 |
-- BHS 7/10/84 |
|
WITH REPORT; |
PROCEDURE C74402B IS |
|
USE REPORT; |
|
BEGIN |
|
TEST( "C74402B" , "CHECK THAT INITIALIZATION OF IN PARAMETERS " & |
"OF LIMITED PRIVATE TYPE IS PERMITTED" ); |
|
DECLARE |
|
PACKAGE PKG IS |
|
TYPE LPTYPE IS LIMITED PRIVATE; |
CLP : CONSTANT LPTYPE; |
XLP : CONSTANT LPTYPE; |
FUNCTION EQCLP (L : IN LPTYPE) RETURN BOOLEAN; |
FUNCTION EQXLP (L : IN LPTYPE) RETURN BOOLEAN; |
|
PRIVATE |
|
TYPE LPTYPE IS NEW INTEGER RANGE 0..127; |
CLP : CONSTANT LPTYPE := 127; |
XLP : CONSTANT LPTYPE := 0; |
|
END; |
|
PACKAGE BODY PKG IS |
|
FUNCTION EQCLP (L : IN LPTYPE) RETURN BOOLEAN IS |
BEGIN |
RETURN (L = CLP); |
END EQCLP; |
|
FUNCTION EQXLP (L : IN LPTYPE) RETURN BOOLEAN IS |
BEGIN |
RETURN (L = XLP); |
END EQXLP; |
|
END PKG; |
|
USE PKG; |
|
PROCEDURE PROC1 (Y : IN LPTYPE := CLP) IS |
BEGIN |
IF (EQCLP (Y)) THEN |
FAILED( "LIMITED PRIVATE NOT PASSED, " & |
"DEFAULT CLP EMPLOYED" ); |
ELSIF (NOT EQXLP (Y)) THEN |
FAILED( "NO LIMITED PRIVATE FOUND" ); |
END IF; |
END PROC1; |
|
PROCEDURE PROC2 (Y : IN LPTYPE := CLP) IS |
BEGIN |
IF (NOT EQCLP(Y)) THEN |
FAILED( "DEFAULT NOT EMPLOYED" ); |
END IF; |
END PROC2; |
|
BEGIN |
|
PROC1(XLP); |
PROC2; |
|
END; |
|
RESULT; |
|
END C74402B; |
/c74305a.ada
0,0 → 1,160
-- C74305A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT A DEFERRED CONSTANT CAN BE USED AS A DEFAULT |
-- INITIALIZATION FOR A PARAMETER OR AS A DEFAULT INITIA- |
-- LIZATION FOR A COMPONENT (NON GENERIC CASE). |
|
-- DAT 4/06/81 |
-- RM 5/21/81 |
-- SPS 8/23/82 |
-- SPS 2/10/83 |
-- SPS 10/20/83 |
-- EG 12/20/83 |
-- GJD 11/15/95 REMOVED ADA 95 INCOMPATIBILITY. |
|
WITH REPORT; |
|
PROCEDURE C74305A IS |
|
USE REPORT; |
|
PACKAGE PK IS |
TYPE T1 IS PRIVATE; |
TYPE T2 IS PRIVATE; |
C1 : CONSTANT T1; -- OK. |
|
PROCEDURE P1 (P : T1 := C1); -- OK. |
|
TYPE R1 IS RECORD |
C : T1 := C1; -- OK. |
END RECORD; |
PRIVATE |
PROCEDURE PROC2 (P : T1 := C1); -- OK. |
|
TYPE R2 IS RECORD |
C : T1 := C1; -- OK. |
D : INTEGER := C1'SIZE; -- OK. |
END RECORD; |
|
FUNCTION F1 (P : T1) RETURN T1; |
|
TYPE T1 IS NEW INTEGER; |
TYPE T2 IS ARRAY (1..2) OF INTEGER; -- OK. |
|
FUNCTION F2 (P : T1) RETURN T1; |
|
PROCEDURE P3 (P : T1 := C1+1); -- OK. |
|
PROCEDURE P4 (P : T1 := F1(C1)); |
|
TYPE R5 IS RECORD |
C : T1 := F2(C1); |
END RECORD; |
|
PROCEDURE P5 (P : T1 := C1+2) RENAMES P3; |
|
TYPE R3 IS RECORD |
C : T1 := C1; -- OK. |
END RECORD; |
|
C1 : CONSTANT T1 := 1; -- OK. |
C2 : CONSTANT T2 := (1,1); -- OK. |
END PK; |
|
USE PK; |
|
PACKAGE BODY PK IS |
|
R11 : R1; |
|
PROCEDURE P1 (P : T1 := C1) IS |
BEGIN |
IF ( P /= 1 ) THEN |
FAILED ("PARAMETER DEFAULT OF P1 NOT PROPERLY " & |
"INITIALIZED"); |
END IF; |
END P1; |
|
PROCEDURE PROC2 (P : T1 := C1) IS |
BEGIN NULL; END PROC2; |
|
PROCEDURE P3 (P : T1 := C1+1) IS |
BEGIN |
IF ( P /= 3 ) THEN |
FAILED ("PARAMETER DEFAULT OF P5 NOT PROPERLY " & |
"INITIALIZED"); |
END IF; |
END P3; |
|
FUNCTION F1 (P : T1) RETURN T1 IS |
BEGIN |
RETURN P+10; |
END F1; |
|
PROCEDURE P4 (P : T1 := F1(C1)) IS |
BEGIN |
IF ( P /= 11 ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED"); |
END IF; |
END P4; |
|
FUNCTION F2 (P : T1) RETURN T1 IS |
BEGIN |
RETURN P+20; |
END F2; |
|
BEGIN -- PK BODY. |
|
DECLARE |
|
R55 : R5; |
|
BEGIN |
TEST ("C74305A","CHECK THAT A DEFERRED CONSTANT CAN " & |
"BE USED AS A DEFAULT INITIALIZATION " & |
"FOR A PARAMETER OR AS A DEFAULT " & |
"INITIALIZATION FOR A COMPONENT (NON " & |
"GENERIC CASE)"); |
|
IF ( R11.C /= 1 ) THEN |
FAILED ("RECORD R11 NOT PROPERLY INITIALIZED"); |
END IF; |
|
P4; |
|
IF ( R55.C /= 21 ) THEN |
FAILED ("RECORD R55 NOT PROPERLY INITIALIZED"); |
END IF; |
|
P5; |
END; |
END PK; |
|
BEGIN |
|
P1; |
|
RESULT; |
END C74305A; |
/c74206a.ada
0,0 → 1,144
-- C74206A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT IF A COMPOSITE TYPE IS DECLARED IN THE PACKAGE AS A |
-- PRIVATE TYPE AND CONTAINS A COMPONENT OF THE PRIVATE TYPE, OPERATIONS |
-- OF THE COMPOSITE TYPE WHICH DO NOT DEPEND ON CHARACTERISTICS OF THE |
-- PRIVATE TYPE ARE AVAILABLE AFTER THE FULL DECLARATION OF THE PRIVATE |
-- TYPE, BUT BEFORE THE EARLIEST PLACE WITHIN THE IMMEDIATE SCOPE OF THE |
-- DECLARATION OF THE COMPOSITE TYPE THAT IS AFTER THE FULL DECLARATION |
-- OF THE PRIVATE TYPE. IN PARTICULAR, CHECK FOR THE FOLLOWING : |
|
-- 'FIRST, 'LAST, 'RANGE, AND 'LENGTH FOR ARRAY TYPES |
-- SELECTED COMPONENTS FOR DISCRIMINANTS AND COMPONENTS OF RECORDS |
-- INDEXED COMPONENTS AND SLICES FOR ARRAYS |
|
-- DSJ 5/5/83 |
-- JBG 3/8/84 |
|
WITH REPORT; |
PROCEDURE C74206A IS |
|
USE REPORT; |
|
BEGIN |
|
TEST("C74206A", "CHECK THAT ADDITIONAL OPERATIONS FOR " |
& "COMPOSITE TYPES OF PRIVATE TYPES ARE " |
& "AVAILABLE AT THE EARLIEST PLACE AFTER THE " |
& "FULL DECLARATION OF THE PRIVATE TYPE EVEN " |
& "IF BEFORE THE EARLIEST PLACE WITHIN THE " |
& "IMMEDIATE SCOPE OF THE COMPOSITE TYPE"); |
|
DECLARE |
|
PACKAGE PACK1 IS |
TYPE P1 IS PRIVATE; |
TYPE LP1 IS LIMITED PRIVATE; |
|
PACKAGE PACK_LP IS |
TYPE LP_ARR IS ARRAY (1 .. 2) OF LP1; |
TYPE LP_REC (D : INTEGER) IS |
RECORD |
C1, C2 : LP1; |
END RECORD; |
END PACK_LP; |
|
PACKAGE PACK2 IS |
TYPE ARR IS ARRAY ( 1 .. 2 ) OF P1; |
TYPE REC (D : INTEGER) IS |
RECORD |
C1, C2 : P1; |
END RECORD; |
END PACK2; |
PRIVATE |
TYPE P1 IS NEW BOOLEAN; |
TYPE LP1 IS NEW BOOLEAN; |
END PACK1; |
|
PACKAGE BODY PACK1 IS |
|
USE PACK_LP; |
USE PACK2; |
|
A1 : ARR; |
L1 : LP_ARR; |
|
N1 : INTEGER := ARR'FIRST; -- LEGAL |
N2 : INTEGER := ARR'LAST; -- LEGAL |
N3 : INTEGER := A1'LENGTH; -- LEGAL |
N4 : INTEGER := LP_ARR'FIRST; -- LEGAL |
N5 : INTEGER := LP_ARR'LAST; -- LEGAL |
N6 : INTEGER := L1'LENGTH; -- LEGAL |
B1 : BOOLEAN := 1 IN ARR'RANGE; -- LEGAL |
B2 : BOOLEAN := 5 IN LP_ARR'RANGE; -- LEGAL |
|
N7 : INTEGER := A1(1)'SIZE; -- LEGAL: A1(1) |
N8 : INTEGER := L1(2)'SIZE; -- LEGAL: L1(2) |
|
R1 : REC(1); |
Q1 : LP_REC(1); |
|
K1 : INTEGER := R1.D'SIZE; -- LEGAL: R1.D |
K2 : INTEGER := R1.C1'SIZE; -- LEGAL: R1.C1 |
K3 : INTEGER := Q1.D'SIZE; -- LEGAL: Q1.D |
K4 : INTEGER := Q1.C2'SIZE; -- LEGAL: Q1.C2 |
|
BEGIN |
|
IF N1 /= 1 OR N4 /= 1 THEN |
FAILED ("WRONG VALUE FOR 'FIRST"); |
END IF; |
|
IF N2 /= 2 OR N5 /= 2 THEN |
FAILED ("WRONG VALUE FOR 'LAST"); |
END IF; |
|
IF N3 /= 2 OR N6 /= 2 THEN |
FAILED ("WRONG VALUE FOR 'LENGTH"); |
END IF; |
|
IF B1 /= TRUE OR B2 /= FALSE THEN |
FAILED ("INCORRECT RANGE TEST"); |
END IF; |
|
IF N7 /= N8 THEN |
FAILED ("INCORRECT INDEXED COMPONENTS"); |
END IF; |
|
IF K1 /= K3 OR K2 /= K4 THEN |
FAILED ("INCORRECT COMPONENT SELECTION"); |
END IF; |
|
END PACK1; |
|
BEGIN |
|
NULL; |
|
END; |
|
RESULT; |
|
END C74206A; |
/c74305b.ada
0,0 → 1,101
-- C74305B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- CHECK THAT A DEFERRED CONSTANT CAN BE USED AS A DEFAULT |
-- INITIALIZATION FOR A PARAMETER OR AS A DEFAULT INITIA- |
-- LIZATION FOR A COMPONENT (GENERIC CASE). |
|
-- EG 12/20/83 |
|
WITH REPORT; |
|
PROCEDURE C74305B IS |
|
USE REPORT; |
|
PACKAGE PK IS |
TYPE TD IS PRIVATE; |
CD : CONSTANT TD; |
DD : CONSTANT TD; |
|
GENERIC |
TYPE T1 IS PRIVATE; |
C1 : T1; |
WITH PROCEDURE P2 (A1 : T1 := C1; A2 : TD := CD); |
PROCEDURE P1 (A1 : TD := CD); |
|
PRIVATE |
TYPE TD IS NEW INTEGER; |
CD : CONSTANT TD := 2; |
DD : CONSTANT TD := 3; |
END PK; |
|
USE PK; |
|
PACKAGE BODY PK IS |
|
PROCEDURE P1 (A1 : TD := CD) IS |
BEGIN |
IF ( A1 /= 2 ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED (1)"); |
END IF; |
P2; |
END P1; |
|
PROCEDURE P3 (X : TD := DD; Y : TD := DD) IS |
BEGIN |
IF ( X /= 2 ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED (2)"); |
END IF; |
IF ( Y /= 2 ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED (3)"); |
END IF; |
END P3; |
|
PROCEDURE P4 IS NEW P1 (TD,CD,P3); |
|
BEGIN |
TEST ("C74305B","CHECK THAT A DEFERRED CONSTANT CAN BE " & |
"USED AS A DEFAULT INITIALIZATION FOR A " & |
"PARAMETER OR AS A DEFAULT INITIALIZATION " & |
"FOR A COMPONENT (GENERIC CASE)"); |
P4; |
END PK; |
|
PROCEDURE P5 (X : TD := DD; Y : TD := DD) IS |
BEGIN |
IF ( X /= CD ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED (4)"); |
END IF; |
IF ( Y /= CD ) THEN |
FAILED ("WRONG ACTUAL PARAMETER RECEIVED (5)"); |
END IF; |
END P5; |
|
PROCEDURE P6 IS NEW P1 (TD,CD,P5); |
|
BEGIN |
P6; |
RESULT; |
END C74305B; |
/c74307a.ada
0,0 → 1,58
-- C74307A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT AN EXPLICIT CONSTRAINT MAY BE GIVEN IN THE SUBTYPE |
-- INDICATION OF THE FULL DECLARATION OF A DEFERRED CONSTANT. |
|
-- HISTORY: |
-- BCB 03/14/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74307A IS |
|
PACKAGE P IS |
TYPE T (D : INTEGER) IS PRIVATE; |
C : CONSTANT T; |
PRIVATE |
TYPE T (D : INTEGER) IS RECORD |
NULL; |
END RECORD; |
C : CONSTANT T(2) := (D => 2); |
END P; |
|
USE P; |
|
BEGIN |
TEST ("C74307A", "CHECK THAT AN EXPLICIT CONSTRAINT MAY BE " & |
"GIVEN IN THE SUBTYPE INDICATION OF THE FULL " & |
"DECLARATION OF A DEFERRED CONSTANT"); |
|
IF C.D /= 2 THEN |
FAILED ("IMPROPER RESULTS FOR C.D"); |
END IF; |
|
RESULT; |
END C74307A; |
/c730001.a
0,0 → 1,437
-- C730001.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that the full view of a private extension may be derived |
-- indirectly from the ancestor type (i.e., the parent type of the full |
-- type may be any descendant of the ancestor type). Check that, for |
-- a primitive subprogram of the private extension that is inherited from |
-- the ancestor type and not overridden, the formal parameter names and |
-- default expressions come from the corresponding primitive subprogram |
-- of the ancestor type, while the body comes from that of the parent |
-- type. Check both dispatching and non-dispatching cases. |
-- |
-- TEST DESCRIPTION: |
-- Consider: |
-- |
-- package P is |
-- type Ancestor is tagged ... |
-- procedure Op (P1: Ancestor; P2: Boolean := True); |
-- end P; |
-- |
-- with P; |
-- package Q is |
-- type Derived is new P.Ancestor with ... |
-- procedure Op (X: Ancestor; Y: Boolean := False); |
-- end Q; |
-- |
-- with P, Q; |
-- package R is |
-- type Priv_Ext is new P.Ancestor with private; -- (A) |
-- -- Inherits procedure Op (P1: Priv_Ext; P2: Boolean := True); |
-- -- But body executed is that of Q.Op. |
-- private |
-- type Priv_Ext is new Q.Derived with record ... -- (B) |
-- end R; |
-- |
-- The ancestor type in (A) differs from the parent type in (B); the |
-- parent of the full type is descended from the ancestor type of the |
-- private extension. For a call to Op (from outside the scope of the |
-- full view) with an operand of type Priv_Ext, the formal parameter |
-- names and default expression come from that of P.Op (the ancestor |
-- type's version), but the body executed will be that of |
-- Q.Op (the parent type's version) |
-- |
-- One half of the test mirrors the above template, where an inherited |
-- subprogram (Set_Display) is called using the formal parameter |
-- name (C) and default parameter expression of the ancestor type's |
-- version (type Clock), but the version of the body executed is from |
-- the parent type. |
-- |
-- The test also includes an examination of the dynamic evaluation |
-- case, where correct body associations are required through dispatching |
-- calls. As described for the non-dispatching case above, the formal |
-- parameter name and default values of the ancestor type's (Phone) |
-- version of the inherited subprogram (Answer) are used in the |
-- dispatching call, but the body executed is from the parent type. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- |
--! |
|
package C730001_0 is |
|
type Display_Kind is (None, Analog, Digital); |
type Illumination_Type is (None, Light, Phosphorescence); |
type Capability_Type is (Available, In_Use, Call_Waiting, Conference); |
type Indicator_Type is (None, Light, Bell, Buzzer, Click, Modem); |
|
type Clock is abstract tagged record -- ancestor type associated |
Display : Display_Kind := None; -- with non-dispatching case. |
Illumination : Illumination_Type := None; |
end record; |
|
type Phone is tagged record -- ancestor type associated |
Status : Capability_Type := Available; -- with dispatching case. |
Indicator : Indicator_Type := None; |
end record; |
|
-- The Set_Display procedure for type Clock implements a basic, no-frills |
-- clock display. |
procedure Set_Display (C : in out Clock; |
Disp: in Display_Kind := Digital); |
|
-- The Answer procedure for type Phone implements a phone status change |
-- operation. |
procedure Answer (The_Phone : in out Phone; |
Ind : in Indicator_Type := Light); |
-- ...Other general clock and/or phone operations (not specified in this |
-- test scenario). |
|
end C730001_0; |
|
|
--==================================================================-- |
|
|
package body C730001_0 is |
|
procedure Set_Display (C : in out Clock; |
Disp: in Display_Kind := Digital) is |
begin |
C.Display := Disp; |
C.Illumination := Light; |
end Set_Display; |
|
procedure Answer (The_Phone : in out Phone; |
Ind : in Indicator_Type := Light) is |
begin |
The_Phone.Status := In_Use; |
The_Phone.Indicator := Ind; |
end Answer; |
|
end C730001_0; |
|
|
--==================================================================-- |
|
|
with C730001_0; use C730001_0; |
package C730001_1 is |
|
type Power_Supply_Type is (Spring, Battery, AC_Current); |
type Speaker_Type is (None, Present, Adjustable, Stereo); |
|
type Wall_Clock is new Clock with record |
Power_Source : Power_Supply_Type := Spring; |
end record; |
|
type Office_Phone is new Phone with record |
Speaker : Speaker_Type := Present; |
end record; |
|
-- Note: Both procedures below, parameter names and defaults differ from |
-- parent's version. |
|
-- The Set_Display procedure for type Wall_Clock improves upon the |
-- basic Set_Display procedure of type Clock. |
|
procedure Set_Display (WC: in out Wall_Clock; |
D : in Display_Kind := Analog); |
|
procedure Answer (OP : in out Office_Phone; |
OI : in Indicator_Type := Buzzer); |
|
-- ...Other wall clock and/or Office_Phone operations (not specified in |
-- this test scenario). |
|
end C730001_1; |
|
|
--==================================================================-- |
|
|
package body C730001_1 is |
|
-- Note: This body is the one that should be executed in the test block |
-- below, not the version of the body corresponding to type Clock. |
|
procedure Set_Display (WC: in out Wall_Clock; |
D : in Display_Kind := Analog) is |
begin |
WC.Display := D; |
WC.Illumination := Phosphorescence; |
end Set_Display; |
|
|
procedure Answer (OP : in out Office_Phone; |
OI : in Indicator_Type := Buzzer) is |
begin |
OP.Status := Call_Waiting; |
OP.Indicator := OI; |
end Answer; |
|
end C730001_1; |
|
|
--==================================================================-- |
|
|
with C730001_0; use C730001_0; |
with C730001_1; use C730001_1; |
package C730001_2 is |
|
type Alarm_Type is (Buzzer, Radio, Both); |
type Video_Type is (None, TV_Monitor, Wall_Projection); |
|
type Alarm_Clock is new Clock with private; |
-- Inherits proc Set_Display (C : in out Clock; |
-- Disp: in Display_Kind := Digital); -- (A) |
-- |
-- Would also inherit other general clock operations (if present). |
|
|
type Conference_Room_Phone is new Office_Phone with record |
Display : Video_Type := TV_Monitor; |
end record; |
|
procedure Answer (CP : in out Conference_Room_Phone; |
CI : in Indicator_Type := Modem); |
|
|
function TC_Get_Display (C: Alarm_Clock) return Display_Kind; |
function TC_Get_Display_Illumination (C: Alarm_Clock) |
return Illumination_Type; |
|
private |
|
-- ...however, certain of the wall clock's operations (Set_Display, in |
-- this example) improve on the implementations provided for the general |
-- clock. We want to call the improved implementations, so we |
-- derive from Wall_Clock in the private part. |
|
type Alarm_Clock is new Wall_Clock with record |
Alarm : Alarm_Type := Buzzer; |
end record; |
|
-- Inherits proc Set_Display (WC: in out Wall_Clock; |
-- D : in Display_Kind := Analog); -- (B) |
|
-- The implicit Set_Display at (B) overrides the implicit Set_Display at |
-- (A), but only within the scope of the full view. |
-- |
-- Outside the scope of the full view, only (A) is visible, so calls |
-- from outside the scope will get the formal parameter names and default |
-- from (A). Both inside and outside the scope, however, the body executed |
-- will be that corresponding to Set_Display of the parent type. |
|
end C730001_2; |
|
|
--==================================================================-- |
|
|
package body C730001_2 is |
|
procedure Answer (CP : in out Conference_Room_Phone; |
CI : in Indicator_Type := Modem)is |
begin |
CP.Status := Conference; |
CP.Indicator := CI; |
end Answer; |
|
|
function TC_Get_Display (C: Alarm_Clock) return Display_Kind is |
begin |
return C.Display; |
end TC_Get_Display; |
|
|
function TC_Get_Display_Illumination (C: Alarm_Clock) |
return Illumination_Type is |
begin |
return C.Illumination; |
end TC_Get_Display_Illumination; |
|
end C730001_2; |
|
|
--==================================================================-- |
|
|
with C730001_0; use C730001_0; |
with C730001_1; use C730001_1; |
with C730001_2; use C730001_2; |
|
package C730001_3 is |
|
-- Types extended from the ancestor (Phone) type in the specification. |
|
type Secure_Phone_Type is new Phone with private; |
type Auditorium_Phone_Type is new Phone with private; |
-- Inherit versions of Answer from ancestor (Phone). |
|
function TC_Get_Phone_Status (P : Phone'Class) return Capability_Type; |
function TC_Get_Indicator (P : Phone'Class) return Indicator_Type; |
|
private |
|
-- Types extended from descendents of Phone_Type in the private part. |
|
type Secure_Phone_Type is new Office_Phone with record |
Scrambled_Communication : Boolean := True; |
end record; |
|
type Auditorium_Phone_Type is new Conference_Room_Phone with record |
Volume_Control : Boolean := True; |
end record; |
|
end C730001_3; |
|
--==================================================================-- |
|
package body C730001_3 is |
|
function TC_Get_Phone_Status (P : Phone'Class) return Capability_Type is |
begin |
return P.Status; |
end TC_Get_Phone_Status; |
|
function TC_Get_Indicator (P : Phone'Class) return Indicator_Type is |
begin |
return P.Indicator; |
end TC_Get_Indicator; |
|
end C730001_3; |
|
--==================================================================-- |
|
with C730001_0; use C730001_0; |
with C730001_1; use C730001_1; |
with C730001_2; use C730001_2; |
with C730001_3; use C730001_3; |
|
with Report; |
|
procedure C730001 is |
begin |
|
Report.Test ("C730001","Check that the full view of a private extension " & |
"may be derived indirectly from the ancestor " & |
"type. Check that, for a primitive subprogram " & |
"of the private extension that is inherited from " & |
"the ancestor type and not overridden, the " & |
"formal parameter names and default expressions " & |
"come from the corresponding primitive " & |
"subprogram of the ancestor type, while the body " & |
"comes from that of the parent type"); |
|
Test_Block: |
declare |
|
Alarm : Alarm_Clock; |
Hot_Line : Secure_Phone_Type; |
TeleConference_Phone : Auditorium_Phone_Type; |
|
begin |
|
-- Evaluate non-dispatching case: |
|
-- Call Set_Display using formal parameter name from |
-- C730001_0.Set_Display. |
-- Give no 2nd parameter so that default expression must be used. |
|
Set_Display (C => Alarm); |
|
-- The value of the Display component should equal Digital, which is |
-- the default value from the ancestor's version of Set_Display, |
-- and not the default value from the parent's version of Set_Display. |
|
if TC_Get_Display (Alarm) /= Digital then |
Report.Failed ("Default expression for ancestor op not used " & |
"in non-dispatching case"); |
end if; |
|
-- However, the value of the Illumination component should equal |
-- Phosphorescence, which is assigned in the parent type's version of |
-- the body of Set_Display. |
|
if TC_Get_Display_Illumination (Alarm) /= Phosphorescence then |
Report.Failed ("Wrong body was executed in non-dispatching case"); |
end if; |
|
|
-- Evaluate dispatching case: |
declare |
|
Hot_Line : Secure_Phone_Type; |
TeleConference_Phone : Auditorium_Phone_Type; |
|
procedure Answer_The_Phone (P : in out Phone'Class) is |
begin |
-- Give no 2nd parameter so that default expression must be used. |
Answer (P); |
end Answer_The_Phone; |
|
begin |
|
Answer_The_Phone (Hot_Line); |
Answer_The_Phone (TeleConference_Phone); |
|
-- The value of the Indicator field shold equal "Light", the default |
-- value from the ancestor's version of Answer, and not the default |
-- from either of the parent versions of Answer. |
|
if TC_Get_Indicator(Hot_Line) /= Light or |
TC_Get_Indicator(TeleConference_Phone) /= Light |
then |
Report.Failed("Default expression from ancestor operation " & |
"not used in dispatching case"); |
end if; |
|
-- However, the value of the Status component should equal |
-- Call_Waiting or Conference respectively, based on the assignment |
-- in the parent type's version of the body of Answer. |
|
if TC_Get_Phone_Status(Hot_Line) /= Call_Waiting then |
Report.Failed("Wrong body executed in dispatching case - 1"); |
end if; |
|
if TC_Get_Phone_Status(TeleConference_Phone) /= Conference then |
Report.Failed("Wrong body executed in dispatching case - 2"); |
end if; |
|
end; |
|
exception |
when others => Report.Failed ("Exception raised in Test_Block"); |
end Test_Block; |
|
|
Report.Result; |
|
end C730001; |
/c74208a.ada
0,0 → 1,116
-- C74208A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT 'SIZE AND 'ADDRESS FOR OBJECTS OF LIMITED AND |
-- NON-LIMITED TYPES ARE AVAILABLE BOTH INSIDE AND OUTSIDE THE |
-- PACKAGE DECLARING THE TYPES. |
|
-- HISTORY: |
-- BCB 03/14/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
WITH SYSTEM; USE SYSTEM; |
|
PROCEDURE C74208A IS |
|
PACKAGE P IS |
TYPE T IS PRIVATE; |
TYPE U IS LIMITED PRIVATE; |
PRIVATE |
TYPE T IS RANGE 1 .. 100; |
TYPE U IS RANGE 1 .. 100; |
END P; |
|
A : P.T; |
B : P.U; |
ASIZE, BSIZE : INTEGER; |
AADDRESS, BADDRESS : ADDRESS; |
|
FUNCTION IDENT_ADR(X : ADDRESS) RETURN ADDRESS IS |
Y : P.T; |
BEGIN |
IF EQUAL(3,3) THEN |
RETURN X; |
END IF; |
RETURN Y'ADDRESS; |
END IDENT_ADR; |
|
PACKAGE BODY P IS |
X : T; |
Y : U; |
XSIZE, YSIZE : INTEGER; |
XADDRESS, YADDRESS : ADDRESS; |
BEGIN |
TEST ("C74208A", "CHECK THAT 'SIZE AND 'ADDRESS FOR " & |
"OBJECTS OF LIMITED AND NON-LIMITED TYPES " & |
"ARE AVAILABLE BOTH INSIDE AND OUTSIDE " & |
"THE PACKAGE DECLARING THE TYPES"); |
|
XSIZE := X'SIZE; |
YSIZE := Y'SIZE; |
XADDRESS := X'ADDRESS; |
YADDRESS := Y'ADDRESS; |
|
IF NOT EQUAL(XSIZE,X'SIZE) THEN |
FAILED ("IMPROPER VALUE FOR X'SIZE"); |
END IF; |
|
IF XADDRESS /= IDENT_ADR(X'ADDRESS) THEN |
FAILED ("IMPROPER VALUE FOR X'ADDRESS"); |
END IF; |
|
IF NOT EQUAL(YSIZE,Y'SIZE) THEN |
FAILED ("IMPROPER VALUE FOR Y'SIZE"); |
END IF; |
|
IF YADDRESS /= IDENT_ADR(Y'ADDRESS) THEN |
FAILED ("IMPROPER VALUE FOR Y'ADDRESS"); |
END IF; |
END P; |
|
BEGIN |
ASIZE := A'SIZE; |
BSIZE := B'SIZE; |
AADDRESS := A'ADDRESS; |
BADDRESS := B'ADDRESS; |
|
IF NOT EQUAL(ASIZE,A'SIZE) THEN |
FAILED ("IMPROPER VALUE FOR A'SIZE"); |
END IF; |
|
IF AADDRESS /= IDENT_ADR(A'ADDRESS) THEN |
FAILED ("IMPROPER VALUE FOR A'ADDRESS"); |
END IF; |
|
IF NOT EQUAL(BSIZE,B'SIZE) THEN |
FAILED ("IMPROPER VALUE FOR B'SIZE"); |
END IF; |
|
IF BADDRESS /= IDENT_ADR(B'ADDRESS) THEN |
FAILED ("IMPROPER VALUE FOR B'ADDRESS"); |
END IF; |
|
RESULT; |
END C74208A; |
/c74406a.ada
0,0 → 1,130
-- C74406A.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT THE FULL DECLARATION OF A LIMITED PRIVATE TYPE CAN |
-- DECLARE A TASK TYPE, A TYPE DERIVED FROM A LIMITED PRIVATE TYPE, |
-- AND A COMPOSITE TYPE WITH A COMPONENT OF A LIMITED TYPE. |
|
-- HISTORY: |
-- BCB 03/10/88 CREATED ORIGINAL TEST. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74406A IS |
|
PACKAGE TP IS |
TYPE T IS LIMITED PRIVATE; |
PROCEDURE INIT (Z1 : OUT T; Z2 : INTEGER); |
FUNCTION EQUAL_T (ONE, TWO : T) RETURN BOOLEAN; |
PRIVATE |
TYPE T IS RANGE 1 .. 100; |
END TP; |
|
PACKAGE BODY TP IS |
PROCEDURE INIT (Z1 : OUT T; Z2 : INTEGER) IS |
BEGIN |
Z1 := T (Z2); |
END INIT; |
|
FUNCTION EQUAL_T (ONE, TWO : T) RETURN BOOLEAN IS |
BEGIN |
IF EQUAL(3,3) THEN |
RETURN ONE = TWO; |
ELSE |
RETURN ONE /= TWO; |
END IF; |
END EQUAL_T; |
BEGIN |
NULL; |
END TP; |
|
USE TP; |
|
PACKAGE P IS |
TYPE T1 IS LIMITED PRIVATE; |
TYPE T2 IS LIMITED PRIVATE; |
TYPE T3 IS LIMITED PRIVATE; |
TYPE T4 IS LIMITED PRIVATE; |
PRIVATE |
TASK TYPE T1 IS |
ENTRY HERE(VAL1 : IN OUT INTEGER); |
END T1; |
|
TYPE T2 IS NEW T; |
|
TYPE T3 IS RECORD |
INT : T; |
END RECORD; |
|
TYPE T4 IS ARRAY(1..5) OF T; |
END P; |
|
PACKAGE BODY P IS |
X1 : T1; |
X3 : T3; |
X4 : T4; |
VAR : INTEGER := 25; |
|
TASK BODY T1 IS |
BEGIN |
ACCEPT HERE(VAL1 : IN OUT INTEGER) DO |
VAL1 := VAL1 * 2; |
END HERE; |
END T1; |
|
BEGIN |
TEST ("C74406A", "CHECK THAT THE FULL DECLARATION OF A " & |
"LIMITED PRIVATE TYPE CAN DECLARE A TASK " & |
"TYPE, A TYPE DERIVED FROM A LIMITED " & |
"PRIVATE TYPE, AND A COMPOSITE TYPE WITH " & |
"A COMPONENT OF A LIMITED TYPE"); |
|
X1.HERE(VAR); |
|
IF NOT EQUAL(VAR,IDENT_INT(50)) THEN |
FAILED ("IMPROPER VALUE FOR VAL"); |
END IF; |
|
INIT (X3.INT, 50); |
|
IF X3.INT NOT IN T THEN |
FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST"); |
END IF; |
|
INIT (X4(3), 17); |
|
IF NOT EQUAL_T(T'(X4(3)),T(X4(3))) THEN |
FAILED ("IMPROPER RESULT FROM QUALIFICATION AND " & |
"EXPLICIT CONVERSION"); |
END IF; |
|
RESULT; |
END P; |
|
USE P; |
|
BEGIN |
NULL; |
END C74406A; |
/c730002.a
0,0 → 1,383
-- C730002.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that the full view of a private extension may be derived |
-- indirectly from the ancestor type (i.e., the parent type of the full |
-- type may be any descendant of the ancestor type). Check that, for |
-- a primitive subprogram of the private extension that is inherited from |
-- the ancestor type and not overridden, the formal parameter names and |
-- default expressions come from the corresponding primitive subprogram |
-- of the ancestor type, while the body comes from that of the parent |
-- type. |
-- Check for a case where the parent type is derived from the ancestor |
-- type through a series of types produced by generic instantiations. |
-- Examine both the static and dynamic binding cases. |
-- |
-- TEST DESCRIPTION: |
-- Consider: |
-- |
-- package P is |
-- type Ancestor is tagged ... |
-- procedure Op (P1: Ancestor; P2: Boolean := True); |
-- end P; |
-- |
-- with P; |
-- generic |
-- type T is new P.Ancestor with private; |
-- package Gen1 is |
-- type Enhanced is new T with private; |
-- procedure Op (A: Enhanced; B: Boolean := True); |
-- -- other specific procedures... |
-- private |
-- type Enhanced is new T with ... |
-- end Gen1; |
-- |
-- with P, Gen1; |
-- package N is new Gen1 (P.Ancestor); |
-- |
-- with N; |
-- generic |
-- type T is new N.Enhanced with private; |
-- package Gen2 is |
-- type Enhanced_Again is new T with private; |
-- procedure Op (X: Enhanced_Again; Y: Boolean := False); |
-- -- other specific procedures... |
-- private |
-- type Enhanced_Again is new T with ... |
-- end Gen2; |
-- |
-- with N, Gen2; |
-- package Q is new Gen2 (N.Enhanced); |
-- |
-- with P, Q; |
-- package R is |
-- type Priv_Ext is new P.Ancestor with private; -- (A) |
-- -- Inherits procedure Op (P1: Priv_Ext; P2: Boolean := True); |
-- -- But body executed is that of Q.Op. |
-- private |
-- type Priv_Ext is new Q.Enhanced_Again with record ... -- (B) |
-- end R; |
-- |
-- The ancestor type in (A) differs from the parent type in (B); the |
-- parent of the full type is descended from the ancestor type of the |
-- private extension, in this case through a series of types produced |
-- by generic instantiations. Gen1 redefines the implementation of Op |
-- for any type that has one. N is an instance of Gen1 for the ancestor |
-- type. Gen2 again redefines the implementation of Op for any type that |
-- has one. Q is an instance of Gen2 for the extension of the P.Ancestor |
-- declared in N. Both N and Q could define other operations which we |
-- don't want to be available in R. For a call to Op (from outside the |
-- scope of the full view) with an operand of type R.Priv_Ext, the body |
-- executed will be that of Q.Op (the parent type's version), but the |
-- formal parameter names and default expression come from that of P.Op |
-- (the ancestor type's version). |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 94 SAIC ACVC 2.0 |
-- 27 Feb 97 CTA.PWB Added elaboration pragmas. |
--! |
|
package C730002_0 is |
|
type Hours_Type is range 0..1000; |
type Personnel_Type is range 0..10; |
type Specialist_ID is (Manny, Moe, Jack, Curly, Joe, Larry); |
|
type Engine_Type is tagged record |
Ave_Repair_Time : Hours_Type := 0; -- Default init. for |
Personnel_Required : Personnel_Type := 0; -- component fields. |
Specialist : Specialist_ID := Manny; |
end record; |
|
procedure Routine_Maintenance (Engine : in out Engine_Type ; |
Specialist : in Specialist_ID := Moe); |
|
-- The Routine_Maintenance procedure implements the processing required |
-- for an engine. |
|
end C730002_0; |
|
--==================================================================-- |
|
package body C730002_0 is |
|
procedure Routine_Maintenance (Engine : in out Engine_Type ; |
Specialist : in Specialist_ID := Moe) is |
begin |
Engine.Ave_Repair_Time := 3; |
Engine.Personnel_Required := 1; |
Engine.Specialist := Specialist; |
end Routine_Maintenance; |
|
end C730002_0; |
|
--==================================================================-- |
|
with C730002_0; use C730002_0; |
generic |
type T is new C730002_0.Engine_Type with private; |
package C730002_1 is |
|
-- This generic package contains types/procedures specific to engines |
-- of the diesel variety. |
|
type Repair_Facility_Type is (On_Site, Repair_Shop, Factory); |
|
type Diesel_Series is new T with private; |
|
procedure Routine_Maintenance (Eng : in out Diesel_Series; |
Spec_Req : in Specialist_ID := Jack); |
|
-- Other diesel specific operations... (not required in this test). |
|
private |
|
type Diesel_Series is new T with record |
Repair_Facility_Required : Repair_Facility_Type := On_Site; |
end record; |
|
end C730002_1; |
|
--==================================================================-- |
|
package body C730002_1 is |
|
procedure Routine_Maintenance (Eng : in out Diesel_Series; |
Spec_Req : in Specialist_ID := Jack) is |
begin |
Eng.Ave_Repair_Time := 6; |
Eng.Personnel_Required := 2; |
Eng.Specialist := Spec_Req; |
Eng.Repair_Facility_Required := On_Site; |
end Routine_Maintenance; |
|
end C730002_1; |
|
--==================================================================-- |
|
with C730002_0; |
with C730002_1; |
pragma Elaborate (C730002_1); |
package C730002_2 is new C730002_1 (C730002_0.Engine_Type); |
|
--==================================================================-- |
|
with C730002_0; use C730002_0; |
with C730002_2; use C730002_2; |
generic |
type T is new C730002_2.Diesel_Series with private; |
package C730002_3 is |
|
type Time_Of_Operation_Type is range 0..100_000; |
|
type Electric_Series is new T with private; |
|
procedure Routine_Maintenance (E : in out Electric_Series; |
SR : in Specialist_ID := Curly); |
|
-- Other electric specific operations... (not required in this test). |
|
private |
|
type Electric_Series is new T with record |
Mean_Time_Between_Repair : Time_Of_Operation_Type := 0; |
end record; |
|
end C730002_3; |
|
--==================================================================-- |
|
package body C730002_3 is |
|
procedure Routine_Maintenance (E : in out Electric_Series; |
SR : in Specialist_ID := Curly) is |
begin |
E.Ave_Repair_Time := 9; |
E.Personnel_Required := 3; |
E.Specialist := SR; |
E.Mean_Time_Between_Repair := 1000; |
end Routine_Maintenance; |
|
end C730002_3; |
|
--==================================================================-- |
|
with C730002_2; |
with C730002_3; |
pragma Elaborate (C730002_3); |
package C730002_4 is new C730002_3 (C730002_2.Diesel_Series); |
|
--==================================================================-- |
|
with C730002_0; use C730002_0; |
with C730002_4; use C730002_4; |
|
package C730002_5 is |
|
type Inspection_Type is (AAA, MIL_STD, NRC); |
|
type Nuclear_Series is new Engine_Type with private; -- (A) |
|
-- Inherits procedure Routine_Maintenance from ancestor; does not override. |
-- (Engine : in out Nuclear_Series; |
-- Specialist : in Specialist_ID := Moe); |
-- But body executed will be that of C730002_4.Routine_Maintenance, |
-- the parent type. |
|
function TC_Specialist (E : Nuclear_Series) return Specialist_ID; |
function TC_Personnel_Required (E : Nuclear_Series) return Personnel_Type; |
function TC_Time_Required (E : Nuclear_Series) return Hours_Type; |
|
-- Dispatching subprogram. |
procedure Maintain_The_Engine (The_Engine : in out Engine_Type'Class); |
|
private |
|
type Nuclear_Series is new Electric_Series with record -- (B) |
Inspector_Rep : Inspection_Type := NRC; |
end record; |
|
-- The ancestor type is used in the type extension (A), while the parent |
-- of the full type (B) is a descendent of the ancestor type, through a |
-- series of types produced by generic instantiation. |
|
end C730002_5; |
|
--==================================================================-- |
|
package body C730002_5 is |
|
function TC_Specialist (E : Nuclear_Series) return Specialist_ID is |
begin |
return E.Specialist; |
end TC_Specialist; |
|
function TC_Personnel_Required (E : Nuclear_Series) |
return Personnel_Type is |
begin |
return E.Personnel_Required; |
end TC_Personnel_Required; |
|
function TC_Time_Required (E : Nuclear_Series) return Hours_Type is |
begin |
return E.Ave_Repair_Time; |
end TC_Time_Required; |
|
-- Dispatching subprogram. |
procedure Maintain_The_Engine (The_Engine : in out Engine_Type'Class) is |
begin |
Routine_Maintenance (The_Engine); |
end Maintain_The_Engine; |
|
|
end C730002_5; |
|
--==================================================================-- |
|
with Report; |
with C730002_0; use C730002_0; |
with C730002_2; use C730002_2; |
with C730002_4; use C730002_4; |
with C730002_5; use C730002_5; |
|
procedure C730002 is |
begin |
|
Report.Test ("C730002", "Check that the full view of a private " & |
"extension may be derived indirectly from " & |
"the ancestor type. Check for a case where " & |
"the parent type is derived from the ancestor " & |
"type through a series of types produced by " & |
"generic instantiations"); |
|
Test_Block: |
declare |
Nuclear_Drive : Nuclear_Series; |
Warp_Drive : Nuclear_Series; |
begin |
|
-- Non-Dispatching Case: |
-- Call Routine_Maintenance using formal parameter name from |
-- C730002_0.Routine_Maintenance (ancestor version). |
-- Give no second parameter so that the default expression must be |
-- used. |
|
Routine_Maintenance (Engine => Nuclear_Drive); |
|
-- The value of the Specialist component should equal "Moe", |
-- which is the default value from the ancestor's version of |
-- Routine_Maintenance, and not the default value from the parent's |
-- version of Routine_Maintenance. |
|
if TC_Specialist (Nuclear_Drive) /= Moe then |
Report.Failed |
("Default expression for ancestor op not used " & |
" - non-dispatching case"); |
end if; |
|
-- However the value of the Ave_Repair_Time and Personnel_Required |
-- components should be those assigned in the parent type's version |
-- of the body of Routine_Maintenance. |
-- Note: Only components associated with the ancestor type are |
-- evaluated for the purposes of this test. |
|
if TC_Personnel_Required (Nuclear_Drive) /= 3 or |
TC_Time_Required (Nuclear_Drive) /= 9 |
then |
Report.Failed("Wrong body was executed - non-dispatching case"); |
end if; |
|
-- Dispatching Case: |
-- Use a dispatching subprogram to ensure that the correct body is |
-- used at runtime. |
|
Maintain_The_Engine (Warp_Drive); |
|
-- The resulting assignments to the fields of the Warp_Drive variable |
-- should be the same as those of the Nuclear_Drive above, indicating |
-- that the body of the parent version of the inherited subprogram |
-- was used. |
|
if TC_Specialist (Warp_Drive) /= Moe then |
Report.Failed |
("Default expression for ancestor op not used - dispatching case"); |
end if; |
|
if TC_Personnel_Required (Nuclear_Drive) /= 3 or |
TC_Time_Required (Nuclear_Drive) /= 9 |
then |
Report.Failed("Wrong body was executed - dispatching case"); |
end if; |
|
|
exception |
when others => Report.Failed("Exception raised in Test_Block"); |
end Test_Block; |
|
Report.Result; |
|
end C730002; |
/c74208b.ada
0,0 → 1,106
-- C74208B.ADA |
|
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
-- unlimited rights in the software and documentation contained herein. |
-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
-- this public release, the Government intends to confer upon all |
-- recipients unlimited rights equal to those held by the Government. |
-- These rights include rights to use, duplicate, release or disclose the |
-- released technical data and computer software in whole or in part, in |
-- any manner and for any purpose whatsoever, and to have or permit others |
-- to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- OBJECTIVE: |
-- CHECK THAT 'CONSTRAINED FOR OBJECTS OF A PRIVATE TYPE WITH |
-- VISIBLE DISCRIMINANTS IS AVAILABLE OUTSIDE THE PACKAGE DECLARING |
-- THE TYPE AND IS AVAILABLE BEFORE AND AFTER THE FULL DECLARATION. |
|
-- HISTORY: |
-- BCB 07/14/88 CREATED ORIGINAL TEST. |
-- GJD 11/15/95 MOVED REC2_VAR OUT OF P DUE TO ADA 95 FREEZING RULES. |
|
WITH REPORT; USE REPORT; |
|
PROCEDURE C74208B IS |
|
PACKAGE P IS |
TYPE REC (D : INTEGER := 0) IS PRIVATE; |
R1 : CONSTANT REC; |
TYPE REC2 IS RECORD |
COMP : BOOLEAN := R1'CONSTRAINED; |
END RECORD; |
PRIVATE |
TYPE REC (D : INTEGER := 0) IS RECORD |
NULL; |
END RECORD; |
R1 : CONSTANT REC := (D => 5); |
R2 : REC := (D => 0); |
R2A : REC(3); |
R2CON : CONSTANT REC := (D => 3); |
C : BOOLEAN := R2'CONSTRAINED; |
D : BOOLEAN := R2A'CONSTRAINED; |
E : BOOLEAN := R2CON'CONSTRAINED; |
END P; |
|
REC2_VAR : P.REC2; |
|
R3 : P.REC(0); |
R3A : P.REC; |
|
A : BOOLEAN := R3'CONSTRAINED; |
B : BOOLEAN := R3A'CONSTRAINED; |
|
PACKAGE BODY P IS |
BEGIN |
TEST ("C74208B", "CHECK THAT 'CONSTRAINED FOR OBJECTS OF A " & |
"PRIVATE TYPE WITH VISIBLE DISCRIMINANTS " & |
"IS AVAILABLE OUTSIDE THE PACKAGE " & |
"DECLARING THE TYPE AND IS AVAILABLE " & |
"BEFORE AND AFTER THE FULL DECLARATION"); |
|
IF NOT REC2_VAR.COMP THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED BEFORE THE " & |
"FULL DECLARATION OF THE PRIVATE TYPE"); |
END IF; |
|
IF C THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED AFTER THE " & |
"FULL DECLARATION OF THE PRIVATE TYPE - 1"); |
END IF; |
|
IF NOT D THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED AFTER THE " & |
"FULL DECLARATION OF THE PRIVATE TYPE - 2"); |
END IF; |
|
IF NOT E THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED AFTER THE " & |
"FULL DECLARATION OF THE PRIVATE TYPE - 3"); |
END IF; |
END P; |
|
BEGIN |
IF NOT A THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED OUTSIDE THE " & |
"PACKAGE DECLARING THE PRIVATE TYPE - 1"); |
END IF; |
|
IF B THEN |
FAILED ("IMPROPER VALUE FOR 'CONSTRAINED OUTSIDE THE " & |
"PACKAGE DECLARING THE PRIVATE TYPE - 2"); |
END IF; |
|
RESULT; |
END C74208B; |
/c730003.a
0,0 → 1,283
-- C730003.A |
-- |
-- Grant of Unlimited Rights |
-- |
-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and |
-- F08630-91-C-0015, the U.S. Government obtained unlimited rights in the |
-- software and documentation contained herein. Unlimited rights are |
-- defined in DFAR 252.227-7013(a)(19). By making this public release, |
-- the Government intends to confer upon all recipients unlimited rights |
-- equal to those held by the Government. These rights include rights to |
-- use, duplicate, release or disclose the released technical data and |
-- computer software in whole or in part, in any manner and for any purpose |
-- whatsoever, and to have or permit others to do so. |
-- |
-- DISCLAIMER |
-- |
-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
-- WARRANTY AS TO ANY MATTER WHATSOVER, INCLUDING THE CONDITIONS OF THE |
-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
-- PARTICULAR PURPOSE OF SAID MATERIAL. |
--* |
-- |
-- OBJECTIVE: |
-- Check that the characteristics of a type derived from a private |
-- extension (outside the scope of the full view) are those defined by |
-- the partial view of the private extension. |
-- In particular, check that a component of the derived type may be |
-- explicitly declared with the same name as a component declared for |
-- the full view of the private extension. |
-- Check that a component defined in the private extension of a type |
-- may be updated through a view conversion of a type derived from |
-- the type. |
-- |
-- TEST DESCRIPTION: |
-- Consider: |
-- |
-- package Parent is |
-- type T is tagged record |
-- ... |
-- end record; |
-- |
-- type DT is new T with private; |
-- procedure Op1 (P: in out DT); |
-- |
-- private |
-- type DT is new T with record |
-- Y: ...; -- (A) |
-- end record; |
-- end Parent; |
-- |
-- package body Parent is |
-- function Op1 (P: in DT) return ... is |
-- begin |
-- return P.Y; |
-- end Op1; |
-- end Parent; |
-- |
-- package Unrelated is |
-- type Intermediate is new DT with record |
-- Y: ...; -- Note: same name as component of -- (B) |
-- -- parent's full view. |
-- end record; |
-- end Unrelated; |
-- |
-- package Parent.Child is |
-- type DDT is new Intermediate with null record; |
-- -- Implicit declared Op1 (P.DDT); -- (C) |
-- |
-- procedure Op2 (P: in out DDT); |
-- end Parent.Child; |
-- |
-- package body Parent.Child is |
-- procedure Op2 (P: in out DDT) is |
-- Obj : DT renames DT(P); |
-- begin |
-- ... |
-- P.Y := ...; -- Updates DDT's Y. -- (D) |
-- DT(P).Y := ...; -- Updates DT's Y. -- (E) |
-- Obj.Y := ...; -- Updates DT's Y. -- (F) |
-- end Op2; |
-- end Parent.Child; |
-- |
-- Types DT and DDT both declare a component Y at (A) and (B), |
-- respectively. The component Y of the full view of DT is not visible |
-- at the place where DDT is declared. Therefore, it is invisible for |
-- all views of DDT (although it still exists for objects of DDT), and |
-- it is legal to declare another component for DDT with the same name. |
-- |
-- DDT inherits the primitive subprogram Op1 from DT at (C). Op1 returns |
-- the component Y; for calls with an operand of type DDT, Op1 returns |
-- the Y inherited from DT, not the new Y explicitly declared for DDT, |
-- even though the inherited Y is not visible for any view of DDT. |
-- |
-- Within the body of Op2, the assignment statement at (D) updates the |
-- Y explicitly declared for DDT. At (E) and (F), however, a view |
-- conversion denotes a new view of P as an object of type DT, which |
-- enables access to the Y from the full view of DT. Thus, the |
-- assignment statements at (E) and (F) update the (invisible) Y from DT. |
-- |
-- Note that the above analysis would be wrong if the new component Y |
-- were declared directly in Child. In that case, the two same-named |
-- components would be illegal -- see AI-150. |
-- |
-- |
-- CHANGE HISTORY: |
-- 06 Dec 1994 SAIC ACVC 2.0 |
-- 29 JUN 1999 RAD Declare same-named component in an |
-- unrelated package -- see AI-150. |
-- |
--! |
|
package C730003_0 is |
|
type Suit_Kind is (Clubs, Diamonds, Hearts, Spades); |
type Face_Kind is (Up, Down); |
|
type Playing_Card is tagged record |
Face: Face_Kind; |
Suit: Suit_Kind; |
end record; |
|
procedure Turn_Over_Card (Card : in out Playing_Card); |
|
type Disp_Card is new Playing_Card with private; |
|
subtype ASCII_Representation is Natural range 1..14; |
|
function Get_Private_View (A_Card : Disp_Card) return ASCII_Representation; |
|
private |
|
type Disp_Card is new Playing_Card with record |
View: ASCII_Representation; -- (A) |
end record; |
|
end C730003_0; |
|
--==================================================================-- |
|
package body C730003_0 is |
|
procedure Turn_Over_Card (Card: in out Playing_Card) is |
begin |
Card.Face := Up; |
end Turn_Over_Card; |
|
function Get_Private_View (A_Card : Disp_Card) |
return ASCII_Representation is |
begin |
return A_Card.View; |
end Get_Private_View; |
|
end C730003_0; |
|
--==================================================================-- |
|
with C730003_0; use C730003_0; |
package C730003_1 is |
|
subtype Graphic_Representation is String (1 .. 2); |
|
type Graphic_Card is new Disp_Card with record |
View : Graphic_Representation; -- (B) |
-- "Duplicate" component field name. |
end record; |
|
end C730003_1; |
|
--==================================================================-- |
|
with C730003_1; use C730003_1; |
package C730003_0.C730003_2 is |
|
Queen_Of_Spades : constant C730003_0.ASCII_Representation := 12; |
Ace_Of_Hearts : constant String := "AH"; |
Close_To_The_Vest : constant C730003_0.ASCII_Representation := 14; |
Read_Em_And_Weep : constant String := "AA"; |
|
type Graphic_Card is new C730003_1.Graphic_Card with null record; |
|
-- Implicit function Get_Private_View -- (C) |
-- (A_Card : Graphic_Card) return C730003_0.ASCII_Representation; |
|
function Get_View (Card : Graphic_Card) return String; |
procedure Update_View (Card : in out Graphic_Card); |
procedure Hide_From_View (Card : in out Graphic_Card); |
|
end C730003_0.C730003_2; |
|
--==================================================================-- |
|
package body C730003_0.C730003_2 is |
|
function Get_View (Card : Graphic_Card) return String is |
begin |
return Card.View; |
end Get_View; |
|
procedure Update_View (Card : in out Graphic_Card) is |
ASCII_View : Disp_Card renames Disp_Card(Card); -- View conversion. |
begin |
ASCII_View.View := Queen_Of_Spades; -- (F) |
-- Assignment to "hidden" field. |
Card.View := Ace_Of_Hearts; -- (D) |
-- Assignment to Graphic_Card declared field. |
end Update_View; |
|
procedure Hide_From_View (Card : in out Graphic_Card) is |
begin |
-- Update both of Card's View components. |
Disp_Card(Card).View := Close_To_The_Vest; -- (E) |
-- Assignment to "hidden" field. |
Card.View := Read_Em_And_Weep; -- (D) |
-- Assignment to Graphic_Card declared field. |
end Hide_From_View; |
|
end C730003_0.C730003_2; |
|
--==================================================================-- |
|
with C730003_0; |
with C730003_0.C730003_2; |
with Report; |
|
procedure C730003 is |
begin |
|
Report.Test ("C730003", "Check that the characteristics of a type " & |
"derived from a private extension (outside " & |
"the scope of the full view) are those " & |
"defined by the partial view of the private " & |
"extension"); |
|
Check_Your_Cards: |
declare |
use C730003_0; |
use C730003_0.C730003_2; |
|
Top_Card_On_The_Deck : Graphic_Card; |
|
begin |
|
-- Update value in the components of the card. There are two |
-- component fields named View, although one is not visible for |
-- any view of a Graphic_Card. |
|
Update_View(Top_Card_On_The_Deck); |
|
-- Verify that both "View" components of the card have been updated. |
|
if Get_View(Top_Card_On_The_Deck) /= Ace_Of_Hearts then |
Report.Failed ("Incorrect value in visible component - 1"); |
end if; |
|
if Get_Private_View(Top_Card_On_The_Deck) /= Queen_Of_Spades |
then |
Report.Failed ("Incorrect value in non-visible component - 1"); |
end if; |
|
-- Again, update the components of the card (to blank values). |
|
Hide_From_View(Top_Card_On_The_Deck); |
|
-- Verify that both components have been updated. |
|
if Get_View(Top_Card_On_The_Deck) /= Read_Em_And_Weep then |
Report.Failed ("Incorrect value in visible component - 2"); |
end if; |
|
if Get_Private_View(Top_Card_On_The_Deck) /= Close_To_The_Vest |
then |
Report.Failed ("Incorrect value in non-visible component - 2"); |
end if; |
|
exception |
when others => Report.Failed("Exception raised in test block"); |
end Check_Your_Cards; |
|
Report.Result; |
|
end C730003; |