c974013.a

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

A
168
字号
-- C974013.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 aborted if it does not complete before the triggering statement--      completes, where the triggering statement is a delay_until--      statement.----      Check that the sequence of statements of the triggering alternative--      is executed after the abortable part is left.---- TEST DESCRIPTION:--      Declare a task with an accept statement containing an asynchronous--      select with a delay_until triggering statement.  Parameterize--      the accept statement with the amount of time to be added to the--      current time to be used for the delay. Simulate a time-consuming --      calculation by declaring a procedure containing an infinite loop.--      Call this procedure in the abortable part.----      The delay will expire before the abortable part completes, at which--      time the abortable part is aborted, and the sequence of statements--      following the triggering statement is executed.----      Main test logic is identical to c974001 which uses simple delay------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      28 Nov 95   SAIC    Fixed problems for ACVC 2.0.1.----!with Report;with ImpDef;with Ada.Calendar;procedure C974013 is          --========================================================--   function "+" (Left : Ada.Calendar.Time; Right: Duration)                            return Ada.Calendar.Time renames Ada.Calendar."+";   Allotted_Time : constant Duration := ImpDef.Switch_To_New_Task;   Calculation_Canceled : exception;   Count : Integer := 1234;                             procedure Lengthy_Calculation is   begin      -- Simulate a non-converging calculation.      loop                                           -- Infinite loop.         Count := (Count + 1) mod 10;         exit when not Report.Equal (Count, Count);  -- Condition always false.         delay 0.0;                                  -- abort completion point      end loop;   end Lengthy_Calculation;          --========================================================--   task type Timed_Calculation is      entry Calculation (Time_Limit : in Duration);   end Timed_Calculation;   task body Timed_Calculation is      Delay_Time : Ada.Calendar.Time;   begin      loop         select            accept Calculation (Time_Limit : in Duration) do               -- We have to construct an "until" time artificially                -- as we have no control over when the test will be run               --               Delay_Time := Ada.Calendar.Clock + Time_Limit;               --                                    --               -- Asynchronous select is tested here --               --                                    --               select                  delay until Delay_Time;     -- Time not reached yet, so                                              -- Lengthy_Calculation starts.                  raise Calculation_Canceled; -- This is executed after                                              -- Lengthy_Calculation aborted.               then abort                  Lengthy_Calculation;        -- Delay expires before complete,                                              -- so this call is aborted.                  -- Check that the whole of the abortable part is aborted,                  -- not just the statement in the abortable part that was                  -- executing at the time                  Report.Failed ("Abortable part not aborted");               end select;               Report.Failed ("Triggering alternative sequence of " &                              "statements not executed");            exception    -- New Ada 9x: handler within accept               when Calculation_Canceled =>                  if Count = 1234 then                     Report.Failed ("Abortable part did not execute");                  end if;            end Calculation;         or            terminate;         end select;      end loop;   exception      when others =>             Report.Failed ("Unexpected exception in Timed_Calculation task");   end Timed_Calculation;          --========================================================--begin  -- Main program.   Report.Test ("C974013", "Asynchronous Select: Trigger is delay_until " &                           "which completes before abortable part");   declare      Timed : Timed_Calculation;  -- Task.   begin      Timed.Calculation (Time_Limit => Allotted_Time); -- Asynchronous select                                                       -- inside accept block.   exception      when Calculation_Canceled =>          Report.Failed ("wrong exception handler used");   end;          Report.Result;end C974013;

⌨️ 快捷键说明

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