c974010.a

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

A
210
字号
-- C974010.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 abortable part of an asynchronous select statement--      is not started if the triggering statement is a task entry call to--      a task that has already terminated.----      Check that Tasking_Error is properly propagated to the asynchronous--      select statement and thus the sequence of statements of the triggering--      alternative is not executed after the abortable part is left. ----      Check that Tasking_Error is re-raised immediately following the --      asynchronous select.---- TEST DESCRIPTION:----      Use a small subset of the base Automated Teller Machine simulation--      which is shown in greater detail in other tests of this series.  --      Declare a main procedure containing an asynchronous select with a task--      entry call as triggering statement.  Ensure that the task is--      terminated before the entry call.  Use stripped down versions of--      the  called procedures to check the correct path in the test.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!package C974010_0 is  -- Automated teller machine abstraction.   Transaction_Canceled : exception;   type Key_Enum is (None, Cancel, Deposit, Withdraw);   type Card_Number_Type is private;   type Card_PIN_Type    is private;   type ATM_Card_Type    is private;   task type ATM_Keyboard_Task is      entry Cancel_Pressed;   end ATM_Keyboard_Task;   procedure Validate_Card (Card : in ATM_Card_Type);   procedure Perform_Transaction (Card : in ATM_Card_Type);private   type Card_Number_Type is range   1 .. 9999;   type Card_PIN_Type    is range 100 ..  999;   type ATM_Card_Type is record      Number : Card_Number_Type;      PIN    : Card_PIN_Type;   end record;end C974010_0;     --==================================================================--with Report;package body C974010_0 is   -- One of these gets created as "Keyboard" for each transaction   --   task body ATM_Keyboard_Task is      TC_Suicide  : exception;      Key_Pressed : Key_Enum := None;   begin      raise TC_Suicide;   -- Simulate early, unexpected termination      accept Cancel_Pressed do        -- queued entry call.         null;  --:::: user code for cancel                       end Cancel_Pressed;   exception      when TC_Suicide =>         null;  -- This is the expected test behavior      when others =>          Report.Failed ("Unexpected Exception in ATM_Keyboard_Task");   end ATM_Keyboard_Task;   procedure Validate_Card (Card : in ATM_Card_Type) is   begin      Report.Failed ("Abortable part was executed");   end Validate_Card;   procedure Perform_Transaction (Card : in ATM_Card_Type) is   begin      Report.Failed ("Exception not re-raised immediately following " &                     "asynchronous select");   end Perform_Transaction;end C974010_0;     --==================================================================--with Report;with ImpDef;with C974010_0;  -- Automated teller machine abstraction.use  C974010_0;procedure C974010 is   Card_Data : ATM_Card_Type;   TC_Tasking_Error_Handled : Boolean := false;begin  -- Main program.   Report.Test ("C974010", "Asynchronous Select: Trigger is a call to a " &                           "task entry of a task that is already completed");   declare      -- Create the task for this transaction      Keyboard : C974010_0.ATM_Keyboard_Task;   begin      -- Ensure the task is already completed before calling      --      while not Keyboard'terminated loop         delay ImpDef.Minimum_Task_Switch;      end loop;      --                                    --      -- Asynchronous select is tested here --      --                                    --      select          Keyboard.Cancel_Pressed;         raise Transaction_Canceled;  -- Should not be executed.      then abort         -- Since the triggering call is not queued the abortable part         -- should not be executed.         --         Validate_Card (Card_Data);        end select;      --      -- The propagated exception is re-raised here.      Perform_Transaction(Card_Data); -- Should not be reached.   exception      when Transaction_Canceled =>         Report.Failed ("Triggering alternative sequence of statements " &                        "executed");      when Tasking_Error =>         -- This is the expected test path         TC_Tasking_Error_Handled := true;      when others       =>         Report.Failed ("Wrong exception raised: ");   end;      if not TC_Tasking_Error_Handled then      Report.Failed ("Tasking_Error not properly propagated");   end if;   Report.Result;exception   when Tasking_Error =>        Report.Failed ("Tasking_Error propagated to wrong handler");        Report.Result;end C974010;

⌨️ 快捷键说明

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