blob: 27d1f843c30911e162332982b7a5fb9de763454a [file] [log] [blame]
-- C3A1002.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 type completing a type with no discriminant part
-- or an unknown discriminant part may have explicitly declared or
-- inherited discriminants.
-- Check for cases where the types are tagged records and task types.
--
-- TEST DESCRIPTION:
-- Declare two groups of incomplete types: one group with no discriminant
-- part and one group with unknown discriminant part. Both groups of
-- incomplete types are completed with both explicit and inherited
-- discriminants. Discriminants for task types are declared with both
-- default and non default values. Discriminants for tagged types are
-- only declared without default values.
-- In the main program, verify that objects of both groups of incomplete
-- types can be created by default values or by assignments.
--
--
-- CHANGE HISTORY:
-- 23 Oct 95 SAIC Initial prerelease version.
-- 19 Oct 96 SAIC ACVC 2.1: modified test description. Initialized
-- Int_Val.
--
--!
package C3A1002_0 is
subtype Small_Int is Integer range 1 .. 15;
type Enu_Type is (M, F);
type Tag_Type is tagged
record
I : Small_Int := 1;
end record;
type NTag_Type (D : Small_Int) is new Tag_Type with
record
S : String (1 .. D) := "Aloha";
end record;
type Incomplete1; -- no discriminant
type Incomplete2 (<>); -- unknown discriminant
type Incomplete3; -- no discriminant
type Incomplete4 (<>); -- unknown discriminant
type Incomplete5; -- no discriminant
type Incomplete6 (<>); -- unknown discriminant
type Incomplete1 (D1 : Enu_Type) is tagged -- no discriminant/
record -- explicit discriminant
case D1 is
when M => MInteger : Small_Int := 9;
when F => FInteger : Small_Int := 8;
end case;
end record;
type Incomplete2 (D2 : Small_Int) is new -- unknown discriminant/
Incomplete1 (D1 => F) with record -- explicit discriminant
ID : String (1 .. D2) := "ACVC95";
end record;
type Incomplete3 is new -- no discriminant/
NTag_Type with record -- inherited discriminant
E : Enu_Type := M;
end record;
type Incomplete4 is new -- unknown discriminant/
NTag_Type (D => 3) with record -- inherited discriminant
E : Enu_Type := F;
end record;
task type Incomplete5 (D5 : Enu_Type) is -- no discriminant/
entry Read_Disc (P : out Enu_Type); -- explicit discriminant
end Incomplete5;
task type Incomplete6
(D6 : Small_Int := 4) is -- unknown discriminant/
entry Read_Int (P : out Small_Int); -- explicit discriminant
end Incomplete6;
end C3A1002_0;
--==================================================================--
package body C3A1002_0 is
task body Incomplete5 is
begin
select
accept Read_Disc (P : out Enu_Type) do
P := D5;
end Read_Disc;
or
terminate;
end select;
end Incomplete5;
----------------------------------------------------------------------
task body Incomplete6 is
begin
select
accept Read_Int (P : out Small_Int) do
P := D6;
end Read_Int;
or
terminate;
end select;
end Incomplete6;
end C3A1002_0;
--==================================================================--
with Report;
with C3A1002_0;
use C3A1002_0;
procedure C3A1002 is
Enum_Val : Enu_Type := M;
Int_Val : Small_Int := 15;
-- Discriminant value comes from default.
Incomplete6_Obj_1 : Incomplete6;
-- Discriminant value comes from explicit constraint.
Incomplete1_Obj_1 : Incomplete1 (M);
Incomplete2_Obj_1 : Incomplete2 (6);
Incomplete5_Obj_1 : Incomplete5 (F);
Incomplete6_Obj_2 : Incomplete6 (7);
-- Discriminant value comes from assignment.
Incomplete1_Obj_2 : Incomplete1
:= (F, 12);
Incomplete3_Obj_1 : Incomplete3
:= (D => 2, S => "Hi", I => 10, E => F);
Incomplete4_Obj_1 : Incomplete4
:= (E => M, D => 3, S => "Bye", I => 14);
begin
Report.Test ("C3A1002", "Check that the full type completing a type " &
"with no discriminant part or an unknown discriminant " &
"part may have explicitly declared or inherited " &
"discriminants. Check for cases where the types are " &
"tagged records and task types");
-- Check the initial values.
if (Incomplete6_Obj_1.D6 /= 4) then
Report.Failed ("Wrong initial value for Incomplete6_Obj_1");
end if;
-- Check the explicit values.
if (Incomplete1_Obj_1.D1 /= M) or
(Incomplete1_Obj_1.MInteger /= 9) then
Report.Failed ("Wrong values for Incomplete1_Obj_1");
end if;
if (Incomplete2_Obj_1.D2 /= 6) or
(Incomplete2_Obj_1.FInteger /= 8) or
(Incomplete2_Obj_1.ID /= "ACVC95") then
Report.Failed ("Wrong values for Incomplete2_Obj_1");
end if;
if (Incomplete5_Obj_1.D5 /= F) then
Report.Failed ("Wrong value for Incomplete5_Obj_1");
end if;
Incomplete5_Obj_1.Read_Disc (Enum_Val);
if (Enum_Val /= F) then
Report.Failed ("Wrong value for Enum_Val");
end if;
if (Incomplete6_Obj_2.D6 /= 7) then
Report.Failed ("Wrong value for Incomplete6_Obj_2");
end if;
Incomplete6_Obj_1.Read_Int (Int_Val);
if (Int_Val /= 4) then
Report.Failed ("Wrong value for Int_Val");
end if;
-- Check the assigned values.
if (Incomplete1_Obj_2.D1 /= F) or
(Incomplete1_Obj_2.FInteger /= 12) then
Report.Failed ("Wrong values for Incomplete1_Obj_2");
end if;
if (Incomplete3_Obj_1.D /= 2 ) or
(Incomplete3_Obj_1.I /= 10) or
(Incomplete3_Obj_1.E /= F ) or
(Incomplete3_Obj_1.S /= "Hi") then
Report.Failed ("Wrong values for Incomplete3_Obj_1");
end if;
if (Incomplete4_Obj_1.E /= M ) or
(Incomplete4_Obj_1.D /= 3) or
(Incomplete4_Obj_1.S /= "Bye") or
(Incomplete4_Obj_1.I /= 14) then
Report.Failed ("Wrong values for Incomplete4_Obj_1");
end if;
Report.Result;
end C3A1002;