URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cc/] [cc54002.a] - Rev 720
Compare with Previous | Blame | View Log
-- CC54002.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 general access-to-variable type may be passed as an-- actual to a generic formal general access-to-variable type. Check that-- designated objects may be read and updated through the access value.---- TEST DESCRIPTION:-- The generic implements a List of access objects as an array, which-- is itself a component of a record. The designated type of the formal-- access type is a formal private type declared in the same generic-- formal part.---- The access objects to be placed in the List are created both-- statically and dynamically, utilizing allocators and the 'Access-- attribute.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0-- 10 Apr 96 SAIC ACVC 2.1: Added pragma Elaborate to context clause-- preceding CC54002_1.----!genericSize : in Positive;type Element_Type (<>) is private;type Element_Ptr is access all Element_Type;package CC54002_0 is -- Generic list of pointers.subtype Index is Positive range 1 .. (Size + 1);type List_Array is array (Index) of Element_Ptr;type List_Type is recordElements : List_Array;Next : Index := 1; -- Next available "slot" in list.end record;procedure Put (List : in out List_Type;Elem_Ptr : in Element_Ptr;Location : in Index);procedure Get (List : in out List_Type;Elem_Ptr : out Element_Ptr;Location : in Index);-- ... Other operations.end CC54002_0;--===================================================================--package body CC54002_0 isprocedure Put (List : in out List_Type;Elem_Ptr : in Element_Ptr;Location : in Index) isbeginList.Elements(Location) := Elem_Ptr;end Put;procedure Get (List : in out List_Type;Elem_Ptr : out Element_Ptr;Location : in Index) isbegin -- Artificial: no provision for getting "empty" element.Elem_Ptr := List.Elements(Location);end Get;end CC54002_0;--===================================================================--with CC54002_0; -- Generic List of pointers.pragma Elaborate (CC54002_0);package CC54002_1 issubtype Lengths is Natural range 0 .. 50;type Subscriber (NLen, ALen: Lengths := 50) is recordName : String(1 .. NLen);Address : String(1 .. ALen);-- ... Other components.end record;type Subscriber_Ptr is access all Subscriber; -- General access-to--- variable type.package District_Subscription_Lists is new CC54002_0(Element_Type => Subscriber,Element_Ptr => Subscriber_Ptr,Size => 100);District_01_Subscribers : District_Subscription_Lists.List_Type;New_Subscriber_01 : aliased CC54002_1.Subscriber :=(12, 23, "Brown, Silas", "King's Pyland, Dartmoor");New_Subscriber_02 : aliased CC54002_1.Subscriber :=(16, 23, "Hatherly, Victor", "16A Victoria St. London");end CC54002_1;-- No body for CC54002_1.--===================================================================--with CC54002_1;with Report;procedure CC54002 isMod_Subscriber_01 : constant CC54002_1.Subscriber :=(12, 23, "Brown, Silas", "Mapleton, Dartmoor ");TC_Actual_01, TC_Actual_02 : CC54002_1.Subscriber_Ptr;use type CC54002_1.Subscriber; -- "/=" directly visible.beginReport.Test ("CC54002", "Check that a general access-to-variable type " &"may be passed as an actual to a generic formal " &"access-to-variable type");-- Add elements to the list:CC54002_1.District_Subscription_Lists.Put -- Element created statically.(List => CC54002_1.District_01_Subscribers,Elem_Ptr => CC54002_1.New_Subscriber_01'Access,Location => 1);CC54002_1.District_Subscription_Lists.Put -- Element created dynamically.(List => CC54002_1.District_01_Subscribers,Elem_Ptr => new CC54002_1.Subscriber'(CC54002_1.New_Subscriber_02),Location => 2);-- Manipulation of the objects on the list is performed below directly-- through the access objects. Although such manipulation is artificial-- from the perspective of this usage model, it is not artificial in-- general and is necessary in order to test the objective.-- Modify the first list element through the access object:CC54002_1.District_01_Subscribers.Elements(1).Address := -- Update"Mapleton, Dartmoor "; -- Implicit dereference. -- through the-- access-- object.-- Retrieve elements of the list:CC54002_1.District_Subscription_Lists.Get(CC54002_1.District_01_Subscribers,TC_Actual_01,1);CC54002_1.District_Subscription_Lists.Get(CC54002_1.District_01_Subscribers,TC_Actual_02,2);-- Verify list contents in two ways: 1st verify the directly-dereferenced-- access objects against the dereferenced access objects returned by Get;-- 2nd verify them against objects the expected values:-- Read-- through the-- access-- objects.if CC54002_1.District_01_Subscribers.Elements(1).all /= TC_Actual_01.allor elseCC54002_1.District_01_Subscribers.Elements(2).all /= TC_Actual_02.allthenReport.Failed ("Wrong results returned by Get");elsif CC54002_1.District_01_Subscribers.Elements(1).all /=Mod_Subscriber_01orCC54002_1.District_01_Subscribers.Elements(2).all /=CC54002_1.New_Subscriber_02thenReport.Failed ("List elements do not have expected values");end if;Report.Result;end CC54002;
