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 + -
显示快捷键?