URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cc/] [cc51a01.a] - Rev 720
Compare with Previous | Blame | View Log
-- CC51A01.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, in an instance, each implicit declaration of a user-defined-- subprogram of a formal derived record type declares a view of the-- corresponding primitive subprogram of the ancestor, even if the-- primitive subprogram has been overridden for the actual type.---- TEST DESCRIPTION:-- Declare a "fraction" type abstraction in a package (foundation code).-- Declare a "fraction" I/O routine in a generic package with a formal-- derived type whose ancestor type is the fraction type declared in-- the first package. Within the I/O routine, call other operations of-- ancestor type. Derive from the root fraction type in another package-- and override one of the operations called in the generic I/O routine.-- Derive from the derivative of the root fraction type. Instantiate-- the generic package for each of the three types and call the I/O-- routine.---- TEST FILES:-- The following files comprise this test:---- FC51A00.A-- CC51A01.A------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!with FC51A00; -- Fraction type abstraction.generic -- Fraction I/O support.type Fraction is new FC51A00.Fraction_Type; -- Formal derived type of apackage CC51A01_0 is -- (private) record type.-- Simulate writing a fraction to standard output. In a real application,-- this subprogram might be a procedure which uses Text_IO routines. For-- the purposes of the test, the "output" is returned to the caller as a-- string.function Put (Item : in Fraction) return String;-- ... Other I/O operations for fractions.end CC51A01_0;--==================================================================--package body CC51A01_0 isfunction Put (Item : in Fraction) return String isNum : constant String := -- Fraction's primitive subprogramsInteger'Image (Numerator (Item)); -- are inherited from its parentDen : constant String := -- (FC51A00.Fraction_Type) and NOTInteger'Image (Denominator (Item)); -- from the actual type.beginreturn (Num & '/' & Den);end Put;end CC51A01_0;--==================================================================--with FC51A00; -- Fraction type abstraction.package CC51A01_1 is-- Derive directly from the root type of the class and override one of the-- primitive subprograms.type Pos_Fraction is new FC51A00.Fraction_Type; -- Derived directly from-- root type of class.-- Inherits "/" from root type.-- Inherits "-" from root type.-- Inherits Numerator from root type.-- Inherits Denominator from root type.-- Return absolute value of numerator as integer.function Numerator (Frac : Pos_Fraction) -- Overrides parent'sreturn Integer; -- operation.end CC51A01_1;--==================================================================--package body CC51A01_1 is-- This body should never be called.---- The test sends the function Numerator a fraction with a negative-- numerator, and expects this negative numerator to be returned. This-- version of the function returns the absolute value of the numerator.-- Thus, a call to this version is detectable by examining the sign-- of the return value.function Numerator (Frac : Pos_Fraction) return Integer isConverted_Frac : FC51A00.Fraction_Type := FC51A00.Fraction_Type (Frac);Orig_Numerator : Integer := FC51A00.Numerator (Converted_Frac);beginreturn abs (Orig_Numerator);end Numerator;end CC51A01_1;--==================================================================--with FC51A00; -- Fraction type abstraction.with CC51A01_0; -- Fraction I/O support.with CC51A01_1; -- Positive fraction type abstraction.with Report;procedure CC51A01 istype Distance is new CC51A01_1.Pos_Fraction; -- Derived indirectly from-- root type of class.-- Inherits "/" indirectly from root type.-- Inherits "-" indirectly from root type.-- Inherits Numerator directly from parent type.-- Inherits Denominator indirectly from root type.use FC51A00, CC51A01_1; -- All primitive subprograms-- directly visible.package Fraction_IO is new CC51A01_0 (Fraction_Type);package Pos_Fraction_IO is new CC51A01_0 (Pos_Fraction);package Distance_IO is new CC51A01_0 (Distance);-- For each of the instances above, the subprogram "Put" should produce-- the same result. That is, the primitive subprograms called by Put-- should in all cases be those of the type Fraction_Type, which is the-- ancestor type for the formal derived type in the generic unit. In-- particular, for Pos_Fraction_IO and Distance_IO, the versions of-- Numerator called should NOT be those of the actual types, which override-- Fraction_Type's version.TC_Expected_Result : constant String := "-3/ 16";TC_Root_Type_Of_Class : Fraction_Type := -3/16;TC_Direct_Derivative : Pos_Fraction := -3/16;TC_Indirect_Derivative : Distance := -3/16;beginReport.Test ("CC51A01", "Check that, in an instance, each implicit " &"declaration of a user-defined subprogram of a formal " &"derived record type declares a view of the corresponding " &"primitive subprogram of the ancestor, even if the " &"primitive subprogram has been overridden for the actual " &"type");if (Fraction_IO.Put (TC_Root_Type_Of_Class) /= TC_Expected_Result) thenReport.Failed ("Wrong result for root type");end if;if (Pos_Fraction_IO.Put (TC_Direct_Derivative) /= TC_Expected_Result) thenReport.Failed ("Wrong result for direct derivative");end if;if (Distance_IO.Put (TC_Indirect_Derivative) /= TC_Expected_Result) thenReport.Failed ("Wrong result for INdirect derivative");end if;Report.Result;end CC51A01;
