c392008.a

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

A
402
字号
-- C392008.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 the use of a class-wide formal parameter allows for the --      proper dispatching of objects to the appropriate implementation of --      a primitive operation.  Check this for the case where the root tagged--      type is defined in a package and the extended type is defined in a--      dependent package.---- TEST DESCRIPTION:--      Declare a root tagged type, and some associated primitive operations,--      in a visible library package.--      Extend the root type in another visible library package, and override --      one or more primitive operations, inheriting the other primitive --      operations from the root type.--      Derive from the extended type in yet another visible library package, --      again overriding some primitive operations and inheriting others --      (including some that the parent inherited).--      Define subprograms with class-wide parameters, inside of which is a --      call on a dispatching primitive operation.  These primitive--      operations modify the objects of the specific class passed as actuals--      to the class-wide formal parameter (class-wide formal parameter has --      mode IN OUT).--     -- The following hierarchy of tagged types and primitive operations is -- utilized in this test:----   package Bank--      type Account (root)--            |--            | Operations--            |     proc Deposit--            |     proc Withdrawal--            |     func Balance        --            |     proc Service_Charge --            |     proc Add_Interest   --            |     proc Open--            |--   package Checking--      type Account (extended from Bank.Account)--            |--            | Operations--            |     proc Deposit         (inherited)--            |     proc Withdrawal      (inherited)--            |     func Balance         (inherited)--            |     proc Service_Charge  (inherited)--            |     proc Add_Interest    (inherited)--            |     proc Open            (overridden)--            |--   package Interest_Checking--      type Account (extended from Checking.Account)--            |--            | Operations--            |     proc Deposit         (inherited twice - Bank.Acct.)--            |     proc Withdrawal      (inherited twice - Bank.Acct.)--            |     func Balance         (inherited twice - Bank.Acct.)--            |     proc Service_Charge  (inherited twice - Bank.Acct.)--            |     proc Add_Interest    (overridden)--            |     proc Open            (overridden)--            |   ---- In this test, we are concerned with the following selection of dispatching-- calls, accomplished with the use of a Bank.Account'Class IN OUT formal-- parameter :----                \ Type--        Prim. Op \  Bank.Account  Checking.Account Interest_Checking.Account--                  \-----------------------------------------------------------   Service_Charge |      X                X                 X--   Add_Interest   |      X                X                 X--   Open           |      X                X                 X-------- The location of the declaration of the root and derivation of extended-- types will be varied over a series of tests.  Locations of declaration-- and derivation for a particular test are marked with an asterisk (*).---- Root type:--       --    *  Declared in package.--       Declared in generic package.---- Extended types:----       Derived in parent location.--       Derived in a nested package.--       Derived in a nested subprogram.--       Derived in a nested generic package.--    *  Derived in a separate package.--       Derived in a separate visible child package.--       Derived in a separate private child package.---- Primitive Operations:----    *  Procedures with same parameter profile.--       Procedures with different parameter profile.--       Functions with same parameter profile.--       Functions with different parameter profile.--       Mixture of Procedures and Functions.------ TEST FILES:--      This test depends on the following foundation code:----         C392008_0.A------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      20 Nov 95   SAIC    C392B04 became C392008 for ACVC 2.0.1----!----------------------------------------------------------------- C392008_0package C392008_0 is           -- package Bank  type Dollar_Amount is range -30_000..30_000;     type Account is tagged      record        Current_Balance: Dollar_Amount;      end record;   -- Primitive operations.   procedure Deposit        (A : in out Account;                              X : in     Dollar_Amount);   procedure Withdrawal     (A : in out Account;                              X : in     Dollar_Amount);   function  Balance        (A : in     Account) return Dollar_Amount;   procedure Service_Charge (A : in out Account);   procedure Add_Interest   (A : in out Account);   procedure Open           (A : in out Account);end C392008_0;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --package body C392008_0 is   -- Primitive operations for type Account.   procedure Deposit (A : in out Account;                       X : in     Dollar_Amount) is   begin      A.Current_Balance := A.Current_Balance + X;   end Deposit;   procedure Withdrawal(A : in out Account;                         X : in     Dollar_Amount) is   begin      A.Current_Balance := A.Current_Balance - X;   end Withdrawal;   function  Balance (A : in     Account) return Dollar_Amount is   begin      return (A.Current_Balance);   end Balance;   procedure Service_Charge (A : in out Account) is   begin      A.Current_Balance := A.Current_Balance - 5_00;   end Service_Charge;   procedure Add_Interest (A : in out Account) is      Interest_On_Account : Dollar_Amount := 0_00;   begin      A.Current_Balance := A.Current_Balance + Interest_On_Account;   end Add_Interest;   procedure Open (A : in out Account) is      Initial_Deposit : Dollar_Amount := 10_00;   begin      A.Current_Balance := Initial_Deposit;   end Open;end C392008_0;----------------------------------------------------------------- C392008_1with C392008_0;              -- package Bankpackage C392008_1 is      -- package Checking   package Bank renames C392008_0;   type Account is new Bank.Account with       record         Overdraft_Fee : Bank.Dollar_Amount;      end record;   -- Overridden primitive operation.   procedure Open (A : in out Account);   -- Inherited primitive operations.   -- procedure Deposit        (A : in out Account;   --                           X : in     Bank.Dollar_Amount);   -- procedure Withdrawal     (A : in out Account;   --                           X : in     Bank.Dollar_Amount);   -- function  Balance        (A : in     Account) return Bank.Dollar_Amount;   -- procedure Service_Charge (A : in out Account);   -- procedure Add_Interest   (A : in out Account);end C392008_1;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --package body C392008_1 is   -- Overridden primitive operation.   procedure Open (A : in out Account) is      Check_Guarantee : Bank.Dollar_Amount := 10_00;      Initial_Deposit : Bank.Dollar_Amount := 20_00;   begin      A.Current_Balance := Initial_Deposit;      A.Overdraft_Fee   := Check_Guarantee;   end Open;end C392008_1;----------------------------------------------------------------- C392008_2with C392008_0;             -- with Bank;with C392008_1;          -- with Checking;package C392008_2 is     -- package Interest_Checking   package Bank     renames C392008_0;   package Checking renames C392008_1;   subtype Interest_Rate is Bank.Dollar_Amount range 0..100; -- was digits 4;   Current_Rate : Interest_Rate := 0_02;   type Account is new Checking.Account with      record         Rate : Interest_Rate;      end record;   -- Overridden primitive operations.   procedure Add_Interest (A : in out Account);   procedure Open         (A : in out Account);   -- "Twice" inherited primitive operations (from Bank.Account)   -- procedure Deposit        (A : in out Account;   --                           X : in     Bank.Dollar_Amount);   -- procedure Withdrawal     (A : in out Account;   --                           X : in     Bank.Dollar_Amount);   -- function  Balance        (A : in     Account) return Bank.Dollar_Amount;   -- procedure Service_Charge (A : in out Account);end C392008_2;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --package body C392008_2 is   -- Overridden primitive operations.   procedure Add_Interest (A : in out Account) is      Interest_On_Account : Bank.Dollar_Amount        := Bank.Dollar_Amount( Bank."*"( A.Current_Balance, A.Rate ));   begin      A.Current_Balance := Bank."+"( A.Current_Balance, Interest_On_Account);   end Add_Interest;   procedure Open (A : in out Account) is      Initial_Deposit : Bank.Dollar_Amount := 30_00;   begin      Checking.Open (Checking.Account (A));      A.Current_Balance := Initial_Deposit;      A.Rate            := Current_Rate;   end Open;end C392008_2;------------------------------------------------------------------- C392008with C392008_0;    use C392008_0;          -- package Bankwith C392008_1;    use C392008_1;        -- package Checking;with C392008_2;    use C392008_2;        -- package Interest_Checking;with Report;procedure C392008 is   package Bank              renames C392008_0;   package Checking          renames C392008_1;   package Interest_Checking renames C392008_2;   B_Acct  : Bank.Account;   C_Acct  : Checking.Account;   IC_Acct : Interest_Checking.Account;   --   -- Define procedures with class-wide formal parameters of mode IN OUT.   --   -- This procedure will perform a dispatching call on the   -- overridden primitive operation Open.   procedure New_Account (Acct : in out Bank.Account'Class) is   begin      Open (Acct);  -- Dispatch according to tag of class-wide parameter.   end New_Account;   -- This procedure will perform a dispatching call on the inherited   -- primitive operation (for all types derived from the root Bank.Account)   -- Service_Charge.   procedure Apply_Service_Charge (Acct: in out Bank.Account'Class) is   begin      Service_Charge (Acct);  -- Dispatch according to tag of class-wide parm.   end Apply_Service_Charge;   -- This procedure will perform a dispatching call on the    -- inherited/overridden primitive operation Add_Interest.   procedure Annual_Interest (Acct: in out Bank.Account'Class) is   begin      Add_Interest (Acct);  -- Dispatch according to tag of class-wide parm.   end Annual_Interest;begin   Report.Test ("C392008",  "Check that the use of a class-wide formal "    &                            "parameter allows for the proper dispatching "  &                            "of objects to the appropriate implementation " &                            "of a primitive operation");   -- Check the dispatch to primitive operations overridden for each    -- extended type.   New_Account (B_Acct);   New_Account (C_Acct);   New_Account (IC_Acct);      if (B_Acct.Current_Balance  /= 10_00) or      (C_Acct.Current_Balance  /= 20_00) or      (IC_Acct.Current_Balance /= 30_00)    then      Report.Failed ("Failed dispatch to multiply overridden prim. oper.");   end if;   Annual_Interest (B_Acct);   Annual_Interest (C_Acct);   Annual_Interest (IC_Acct); -- Check the dispatch to primitive operation                               -- overridden from a parent type which inherited                              -- the operation from the root type.     if (B_Acct.Current_Balance  /= 10_00) or      (C_Acct.Current_Balance  /= 20_00) or      (IC_Acct.Current_Balance /= 90_00)   then      Report.Failed ("Failed dispatch to overridden primitive operation");   end if;   Apply_Service_Charge (Acct => B_Acct);   Apply_Service_Charge (Acct => C_Acct);   Apply_Service_Charge (Acct => IC_Acct); -- Check the dispatch to a                                             -- primitive operation twice                                            -- inherited from the root                                           -- tagged type.   if (B_Acct.Current_Balance  /=  5_00) or      (C_Acct.Current_Balance  /= 15_00) or      (IC_Acct.Current_Balance /= 85_00)    then      Report.Failed ("Failed dispatch to Apply_Service_Charge");   end if;   Report.Result;end C392008;

⌨️ 快捷键说明

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