c392013.a

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

A
180
字号
-- C392013.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 "/=" implicitly declared with the declaration of "=" for--    a tagged type is legal and can be used in a dispatching call.--    (Defect Report 8652/0010, as reflected in Technical Corrigendum 1).---- CHANGE HISTORY:--    23 JAN 2001   PHL   Initial version.--    16 MAR 2001   RLB   Readied for release; added identity and negative--                        result cases.--    24 MAY 2001   RLB   Corrected the result for the 9 vs. 9 case.--!with Report;use Report;procedure C392013 is    package P1 is        type T is tagged            record                C1 : Integer;            end record;        function "=" (L, R : T) return Boolean;    end P1;    package P2 is        type T is new P1.T with private;        function Make (Ancestor : P1.T; X : Float) return T;    private        type T is new P1.T with            record                C2 : Float;            end record;        function "=" (L, R : T) return Boolean;    end P2;    package P3 is        type T is new P2.T with            record                C3 : Character;            end record;    private        function "=" (L, R : T) return Boolean;        function Make (Ancestor : P1.T; X : Float) return T;    end P3;    package body P1 is separate;    package body P2 is separate;    package body P3 is separate;    type Cwat is access P1.T'Class;    type Cwat_Array is array (Positive range <>) of Cwat;    A : constant Cwat_Array :=       (1 => new P1.T'(C1 => Ident_Int (3)),        2 => new P2.T'(P2.Make (Ancestor => (C1 => Ident_Int (5)), X => 4.0)),        3 => new P2.T'(P2.Make (Ancestor => (C1 => Ident_Int (-5)), X => 4.2)),        4 => new P1.T'(C1 => Ident_Int (-3)),        5 => new P2.T'(P2.Make (Ancestor => (C1 => Ident_Int (5)), X => 3.6)),        6 => new P1.T'(C1 => Ident_Int (4)),        7 => new P3.T'(P2.Make                          (Ancestor => (C1 => Ident_Int (4)), X => 1.2) with                       Ident_Char ('a')),        8 => new P3.T'(P2.Make                          (Ancestor => (C1 => Ident_Int (-4)), X => 1.3) with                       Ident_Char ('A')),        9 => new P3.T'(P2.Make                          (Ancestor => (C1 => Ident_Int (4)), X => 1.0) with                       Ident_Char ('B')));    type Truth is ('F', 'T');    type Truth_Table is array (Positive range <>, Positive range <>) of Truth;    Equality : constant Truth_Table (A'Range, A'Range) := ("TFFTFFFFF",                                                           "FTTFTFFFF",                                                           "FTTFFFFFF",                                                           "TFFTFFFFF",                                                           "FTFFTFFFF",                                                           "FFFFFTFFF",                                                           "FFFFFFTTF",                                                           "FFFFFFTTF",                                                           "FFFFFFFFT");begin    Test ("C392013", "Check that the ""/="" implicitly declared " &                        "with the declaration of ""="" for a tagged " &                        "type is legal and can be used in a dispatching call");    for I in A'Range loop        for J in A'Range loop	    -- Test identity:            if P1."=" (A (I).all, A (J).all) /=                  (not P1."/=" (A (I).all, A (J).all)) then                Failed ("Incorrect identity comparing objects" &                        Positive'Image (I) & " and" & Positive'Image (J));            end if;            -- Test the result of "/=":            if Equality (I, J) = 'T' then                if P1."/=" (A (I).all, A (J).all) then                    Failed ("Incorrect result comparing objects" &                           Positive'Image (I) & " and" & Positive'Image (J) & " - T");                end if;            else                if not P1."/=" (A (I).all, A (J).all) then                    Failed ("Incorrect result comparing objects" &                           Positive'Image (I) & " and" & Positive'Image (J) & " - F");                end if;            end if;        end loop;    end loop;    Result;end C392013;separate (C392013)package body P1 is    function "=" (L, R : T) return Boolean is    begin        return abs L.C1 = abs R.C1;    end "=";end P1;separate (C392013)package body P2 is    function "=" (L, R : T) return Boolean is    begin        return P1."=" (P1.T (L), P1.T (R)) and then abs (L.C2 - R.C2) <= 0.5;    end "=";    function Make (Ancestor : P1.T; X : Float) return T is    begin        return (Ancestor with X);    end Make;end P2;with Ada.Characters.Handling;separate (C392013)package body P3 is    function "=" (L, R : T) return Boolean is    begin        return P2."=" (P2.T (L), P2.T (R)) and then                  Ada.Characters.Handling.To_Upper (L.C3) =                     Ada.Characters.Handling.To_Upper (R.C3);    end "=";    function Make (Ancestor : P1.T; X : Float) return T is    begin        return (P2.Make (Ancestor, X) with ' ');    end Make;end P3;

⌨️ 快捷键说明

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