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