blob: 5a128ba69b1a06748e048977a8ee31ea9fda192b [file] [log] [blame]
-- C854001.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 subprogram declaration can be completed by a
-- subprogram renaming declaration. In particular, check that such a
-- renaming-as-body can be given in a package body to complete a
-- subprogram declared in the package specification. Check that calls
-- to the subprogram invoke the body of the renamed subprogram. Check
-- that a renaming allows a copy of an inherited or predefined subprogram
-- before overriding it later. Check that renaming a dispatching
-- operation calls the correct body in case of overriding.
--
-- TEST DESCRIPTION:
-- This test declares a record type, an integer type, and a tagged type
-- with a set of operations in a package. A renaming of a predefined
-- equality operation of a tagged type is also defined in this package.
-- The predefined operation is overridden in the private part. In a
-- separate package, a subtype of the record type and integer type
-- are declared. Subset of the full set of operations for the record
-- and types is reexported using renamings-as-bodies. Other operations
-- are given explicit bodies. The test verifies that the appropriate
-- body is executed for each operation on the subtype.
--
--
-- CHANGE HISTORY:
-- 06 Dec 94 SAIC ACVC 2.0
-- 07 Nov 95 SAIC Update and repair for ACVC 2.0.1
--
--!
package C854001_0 is
type Component is (Op_Of_Type, Op_Of_Subtype, Initial_Value);
type Root is record
Called : Component := Op_Of_Subtype;
end record;
procedure Root_Proc (P: in out Root);
procedure Over_Proc (P: in out Root);
function Root_Func return Root;
function Over_Func return Root;
type Short_Int is range 1 .. 98;
function "+" (P1, P2 : Short_Int) return Short_Int;
function Name (P1, P2 : Short_Int) return Short_Int;
type Tag_Type is tagged record
C : Component := Initial_Value;
end record;
-- Inherits predefined operator "=" and others.
function Predefined_Equal (P1, P2 : Tag_Type) return Boolean
renames "=";
-- Renames predefined operator "=" before overriding.
private
function "=" (P1, P2 : Tag_Type)
return Boolean; -- Overrides predefined operator "=".
end C854001_0;
--==================================================================--
package body C854001_0 is
procedure Root_Proc (P: in out Root) is
begin
P.Called := Initial_Value;
end Root_Proc;
---------------------------------------
procedure Over_Proc (P: in out Root) is
begin
P.Called := Op_Of_Type;
end Over_Proc;
---------------------------------------
function Root_Func return Root is
begin
return (Called => Op_Of_Type);
end Root_Func;
---------------------------------------
function Over_Func return Root is
begin
return (Called => Initial_Value);
end Over_Func;
---------------------------------------
function "+" (P1, P2 : Short_Int) return Short_Int is
begin
return 15;
end "+";
---------------------------------------
function Name (P1, P2 : Short_Int) return Short_Int is
begin
return 47;
end Name;
---------------------------------------
function "=" (P1, P2 : Tag_Type) return Boolean is
begin
return False;
end "=";
end C854001_0;
--==================================================================--
with C854001_0;
package C854001_1 is
subtype Root_Subtype is C854001_0.Root;
subtype Short_Int_Subtype is C854001_0.Short_Int;
procedure Ren_Proc (P: in out Root_Subtype);
procedure Same_Proc (P: in out Root_Subtype);
function Ren_Func return Root_Subtype;
function Same_Func return Root_Subtype;
function Other_Name (P1, P2 : Short_Int_Subtype) return Short_Int_Subtype;
function "-" (P1, P2 : Short_Int_Subtype) return Short_Int_Subtype;
function User_Defined_Equal (P1, P2 : C854001_0.Tag_Type) return Boolean
renames C854001_0."="; -- Executes body of the
-- overriding declaration in
-- the private part.
end C854001_1;
--==================================================================--
with C854001_0;
package body C854001_1 is
--
-- Renaming-as-body for procedure:
--
procedure Ren_Proc (P: in out Root_Subtype)
renames C854001_0.Root_Proc;
procedure Same_Proc (P: in out Root_Subtype)
renames C854001_0.Over_Proc;
--
-- Renaming-as-body for function:
--
function Ren_Func return Root_Subtype renames C854001_0.Root_Func;
function Same_Func return Root_Subtype renames C854001_0.Over_Func;
function Other_Name (P1, P2 : Short_Int_Subtype) return Short_Int_Subtype
renames C854001_0."+";
function "-" (P1, P2 : Short_Int_Subtype) return Short_Int_Subtype
renames C854001_0.Name;
end C854001_1;
--==================================================================--
with C854001_0;
with C854001_1; -- Subtype and associated operations.
use C854001_1;
with Report;
procedure C854001 is
Operand1 : Root_Subtype;
Operand2 : Root_Subtype;
Operand3 : Root_Subtype;
Operand4 : Root_Subtype;
Operand5 : Short_Int_Subtype := 55;
Operand6 : Short_Int_Subtype := 46;
Operand7 : Short_Int_Subtype;
Operand8 : C854001_0.Tag_Type; -- Both Operand8 & Operand9 have
Operand9 : C854001_0.Tag_Type; -- the same default values.
-- Direct visibility to operator symbols
use type C854001_0.Component;
use type C854001_0.Short_Int;
begin
Report.Test ("C854001", "Check that a renaming-as-body can be given " &
"in a package body to complete a subprogram " &
"declared in the package specification. " &
"Check that calls to the subprogram invoke " &
"the body of the renamed subprogram");
--
-- Only operations of the subtype are available.
--
Ren_Proc (Operand1);
if Operand1.Called /= C854001_0.Initial_Value then
Report.Failed ("Error calling procedure Ren_Proc");
end if;
---------------------------------------
Same_Proc (Operand2);
if Operand2.Called /= C854001_0.Op_Of_Type then
Report.Failed ("Error calling procedure Same_Proc");
end if;
---------------------------------------
Operand3 := Ren_Func;
if Operand3.Called /= C854001_0.Op_Of_Type then
Report.Failed ("Error calling function Ren_Func");
end if;
---------------------------------------
Operand4 := Same_Func;
if Operand4.Called /= C854001_0.Initial_Value then
Report.Failed ("Error calling function Same_Func");
end if;
---------------------------------------
Operand7 := C854001_1."-" (Operand5, Operand6);
if Operand7 /= 47 then
Report.Failed ("Error calling function & ""-""");
end if;
---------------------------------------
Operand7 := Other_Name (Operand5, Operand6);
if Operand7 /= 15 then
Report.Failed ("Error calling function Other_Name");
end if;
---------------------------------------
-- Executes body of the overriding declaration in the private part
-- of C854001_0.
if User_Defined_Equal (Operand8, Operand9) then
Report.Failed ("Error calling function User_Defined_Equal");
end if;
---------------------------------------
-- Executes predefined operation.
if not C854001_0.Predefined_Equal (Operand8, Operand9) then
Report.Failed ("Error calling function Predefined_Equal");
end if;
Report.Result;
end C854001;