ca11d013.am

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

AM
257
字号
-- CA11D013.AM----                             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 child unit can raise an exception that is declared in --      parent.                ---- TEST DESCRIPTION:--      Declare a package which defines complex number abstraction with--      user-defined exceptions (foundation code).----      Add a public child package to the above package. Declare two --      subprograms for the parent type.  Each of the subprograms raises a --      different exception, based on the value of an input parameter.----      Add a public child procedure to the foundation package.  This--      procedure raises an exception based on the value of an input --      parameter.----      Add a public child function to the foundation package.  This--      function raises an exception based on the value of an input --      parameter.----      In the main program, "with" the child packages, then check that--      the exceptions are raised and handled as expected.  Ensure that--      exceptions are:--         1) raised in the public child package and handled/reraised to--            be handled by the main program.--         2) raised and handled locally in the public child package.--         3) raised and handled locally by "others" in the public child --            procedure.--         4) raised in the public child function and propagated to the--            main program.---- TEST FILES:--      The following files comprise this test:----         FA11D00.A--         CA11D010.A--         CA11D011.A--         CA11D012.A--      => CA11D013.AM------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!with FA11D00.CA11D010;               -- Add_Subtract_Complexwith FA11D00.CA11D011;               -- Multiply_Complexwith FA11D00.CA11D012;               -- Divide_Complexwith Report;procedure CA11D013 is   package Complex_Pkg renames FA11D00;   package Add_Subtract_Complex_Pkg renames FA11D00.CA11D010;   use Complex_Pkg;begin   Report.Test ("CA11D013", "Check that a child unit can raise an " &                "exception that is declared in parent");   Add_Complex_Subtest:   declare      First       : Complex_Type := Complex (Int_Type (Report.Ident_Int (3)),                                     Int_Type (Report.Ident_Int (7)));        Second      : Complex_Type := Complex (Int_Type (Report.Ident_Int (5)),                                     Int_Type (Report.Ident_Int (3)));        Add_Result  : Complex_Type := Complex (Int_Type (Report.Ident_Int (8)),                                     Int_Type (Report.Ident_Int (10)));        Third       : Complex_Type := Complex (Int_Type(Report.Ident_Int(-100)),                                     Int_Type (Report.Ident_Int (100)));        Complex_Num : Complex_Type := Zero;     begin      Add_Subtract_Complex_Pkg.Add (First, Second, Complex_Num);      if (Complex_Num /= Add_Result) then         Report.Failed ("Incorrect results from addition");      end if;        -- Error is raised in child package and exception       -- will be handled/reraised to caller.      Add_Subtract_Complex_Pkg.Add (First, Third, Complex_Num);      -- Error was not raised in child package.      Report.Failed ("Exception was not reraised in addition");   exception      when Add_Error     =>          if not TC_Handled_In_Child_Pkg_Proc then            Report.Failed ("Exception was not raised in addition");         else            TC_Handled_In_Caller := true;  -- Exception is reraised from                                           -- child package.         end if;      when others =>          Report.Failed ("Unexpected exception in addition subtest");          TC_Handled_In_Caller := false;  -- Improper exception handling                                         -- in caller.   end Add_Complex_Subtest;   Subtract_Complex_Subtest:   declare      First       : Complex_Type := Complex (Int_Type (Report.Ident_Int (3)),                                     Int_Type (Report.Ident_Int (6)));        Second      : Complex_Type := Complex (Int_Type (Report.Ident_Int (5)),                                     Int_Type (Report.Ident_Int (7)));        Sub_Result  : Complex_Type := Complex (Int_Type (Report.Ident_Int (2)),                                     Int_Type (Report.Ident_Int (1)));        Third       : Complex_Type := Complex (Int_Type(Report.Ident_Int(-200)),                                     Int_Type (Report.Ident_Int (1)));        Complex_Num : Complex_Type;   begin      Complex_Num := Add_Subtract_Complex_Pkg.Subtract (Second, First);      if (Complex_Num /= Sub_Result) then         Report.Failed ("Incorrect results from subtraction");      end if;        -- Error is raised and exception will be handled in child package.      Complex_Num := Add_Subtract_Complex_Pkg.Subtract (Second, Third);   exception      when Subtract_Error =>          Report.Failed ("Exception raised in subtraction and " &                        "propagated to caller");         TC_Handled_In_Child_Pkg_Func := false; -- Improper exception handling                                                -- in caller.      when others =>          Report.Failed ("Unexpected exception in subtraction subtest");          TC_Handled_In_Child_Pkg_Func := false; -- Improper exception handling                                                -- in caller.   end Subtract_Complex_Subtest;   Multiply_Complex_Subtest:   declare      First       : Complex_Type := Complex (Int_Type(Report.Ident_Int(3)),                                     Int_Type (Report.Ident_Int (4)));        Second      : Complex_Type := Complex (Int_Type(Report.Ident_Int(5)),                                     Int_Type (Report.Ident_Int (3)));        Mult_Result : Complex_Type := Complex(Int_Type(Report.Ident_Int(15)),                                     Int_Type(Report.Ident_Int (12)));        Third       : Complex_Type := Complex(Int_Type(Report.Ident_Int(10)),                                     Int_Type(Report.Ident_Int (-10)));        Complex_Num : Complex_Type;   begin      CA11D011 (First, Second, Complex_Num);      if (Complex_Num /= Mult_Result) then         Report.Failed ("Incorrect results from multiplication");      end if;        -- Error is raised and exception will be handled in child package.     CA11D011 (First, Third, Complex_Num);   exception      when Multiply_Error =>          Report.Failed ("Exception raised in multiplication and " &                        "propagated to caller");         TC_Handled_In_Child_Sub := false;     -- Improper exception handling                                               -- in caller.      when others =>          Report.Failed ("Unexpected exception in multiplication subtest");          TC_Handled_In_Child_Sub := false;     -- Improper exception handling                                               -- in caller.   end Multiply_Complex_Subtest;   Divide_Complex_Subtest:   declare      First       : Complex_Type := Complex (Int_Type (Report.Ident_Int(10)),                                     Int_Type (Report.Ident_Int (15)));        Second      : Complex_Type := Complex (Int_Type(Report.Ident_Int(5)),                                     Int_Type (Report.Ident_Int (3)));        Div_Result  : Complex_Type := Complex (Int_Type(Report.Ident_Int(2)),                                     Int_Type (Report.Ident_Int (5)));        Third       : Complex_Type := Complex (Int_Type(Report.Ident_Int(-10)),                                     Int_Type (Report.Ident_Int (0)));        Complex_Num : Complex_Type := Zero;   begin      Complex_Num := CA11D012 (First, Second);      if (Complex_Num /= Div_Result) then         Report.Failed ("Incorrect results from division");      end if;        -- Error is raised in child package; exception will be      -- propagated to caller.      Complex_Num := CA11D012 (Second, Third);      -- Error was not raised in child package.      Report.Failed ("Exception was not raised in division subtest ");   exception      when Divide_Error =>          TC_Propagated_To_Caller := true;  -- Exception is propagated.      when others =>          Report.Failed ("Unexpected exception in division subtest");          TC_Propagated_To_Caller := false;  -- Improper exception handling                                            -- in caller.   end Divide_Complex_Subtest;   if not (TC_Handled_In_Caller         and     -- Check to see that all            TC_Handled_In_Child_Pkg_Proc and     -- exceptions were handled in           TC_Handled_In_Child_Pkg_Func and     -- the proper locations.           TC_Handled_In_Child_Sub      and                TC_Propagated_To_Caller)   then      Report.Failed ("Exceptions handled in incorrect locations");   end if;   Report.Result;end CA11D013;

⌨️ 快捷键说明

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