cdd2a03.a

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

A
326
字号
-- CDD2A03.A----                             Grant of Unlimited Rights----     The Ada Conformity Assessment Authority (ACAA) holds unlimited--     rights in the software and documentation contained herein. Unlimited--     rights are the same as those granted by the U.S. Government for older--     parts of the Ada Conformity Assessment Test Suite, and are defined--     in DFAR 252.227-7013(a)(19). By making this public release, the ACAA--     intends to confer upon all recipients unlimited rights equal to those--     held by the ACAA. 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 the default Read and Write attributes for a limited type--    extension are created from the parent type's attribute (which may be--    user-defined) and those for the extension components, if the extension--    components are non-limited or have user-defined attributes.  Check that--    such limited type extension attributes are callable (Defect Report--    8652/0040, as reflected in Technical Corrigendum 1, penultimate sentence--     of 13.13.2(9/1) and 13.13.2(36/1)).---- CHANGE HISTORY:--     1 AUG 2001   PHL   Initial version.--     3 DEC 2001   RLB   Reformatted for ACATS.----!with Ada.Streams;use Ada.Streams;with FDD2A00;use FDD2A00;with Report;use Report;procedure CDD2A03 is    Input_Output_Error : exception;    type Int is range 1 .. 1000;    type Str is array (Int range <>) of Character;    procedure Read (Stream : access Root_Stream_Type'Class;                    Item : out Int'Base);    procedure Write (Stream : access Root_Stream_Type'Class; Item : Int'Base);    function Input (Stream : access Root_Stream_Type'Class) return Int'Base;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Int'Base);    for Int'Read use Read;    for Int'Write use Write;    for Int'Input use Input;    for Int'Output use Output;    type Lim is limited        record            C : Int;        end record;    procedure Read (Stream : access Root_Stream_Type'Class; Item : out Lim);    procedure Write (Stream : access Root_Stream_Type'Class; Item : Lim);    function Input (Stream : access Root_Stream_Type'Class) return Lim;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Lim);    for Lim'Read use Read;    for Lim'Write use Write;    for Lim'Input use Input;    for Lim'Output use Output;    type Parent (D1, D2 : Int; B : Boolean) is tagged limited        record            S : Str (D1 .. D2);            case B is                when False =>                    C1 : Integer;                when True =>                    C2 : Float;            end case;        end record;    procedure Read (Stream : access Root_Stream_Type'Class; Item : out Parent);    procedure Write (Stream : access Root_Stream_Type'Class; Item : Parent);    function Input (Stream : access Root_Stream_Type'Class) return Parent;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Parent);    for Parent'Read use Read;    for Parent'Write use Write;    for Parent'Input use Input;    for Parent'Output use Output;    procedure Actual_Read                 (Stream : access Root_Stream_Type'Class; Item : out Int) is    begin        Integer'Read (Stream, Integer (Item));    end Actual_Read;    procedure Actual_Write                 (Stream : access Root_Stream_Type'Class; Item : Int) is    begin        Integer'Write (Stream, Integer (Item));    end Actual_Write;    function Actual_Input (Stream : access Root_Stream_Type'Class) return Int is    begin        return Int (Integer'Input (Stream));    end Actual_Input;    procedure Actual_Output                 (Stream : access Root_Stream_Type'Class; Item : Int) is    begin        Integer'Output (Stream, Integer (Item));    end Actual_Output;    procedure Actual_Read                 (Stream : access Root_Stream_Type'Class; Item : out Lim) is    begin        Integer'Read (Stream, Integer (Item.C));    end Actual_Read;    procedure Actual_Write                 (Stream : access Root_Stream_Type'Class; Item : Lim) is    begin        Integer'Write (Stream, Integer (Item.C));    end Actual_Write;    function Actual_Input (Stream : access Root_Stream_Type'Class) return Lim is        Result : Lim;    begin        Result.C := Int (Integer'Input (Stream));        return Result;    end Actual_Input;    procedure Actual_Output                 (Stream : access Root_Stream_Type'Class; Item : Lim) is    begin        Integer'Output (Stream, Integer (Item.C));    end Actual_Output;    procedure Actual_Read                 (Stream : access Root_Stream_Type'Class; Item : out Parent) is    begin        case Item.B is            when False =>                Item.C1 := 7;            when True =>                Float'Read (Stream, Item.C2);        end case;        Str'Read (Stream, Item.S);    end Actual_Read;    procedure Actual_Write                 (Stream : access Root_Stream_Type'Class; Item : Parent) is    begin        case Item.B is            when False =>                null; -- Don't write C1            when True =>                Float'Write (Stream, Item.C2);        end case;        Str'Write (Stream, Item.S);    end Actual_Write;    function Actual_Input                (Stream : access Root_Stream_Type'Class) return Parent is        X : Parent (1, 1, True);    begin        raise Input_Output_Error;        return X;    end Actual_Input;    procedure Actual_Output                 (Stream : access Root_Stream_Type'Class; Item : Parent) is    begin        raise Input_Output_Error;    end Actual_Output;    package Int_Ops is new Counting_Stream_Ops (T => Int'Base,                                                Actual_Write => Actual_Write,                                                Actual_Input => Actual_Input,                                                Actual_Read => Actual_Read,                                                Actual_Output => Actual_Output);    package Lim_Ops is new Counting_Stream_Ops (T => Lim,                                                Actual_Write => Actual_Write,                                                Actual_Input => Actual_Input,                                                Actual_Read => Actual_Read,                                                Actual_Output => Actual_Output);    package Parent_Ops is       new Counting_Stream_Ops (T => Parent,                                Actual_Write => Actual_Write,                                Actual_Input => Actual_Input,                                Actual_Read => Actual_Read,                                Actual_Output => Actual_Output);    procedure Read (Stream : access Root_Stream_Type'Class; Item : out Int'Base)       renames Int_Ops.Read;    procedure Write (Stream : access Root_Stream_Type'Class; Item : Int'Base)       renames Int_Ops.Write;    function Input (Stream : access Root_Stream_Type'Class) return Int'Base       renames Int_Ops.Input;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Int'Base)       renames Int_Ops.Output;    procedure Read (Stream : access Root_Stream_Type'Class; Item : out Lim)       renames Lim_Ops.Read;    procedure Write (Stream : access Root_Stream_Type'Class; Item : Lim)       renames Lim_Ops.Write;    function Input (Stream : access Root_Stream_Type'Class) return Lim       renames Lim_Ops.Input;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Lim)       renames Lim_Ops.Output;    procedure Read (Stream : access Root_Stream_Type'Class; Item : out Parent)       renames Parent_Ops.Read;    procedure Write (Stream : access Root_Stream_Type'Class; Item : Parent)       renames Parent_Ops.Write;    function Input (Stream : access Root_Stream_Type'Class) return Parent       renames Parent_Ops.Input;    procedure Output (Stream : access Root_Stream_Type'Class; Item : Parent)       renames Parent_Ops.Output;    type Derived1 is new Parent with        record            C3 : Int;        end record;    type Derived2 (D : Int) is new Parent (D1 => D,                                           D2 => D,                                           B => False) with        record            C3 : Lim;        end record;begin    Test ("CDD2A03",          "Check that the default Read and Write attributes for a limited " &             "type extension are created from the parent type's " &             "attribute (which may be user-defined) and those for the " &             "extension components, if the extension components are " &             "non-limited or have user-defined attributes; check that such " &             "limited type extension attributes are callable");    Test1:        declare            S : aliased My_Stream (1000);            X1 : Derived1 (D1 => Int (Ident_Int (2)),                           D2 => Int (Ident_Int (5)),                           B => Ident_Bool (True));            X2 : Derived1 (D1 => Int (Ident_Int (2)),                           D2 => Int (Ident_Int (5)),                           B => Ident_Bool (True));        begin            X1.S := Str (Ident_Str ("bcde"));            X1.C2 := Float (Ident_Int (4));            X1.C3 := Int (Ident_Int (99));            Derived1'Write (S'Access, X1);            if Int_Ops.Get_Counts /=               (Read => 0, Write => 1, Input => 0, Output => 0) then                Failed ("Error writing extension components - 1");            end if;            if Parent_Ops.Get_Counts /=               (Read => 0, Write => 1, Input => 0, Output => 0) then                Failed ("Didn't call parent type's Write - 1");            end if;            Derived1'Read (S'Access, X2);            if Int_Ops.Get_Counts /=               (Read => 1, Write => 1, Input => 0, Output => 0) then                Failed ("Error reading extension components - 1");            end if;            if Parent_Ops.Get_Counts /=               (Read => 1, Write => 1, Input => 0, Output => 0) then                Failed ("Didn't call inherited Read - 1");            end if;        end Test1;    Test2:        declare            S : aliased My_Stream (1000);            X1 : Derived2 (D => Int (Ident_Int (7)));            X2 : Derived2 (D => Int (Ident_Int (7)));        begin            X1.S := Str (Ident_Str ("g"));            X1.C1 := Ident_Int (4);            X1.C3.C := Int (Ident_Int (666));            Derived2'Write (S'Access, X1);            if Lim_Ops.Get_Counts /=               (Read => 0, Write => 1, Input => 0, Output => 0) then                Failed ("Error writing extension components - 2");            end if;            if Parent_Ops.Get_Counts /=               (Read => 1, Write => 2, Input => 0, Output => 0) then                Failed ("Didn't call inherited Write - 2");            end if;            Derived2'Read (S'Access, X2);            if Lim_Ops.Get_Counts /=               (Read => 1, Write => 1, Input => 0, Output => 0) then                Failed ("Error reading extension components - 2");            end if;            if Parent_Ops.Get_Counts /=               (Read => 2, Write => 2, Input => 0, Output => 0) then                Failed ("Didn't call inherited Read - 2");            end if;        end Test2;    Result;end CDD2A03;

⌨️ 快捷键说明

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