cc51001.a

来自「linux下编程用 编译软件」· A 代码 · 共 187 行

A
187
字号
-- CC51001.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 formal parameter of a generic package may be a formal--      derived type. Check that the formal derived type may have an unknown--      discriminant part. Check that the ancestor type in a formal derived--      type definition may be a tagged type, and that the actual parameter--      may be a descendant of the ancestor type. Check that the formal derived--      type belongs to the derivation class rooted at the ancestor type;--      specifically, that components of the ancestor type may be referenced--      within the generic. Check that if a formal derived subtype is--      indefinite then the actual may be either definite or indefinite.---- TEST DESCRIPTION:--      Define a class of tagged types with a definite root type. Extend the--      root type with a discriminated component. Since discriminants of--      tagged types may not have defaults, the type is indefinite.----      Extend the extension with a second discriminated component, but with--      a new discriminant part. Declare a generic package with a formal--      derived type using the root type of the class as ancestor, and an--      unknown discriminant part. Declare an operation in the generic which--      accesses the common component of types in the class.----      In the main program, instantiate the generic with each type in the--      class and verify that the operation correctly accesses the common--      component.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!package CC51001_0 is  -- Root type for message class.   subtype Msg_String is String (1 .. 20);   type Msg_Type is tagged record                          -- Root type of      Text : Msg_String := (others => ' ');                -- class (definite).   end record;end CC51001_0;-- No body for CC51001_0.     --==================================================================--with CC51001_0;       -- Root type for message class.package CC51001_1 is  -- Extensions to message class.   subtype Source_Length is Natural range 0 .. 10;   type From_Msg_Type (SLen : Source_Length) is            -- Direct derivative     new CC51001_0.Msg_Type with record                    -- of root type      From : String (1 .. SLen);                           -- (indefinite).   end record;   subtype Dest_Length is Natural range 0 .. 10;   type To_From_Msg_Type (DLen : Dest_Length) is           -- Indirect     new From_Msg_Type (SLen => 10) with record            -- derivative of      To : String (1 .. DLen);                             -- root type   end record;                                             -- (indefinite).end CC51001_1;-- No body for CC51001_1.     --==================================================================--with CC51001_0;       -- Root type for message class.generic               -- I/O operations for message class.   type Message_Type (<>) is new CC51001_0.Msg_Type with private;package CC51001_2 is   -- This subprogram contains an artificial result for testing purposes:   -- the function returns the text of the message to the caller as a string.   function Print_Message (M : in Message_Type) return String;   -- ... Other operations.end CC51001_2;     --==================================================================--package body CC51001_2 is   -- The implementations of the operations below are purely artificial; the   -- validity of their implementations in the context of the abstraction is   -- irrelevant to the feature being tested.   function Print_Message (M : in Message_Type) return String is   begin      return M.Text;   end Print_Message;end CC51001_2;     --==================================================================--with CC51001_0;  -- Root type for message class.with CC51001_1;  -- Extensions to message class.with CC51001_2;  -- I/O operations for message class.with Report;procedure CC51001 is   -- Instantiate for various types in the class:   package Msgs   is new CC51001_2 (CC51001_0.Msg_Type);         -- Definite.   package FMsgs  is new CC51001_2 (CC51001_1.From_Msg_Type);    -- Indefinite.   package TFMsgs is new CC51001_2 (CC51001_1.To_From_Msg_Type); -- Indefinite.   Msg   : CC51001_0.Msg_Type         := (Text => "This is message #001");   FMsg  : CC51001_1.From_Msg_Type    := (Text => "This is message #002",                                          SLen => 2,                                          From => "Me");   TFMsg : CC51001_1.To_From_Msg_Type := (Text => "This is message #003",                                          From => "You       ",                                          DLen => 4,                                          To   => "Them");   Expected_Msg   : constant String := "This is message #001";   Expected_FMsg  : constant String := "This is message #002";   Expected_TFMsg : constant String := "This is message #003";begin   Report.Test ("CC51001", "Check that the formal derived type may have " &                "an unknown discriminant part. Check that the ancestor " &                "type in a formal derived type definition may be a " &                "tagged type, and that the actual parameter may be any " &                "definite or indefinite descendant of the ancestor type");   if (Msgs.Print_Message (Msg) /= Expected_Msg) then      Report.Failed ("Wrong result for definite root type");   end if;   if (FMsgs.Print_Message (FMsg) /= Expected_FMsg) then      Report.Failed ("Wrong result for direct indefinite derivative");   end if;   if (TFMsgs.Print_Message (TFMsg) /= Expected_TFMsg) then      Report.Failed ("Wrong result for Indirect indefinite derivative");   end if;   Report.Result;end CC51001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?