-- C974012.A -- -- Grant of Unlimited Rights -- -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and -- F08630-91-C-0015, 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 call on a protected -- entry which is queued. -- -- TEST DESCRIPTION: -- A fraction of in-line code is simulated. A voltage deficiency causes -- the routine to seek an alternate best-cost route on an electrical grid -- system. -- -- An asynchronous select is used with the triggering alternative being a -- call to a protected entry with a barrier. The abortable part is a -- routine simulating the lengthy alternate path negotiation. The entry -- barrier would be cleared if the voltage deficiency is rectified before -- the alternate can be found thus nullifying the need for the alternate. -- -- The test simulates a return to normal in the middle of the -- negotiation. The barrier is cleared, the triggering alternative -- completes first and the abortable part should be aborted. -- -- -- CHANGE HISTORY: -- 06 Dec 94 SAIC ACVC 2.0 -- --! with Report; with ImpDef; procedure C974012 is subtype Grid_Path is string(1..21); subtype Deficiency is integer range 100..1_000; -- in MWh New_Path : Grid_Path; Dummy_Deficiency : Deficiency := 520; Path_Available : Boolean := false; TC_Terminate_Negotiation_Executed : Boolean := false; TC_Trigger_Completed : Boolean := false; TC_Negotiation_Completed : Boolean := false; protected Local_Deficit is procedure Set_Good_Voltage; procedure Bad_Voltage; entry Terminate_Negotiation; private Good_Voltage : Boolean := false; -- barrier end Local_Deficit; protected body Local_Deficit is procedure Set_Good_Voltage is begin Good_Voltage := true; end Set_Good_Voltage; procedure Bad_Voltage is begin Good_Voltage := false; end Bad_Voltage; -- Trigger is queued on this entry with barrier condition entry Terminate_Negotiation when Good_Voltage is begin -- complete the triggering call thus terminating grid_path -- negotiation. null; --::: stub - signal main board TC_Terminate_Negotiation_Executed := true; -- show path traversal end Terminate_Negotiation; end Local_Deficit; -- Routine to find the most cost effective grid path for this -- particular deficiency at this particular time -- procedure Path_Negotiation (Requirement : in Deficiency; Best_Path : out Grid_Path ) is Dummy_Path : Grid_Path := "NYC.425_NY.227_NH.132"; Match : Deficiency := Report.Ident_Int (Requirement); begin -- null; --::: stub -- -- Simulate a lengthy path negotiation for i in 1..5 loop delay ImpDef.Minimum_Task_Switch; -- Part of the way through the negotiation simulate some external -- event returning the voltage to acceptable level if i = 3 then Local_Deficit.Set_Good_Voltage; -- clear the barrier end if; end loop; Best_Path := Dummy_Path; TC_Negotiation_Completed := true; end Path_Negotiation; begin Report.Test ("C974012", "Asynchronous Select: Trigger is queued on a " & "protected entry and completes before the " & "abortable part"); -- ::::::::: Fragment of code Local_Deficit.Bad_Voltage; -- Set barrier condition -- For the given voltage deficiency start negotiating the best grid -- path. If voltage returns to acceptable level cancel the negotiation -- select -- Prepare to terminate the Path_Negotiation if voltage improves Local_Deficit.Terminate_Negotiation; TC_Trigger_Completed := true; then abort Path_Negotiation (Dummy_Deficiency, New_Path) ; Path_Available := true; end select; -- ::::::::: if not TC_Terminate_Negotiation_Executed or else not TC_Trigger_Completed then Report.Failed ("Unexpected test path taken"); end if; if Path_Available or else TC_Negotiation_Completed then Report.Failed ("Abortable part was not aborted"); end if; Report.Result; end C974012;