1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
|
-- C954025.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 if the original entry call was a conditional entry call,
-- the call is cancelled if a requeue-with-abort of the call is not
-- selected immediately.
-- Check that if the original entry call was a timed entry call, the
-- expiration time for a requeue-with-abort is the original expiration
-- time.
--
-- TEST DESCRIPTION:
-- This test declares two tasks: Launch_Control and Mission_Control.
-- Mission_Control instructs Launch_Control to start its countdown
-- and then requeues (with abort) to the Launch_Control.Launch
-- entry. This call to Launch will be accepted at the end of the
-- countdown (if the task is still waiting).
-- The main task does an unconditional, conditional, and timed
-- entry call to Mission_Control and checks to see if the launch
-- was accepted.
--
--
-- CHANGE HISTORY:
-- 18 OCT 95 SAIC ACVC 2.1
-- 10 JUL 96 SAIC Incorporated reviewer's comments.
--
--!
with Calendar; use type Calendar.Time;
with Report;
with ImpDef;
procedure C954025 is
Verbose : constant Boolean := False;
Countdown_Amount : constant Duration := 2.0 * Impdef.One_Long_Second;
Plenty_Of_Time : constant Duration :=
Countdown_Amount + ImpDef.Clear_Ready_Queue + 1.0 * Impdef.One_Long_Second;
Not_Enough_Time : constant Duration :=
Countdown_Amount - 0.5 * Impdef.One_Long_Second;
begin
Report.Test ("C954025",
"Check that if the original entry" &
" call was a conditional or timed entry call, the" &
" expiration time for a requeue with abort is the" &
" original expiration time");
declare
-- note that the following object is a shared object and its use
-- governed by the rules of 9.10(3,4,8);6.0
Launch_Accepted : Boolean := False;
task Launch_Control is
entry Enable_Launch_Control;
entry Start_Countdown (How_Long : Duration);
-- Launch will be accepted if a call is waiting when the countdown
-- reaches 0
entry Launch;
end Launch_Control;
task body Launch_Control is
Wait_Amount : Duration := 0.0;
begin
loop
select
accept Enable_Launch_Control do
Launch_Accepted := False;
end Enable_Launch_Control;
or
terminate;
end select;
accept Start_Countdown (How_Long : Duration) do
Wait_Amount := How_Long;
end Start_Countdown;
delay Wait_Amount;
select
accept Launch do
Launch_Accepted := True;
end Launch;
else
null;
-- note that Launch_Accepted is False here
end select;
end loop;
end Launch_Control;
task Mission_Control is
-- launch will occur if we are given enough time to complete
-- a standard countdown. We will not be rushed!
entry Do_Launch;
end Mission_Control;
task body Mission_Control is
begin
loop
select
accept Do_Launch do
Launch_Control.Start_Countdown (Countdown_Amount);
requeue Launch_Control.Launch with abort;
end Do_Launch;
or
terminate;
end select;
end loop;
end Mission_Control;
begin -- test encapsulation
-- unconditional entry call to check the simple case
Launch_Control.Enable_Launch_Control;
Mission_Control.Do_Launch;
if Launch_Accepted then
if Verbose then
Report.Comment ("simple case passed");
end if;
else
Report.Failed ("simple case");
end if;
-- timed but with plenty of time - delay relative
Launch_Control.Enable_Launch_Control;
select
Mission_Control.Do_Launch;
or
delay Plenty_Of_Time;
if Launch_Accepted then
Report.Failed ("plenty of time timed out after accept (1)");
end if;
end select;
if Launch_Accepted then
if Verbose then
Report.Comment ("plenty of time case passed (1)");
end if;
else
Report.Failed ("plenty of time (1)");
end if;
-- timed but with plenty of time -- delay until
Launch_Control.Enable_Launch_Control;
select
Mission_Control.Do_Launch;
or
delay until Calendar.Clock + Plenty_Of_Time;
if Launch_Accepted then
Report.Failed ("plenty of time timed out after accept(2)");
end if;
end select;
if Launch_Accepted then
if Verbose then
Report.Comment ("plenty of time case passed (2)");
end if;
else
Report.Failed ("plenty of time (2)");
end if;
-- timed without enough time - delay relative
Launch_Control.Enable_Launch_Control;
select
Mission_Control.Do_Launch;
Report.Failed ("not enough time completed accept (1)");
or
delay Not_Enough_Time;
end select;
if Launch_Accepted then
Report.Failed ("not enough time (1)");
else
if Verbose then
Report.Comment ("not enough time case passed (1)");
end if;
end if;
-- timed without enough time - delay until
Launch_Control.Enable_Launch_Control;
select
Mission_Control.Do_Launch;
Report.Failed ("not enough time completed accept (2)");
or
delay until Calendar.Clock + Not_Enough_Time;
end select;
if Launch_Accepted then
Report.Failed ("not enough time (2)");
else
if Verbose then
Report.Comment ("not enough time case passed (2)");
end if;
end if;
-- conditional case
Launch_Control.Enable_Launch_Control;
-- make sure Mission_Control is ready to accept immediately
delay ImpDef.Clear_Ready_Queue;
select
Mission_Control.Do_Launch;
Report.Failed ("no time completed accept");
else
if Verbose then
Report.Comment ("conditional case - else taken");
end if;
end select;
if Launch_Accepted then
Report.Failed ("no time");
else
if Verbose then
Report.Comment ("no time case passed");
end if;
end if;
end;
Report.Result;
end C954025;
|