c392014.a

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

A
228
字号
-- C392014.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 objects designated by X'Access (where X is of a class-wide--    type) and new T'Class'(...) are dynamically tagged and can be used in--    dispatching calls.  (Defect Report 8652/0010).---- CHANGE HISTORY:--    18 JAN 2001   PHL   Initial version--    15 MAR 2001   RLB   Readied for release.--    03 JUN 2004   RLB   Removed constraint for S0, as the subtype has--                        unknown discriminants.--!package C392014_0 is    type T (D : Integer) is abstract tagged private;    procedure P (X : access T) is abstract;    function Create (X : Integer) return T'Class;    Result : Natural := 0;private    type T (D : Integer) is abstract tagged null record;end C392014_0;with C392014_0;package C392014_1 is    type T is new C392014_0.T with private;    function Create (X : Integer) return T'Class;private    type T is new C392014_0.T with	record	    C1 : Integer;	end record;    procedure P (X : access T);end C392014_1;package C392014_1.Child is    type T is new C392014_1.T with private;    procedure P (X : access T);    function Create (X : Integer) return T'Class;private    type T is new C392014_1.T with	record	    C1C : Integer;	end record;end C392014_1.Child;with Report;use Report;with C392014_1.Child;package body C392014_1 is    procedure P (X : access T) is    begin	C392014_0.Result := C392014_0.Result + X.D + X.C1;    end P;    function Create (X : Integer) return T'Class is    begin	case X mod Ident_Int (2) is	    when 0 =>		return C392014_1.Child.Create (X / Ident_Int (2));	    when 1 =>		declare		    Y : T (D => (X / Ident_Int (2)) mod Ident_Int (20));		begin		    Y.C1 := X / Ident_Int (40);		    return T'Class (Y);		end;	    when others =>		null;	end case;    end Create;end C392014_1;with C392014_0;with C392014_1;package C392014_2 is    type T is new C392014_0.T with private;    function Create (X : Integer) return T'Class;private    type T is new C392014_1.T with	record	    C2 : Integer;	end record;    procedure P (X : access T);end C392014_2;with Report;use Report;with C392014_1.Child;with C392014_2;package body C392014_0 is    function Create (X : Integer) return T'Class is    begin	case X mod 3 is	    when 0 =>		return C392014_1.Create (X / Ident_Int (3));	    when 1 =>		return C392014_1.Child.Create (X / Ident_Int (3));	    when 2 =>		return C392014_2.Create (X / Ident_Int (3));	    when others =>		null;	end case;    end Create;end C392014_0;with Report;use Report;with C392014_0;package body C392014_1.Child is    procedure P (X : access T) is    begin	C392014_0.Result := C392014_0.Result + X.D + X.C1 + X.C1C;    end P;    function Create (X : Integer) return T'Class is	Y : T (D => X mod Ident_Int (20));    begin	Y.C1 := (X / Ident_Int (20)) mod Ident_Int (20);	Y.C1C := X / Ident_Int (400);	return T'Class (Y);    end Create;end C392014_1.Child;with Report;use Report;package body C392014_2 is    procedure P (X : access T) is    begin	C392014_0.Result := C392014_0.Result + X.D + X.C2;    end P;    function Create (X : Integer) return T'Class is	Y : T (D => X mod Ident_Int (20));    begin	Y.C2 := X / Ident_Int (600);	return T'Class (Y);    end Create;end C392014_2;with Report;use Report;with C392014_0;with C392014_1.Child;with C392014_2;procedure C392014 is    subtype S0 is C392014_0.T'Class;    subtype S1 is C392014_1.T'Class;    X0 : aliased C392014_0.T'Class := C392014_0.Create (Ident_Int (5218));    X1 : aliased C392014_1.T'Class := C392014_1.Create (Ident_Int (8253));    Y0 : aliased S0 := C392014_0.Create (Ident_Int (2693));    Y1 : aliased S1 := C392014_1.Create (Ident_Int (5622));    procedure TC_Check (Subtest : String; Expected : Integer) is    begin	if C392014_0.Result = Expected then	    Comment ("Subtest " & Subtest & " Passed");	else	    Failed ("Subtest " & Subtest & " Failed");	end if;	C392014_0.Result := Ident_Int (0);    end TC_Check;begin    Test ("C392014",	  "Check that objects designated by X'Access " &	     "(where X is of a class-wide type) and New T'Class'(...) " &	     "are dynamically tagged and can be used in dispatching " &	     "calls");    C392014_0.P (X0'Access);    TC_Check ("X0'Access", Ident_Int (29));    C392014_0.P (new C392014_0.T'Class'(C392014_0.Create (Ident_Int (12850))));    TC_Check ("New C392014_0.T'Class", Ident_Int (27));    C392014_1.P (X1'Access);    TC_Check ("X1'Access", Ident_Int (212));    C392014_1.P (new C392014_1.T'Class'(C392014_1.Create (Ident_Int (2031))));    TC_Check ("New C392014_1.T'Class", Ident_Int (65));    C392014_0.P (Y0'Access);    TC_Check ("Y0'Access", Ident_Int (18));    C392014_0.P (new S0'(C392014_0.Create (Ident_Int (6893))));    TC_Check ("New S0", Ident_Int (20));    C392014_1.P (Y1'Access);    TC_Check ("Y1'Access", Ident_Int (18));    C392014_1.P (new S1'(C392014_1.Create (Ident_Int (1861))));    TC_Check ("New S1", Ident_Int (56));    Result;end C392014;

⌨️ 快捷键说明

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