aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/ca/ca11019.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/ca/ca11019.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/ca/ca11019.a306
1 files changed, 0 insertions, 306 deletions
diff --git a/gcc/testsuite/ada/acats/tests/ca/ca11019.a b/gcc/testsuite/ada/acats/tests/ca/ca11019.a
deleted file mode 100644
index 92b3ba5358b..00000000000
--- a/gcc/testsuite/ada/acats/tests/ca/ca11019.a
+++ /dev/null
@@ -1,306 +0,0 @@
--- CA11019.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 body of the parent package may depend on one of its own
--- private generic children.
---
--- TEST DESCRIPTION:
--- A scenario is created that demonstrates the potential of adding a
--- generic private child during code maintenance without distubing a
--- large subsystem. After child is added to the subsystem, a maintainer
--- decides to take advantage of the new functionality and rewrites
--- the parent's body.
---
--- Declare a data collection abstraction in a package. Declare a private
--- generic child of this package which provides parameterized code that
--- have been written once and will be used three times to implement the
--- services of the parent package. In the parent body, instantiate the
--- private child.
---
--- In the main program, check that the operations in the parent,
--- and instance of the private child package perform as expected.
---
---
--- CHANGE HISTORY:
--- 06 Dec 94 SAIC ACVC 2.0
--- 17 Nov 95 SAIC Update and repair for ACVC 2.0.1
---
---!
-
-package CA11019_0 is
- -- parent
-
- type Data_Record is tagged private;
- type Data_Collection is private;
- ---
- ---
- subtype Data_1 is integer range 0 .. 100;
- procedure Add_1 (Data : Data_1; To : in out Data_Collection);
- function Statistical_Op_1 (Data : Data_Collection) return Data_1;
- ---
- subtype Data_2 is integer range -100 .. 1000;
- procedure Add_2 (Data : Data_2; To : in out Data_Collection);
- function Statistical_Op_2 (Data : Data_Collection) return Data_2;
- ---
- subtype Data_3 is integer range -10_000 .. 10_000;
- procedure Add_3 (Data : Data_3; To : in out Data_Collection);
- function Statistical_Op_3 (Data : Data_Collection) return Data_3;
- ---
-
-private
-
- type Data_Ptr is access Data_Record'class;
- subtype Sequence_Number is positive range 1 .. 512;
-
- type Data_Record is tagged
- record
- Next : Data_Ptr := null;
- Seq : Sequence_Number;
- end record;
- ---
- type Data_Collection is
- record
- First : Data_Ptr := null;
- Last : Data_Ptr := null;
- end record;
-
-end CA11019_0;
- -- parent
-
- --=================================================================--
-
--- This generic package provides parameterized code that has been
--- written once and will be used three times to implement the services
--- of the parent package.
-
-private
-generic
- type Data_Type is range <>;
-
-package CA11019_0.CA11019_1 is
- -- parent.child
-
- type Data_Elem is new Data_Record with
- record
- Value : Data_Type;
- end record;
-
- Next_Avail_Seq_No : Sequence_Number := 1;
-
- procedure Sequence (Ptr : Data_Ptr);
- -- the child must be private for this procedure to know details of
- -- the implementation of data collections
-
- procedure Add (Datum : Data_Type; To : in out Data_Collection);
-
- function Op (Data : Data_Collection) return Data_Type;
- -- op models a complicated operation that whose code can be
- -- used for various data types
-
-
-end CA11019_0.CA11019_1;
- -- parent.child
-
- --=================================================================--
-
-
-package body CA11019_0.CA11019_1 is
- -- parent.child
-
- procedure Sequence (Ptr : Data_Ptr) is
- begin
- Ptr.Seq := Next_Avail_Seq_No;
- Next_Avail_Seq_No := Next_Avail_Seq_No + 1;
- end Sequence;
-
- ---------------------------------------------------------
-
- procedure Add (Datum : Data_Type; To : in out Data_Collection) is
- Ptr : Data_Ptr;
- begin
- if To.First = null then
- -- assign new record with data value to
- -- to.next <- null;
- To.First := new Data_Elem'(Next => null,
- Value => Datum,
- Seq => 1);
- Sequence (To.First);
- To.Last := To.First;
- else
- -- chase to end of list
- Ptr := To.First;
- while Ptr.Next /= null loop
- Ptr := Ptr.Next;
- end loop;
- -- and add element there
- Ptr.Next := new Data_Elem'(Next => null,
- Value => Datum,
- Seq => 1);
- Sequence (Ptr.Next);
- To.Last := Ptr.Next;
- end if;
-
- end Add;
-
- ---------------------------------------------------------
-
- function Op (Data : Data_Collection) return Data_Type is
- -- for simplicity, just return the maximum of the data set
- Max : Data_Type := Data_Elem( Data.First.all ).Value;
- -- assuming non-empty collection
- Ptr : Data_Ptr := Data.First;
-
- begin
- -- no error checking
- while Ptr.Next /= null loop
- if Data_Elem( Ptr.Next.all ).Value > Max then
- Max := Data_Elem( Ptr.Next.all ).Value;
- end if;
- Ptr := Ptr.Next;
- end loop;
- return Max;
- end Op;
-
-end CA11019_0.CA11019_1;
- -- parent.child
-
- --=================================================================--
-
--- parent body depends on private generic child
-with CA11019_0.CA11019_1; -- Private generic child.
-
-pragma Elaborate (CA11019_0.CA11019_1);
-package body CA11019_0 is
-
- -- instantiate the generic child with data types needed by the
- -- package interface services
- package Data_1_Ops is new CA11019_1
- (Data_Type => Data_1);
-
- package Data_2_Ops is new CA11019_1
- (Data_Type => Data_2);
-
- package Data_3_Ops is new CA11019_1
- (Data_Type => Data_3);
-
- ---------------------------------------------------------
-
- procedure Add_1 (Data : Data_1; To : in out Data_Collection) is
- begin
- -- maybe do other stuff here
- Data_1_Ops.Add (Data, To);
- -- and here
- end;
-
- ---------------------------------------------------------
-
- function Statistical_Op_1 (Data : Data_Collection) return Data_1 is
- begin
- -- maybe use generic operation(s) in some complicated ways
- -- (but simplified out, for the sake of testing)
- return Data_1_Ops.Op (Data);
- end;
-
- ---------------------------------------------------------
-
- procedure Add_2 (Data : Data_2; To : in out Data_Collection) is
- begin
- Data_2_Ops.Add (Data, To);
- end;
-
- ---------------------------------------------------------
-
- function Statistical_Op_2 (Data : Data_Collection) return Data_2 is
- begin
- return Data_2_Ops.Op (Data);
- end;
-
- ---------------------------------------------------------
-
- procedure Add_3 (Data : Data_3; To : in out Data_Collection) is
- begin
- Data_3_Ops.Add (Data, To);
- end;
-
- ---------------------------------------------------------
-
- function Statistical_Op_3 (Data : Data_Collection) return Data_3 is
- begin
- return Data_3_Ops.Op (Data);
- end;
-
-end CA11019_0;
-
-
- --=================================================--
-
-with CA11019_0,
- -- Main,
- -- Main.Child is private
- Report;
-
-procedure CA11019 is
-
- package Main renames CA11019_0;
-
- Col_1,
- Col_2,
- Col_3 : Main.Data_Collection;
-
-begin
-
- Report.Test ("CA11019", "Check that body of a (non-generic) package " &
- "may depend on its private generic child");
-
- -- build a data collection
-
- for I in 1 .. 10 loop
- Main.Add_1 ( Main.Data_1(I), Col_1);
- end loop;
-
- if Main.Statistical_Op_1 (Col_1) /= 10 then
- Report.Failed ("Wrong data_1 value returned");
- end if;
-
- for I in reverse 10 .. 20 loop
- Main.Add_2 ( Main.Data_2(I * 10), Col_2);
- end loop;
-
- if Main.Statistical_Op_2 (Col_2) /= 200 then
- Report.Failed ("Wrong data_2 value returned");
- end if;
-
- for I in 0 .. 10 loop
- Main.Add_3 ( Main.Data_3(I + 5), Col_3);
- end loop;
-
- if Main.Statistical_Op_3 (Col_3) /= 15 then
- Report.Failed ("Wrong data_3 value returned");
- end if;
-
- Report.Result;
-
-end CA11019;