3 -- Grant of Unlimited Rights
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7 -- unlimited rights in the software and documentation contained herein.
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
9 -- this public release, the Government intends to confer upon all
10 -- recipients unlimited rights equal to those held by the Government.
11 -- These rights include rights to use, duplicate, release or disclose the
12 -- released technical data and computer software in whole or in part, in
13 -- any manner and for any purpose whatsoever, and to have or permit others
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
27 -- Check that the abortable part of an asynchronous select statement
28 -- is aborted if it does not complete before the triggering statement
29 -- completes, where the triggering statement is a delay_until
32 -- Check that the sequence of statements of the triggering alternative
33 -- is executed after the abortable part is left.
36 -- Declare a task with an accept statement containing an asynchronous
37 -- select with a delay_until triggering statement. Parameterize
38 -- the accept statement with the amount of time to be added to the
39 -- current time to be used for the delay. Simulate a time-consuming
40 -- calculation by declaring a procedure containing an infinite loop.
41 -- Call this procedure in the abortable part.
43 -- The delay will expire before the abortable part completes, at which
44 -- time the abortable part is aborted, and the sequence of statements
45 -- following the triggering statement is executed.
47 -- Main test logic is identical to c974001 which uses simple delay
51 -- 06 Dec 94 SAIC ACVC 2.0
52 -- 28 Nov 95 SAIC Fixed problems for ACVC 2.0.1.
63 --========================================================--
65 function "+" (Left
: Ada
.Calendar
.Time
; Right
: Duration)
66 return Ada
.Calendar
.Time
renames Ada
.Calendar
."+";
69 Allotted_Time
: constant Duration := ImpDef
.Switch_To_New_Task
;
70 Calculation_Canceled
: exception;
72 Count
: Integer := 1234;
73 procedure Lengthy_Calculation
is
75 -- Simulate a non-converging calculation.
76 loop -- Infinite loop.
77 Count
:= (Count
+ 1) mod 10;
78 exit when not Report
.Equal
(Count
, Count
); -- Condition always false.
79 delay 0.0; -- abort completion point
81 end Lengthy_Calculation
;
84 --========================================================--
87 task type Timed_Calculation
is
88 entry Calculation
(Time_Limit
: in Duration);
89 end Timed_Calculation
;
92 task body Timed_Calculation
is
93 Delay_Time
: Ada
.Calendar
.Time
;
97 accept Calculation
(Time_Limit
: in Duration) do
99 -- We have to construct an "until" time artificially
100 -- as we have no control over when the test will be run
102 Delay_Time
:= Ada
.Calendar
.Clock
+ Time_Limit
;
105 -- Asynchronous select is tested here --
110 delay until Delay_Time
; -- Time not reached yet, so
111 -- Lengthy_Calculation starts.
113 raise Calculation_Canceled
; -- This is executed after
114 -- Lengthy_Calculation aborted.
118 Lengthy_Calculation
; -- Delay expires before complete,
119 -- so this call is aborted.
120 -- Check that the whole of the abortable part is aborted,
121 -- not just the statement in the abortable part that was
122 -- executing at the time
123 Report
.Failed
("Abortable part not aborted");
127 Report
.Failed
("Triggering alternative sequence of " &
128 "statements not executed");
130 exception -- New Ada 9x: handler within accept
131 when Calculation_Canceled
=>
133 Report
.Failed
("Abortable part did not execute");
142 Report
.Failed
("Unexpected exception in Timed_Calculation task");
143 end Timed_Calculation
;
146 --========================================================--
150 begin -- Main program.
152 Report
.Test
("C974013", "Asynchronous Select: Trigger is delay_until " &
153 "which completes before abortable part");
156 Timed
: Timed_Calculation
; -- Task.
158 Timed
.Calculation
(Time_Limit
=> Allotted_Time
); -- Asynchronous select
159 -- inside accept block.
161 when Calculation_Canceled
=>
162 Report
.Failed
("wrong exception handler used");