111
|
1 -- C974012.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 the abortable part of an asynchronous select statement is
|
|
28 -- aborted if it does not complete before the triggering statement
|
|
29 -- completes, where the triggering statement is a call on a protected
|
|
30 -- entry which is queued.
|
|
31 --
|
|
32 -- TEST DESCRIPTION:
|
|
33 -- A fraction of in-line code is simulated. A voltage deficiency causes
|
|
34 -- the routine to seek an alternate best-cost route on an electrical grid
|
|
35 -- system.
|
|
36 --
|
|
37 -- An asynchronous select is used with the triggering alternative being a
|
|
38 -- call to a protected entry with a barrier. The abortable part is a
|
|
39 -- routine simulating the lengthy alternate path negotiation. The entry
|
|
40 -- barrier would be cleared if the voltage deficiency is rectified before
|
|
41 -- the alternate can be found thus nullifying the need for the alternate.
|
|
42 --
|
|
43 -- The test simulates a return to normal in the middle of the
|
|
44 -- negotiation. The barrier is cleared, the triggering alternative
|
|
45 -- completes first and the abortable part should be aborted.
|
|
46 --
|
|
47 --
|
|
48 -- CHANGE HISTORY:
|
|
49 -- 06 Dec 94 SAIC ACVC 2.0
|
|
50 --
|
|
51 --!
|
|
52
|
|
53
|
|
54 with Report;
|
|
55 with ImpDef;
|
|
56
|
|
57 procedure C974012 is
|
|
58
|
|
59 subtype Grid_Path is string(1..21);
|
|
60 subtype Deficiency is integer range 100..1_000; -- in MWh
|
|
61
|
|
62 New_Path : Grid_Path;
|
|
63 Dummy_Deficiency : Deficiency := 520;
|
|
64 Path_Available : Boolean := false;
|
|
65
|
|
66 TC_Terminate_Negotiation_Executed : Boolean := false;
|
|
67 TC_Trigger_Completed : Boolean := false;
|
|
68 TC_Negotiation_Completed : Boolean := false;
|
|
69
|
|
70 protected Local_Deficit is
|
|
71 procedure Set_Good_Voltage;
|
|
72 procedure Bad_Voltage;
|
|
73 entry Terminate_Negotiation;
|
|
74 private
|
|
75 Good_Voltage : Boolean := false; -- barrier
|
|
76 end Local_Deficit;
|
|
77
|
|
78 protected body Local_Deficit is
|
|
79
|
|
80 procedure Set_Good_Voltage is
|
|
81 begin
|
|
82 Good_Voltage := true;
|
|
83 end Set_Good_Voltage;
|
|
84
|
|
85 procedure Bad_Voltage is
|
|
86 begin
|
|
87 Good_Voltage := false;
|
|
88 end Bad_Voltage;
|
|
89
|
|
90 -- Trigger is queued on this entry with barrier condition
|
|
91 entry Terminate_Negotiation when Good_Voltage is
|
|
92 begin
|
|
93 -- complete the triggering call thus terminating grid_path
|
|
94 -- negotiation.
|
|
95 null; --::: stub - signal main board
|
|
96 TC_Terminate_Negotiation_Executed := true; -- show path traversal
|
|
97 end Terminate_Negotiation;
|
|
98
|
|
99 end Local_Deficit;
|
|
100
|
|
101
|
|
102 -- Routine to find the most cost effective grid path for this
|
|
103 -- particular deficiency at this particular time
|
|
104 --
|
|
105 procedure Path_Negotiation (Requirement : in Deficiency;
|
|
106 Best_Path : out Grid_Path ) is
|
|
107
|
|
108 Dummy_Path : Grid_Path := "NYC.425_NY.227_NH.132";
|
|
109 Match : Deficiency := Report.Ident_Int (Requirement);
|
|
110
|
|
111 begin
|
|
112 --
|
|
113 null; --::: stub
|
|
114 --
|
|
115 -- Simulate a lengthy path negotiation
|
|
116 for i in 1..5 loop
|
|
117 delay ImpDef.Minimum_Task_Switch;
|
|
118 -- Part of the way through the negotiation simulate some external
|
|
119 -- event returning the voltage to acceptable level
|
|
120 if i = 3 then
|
|
121 Local_Deficit.Set_Good_Voltage; -- clear the barrier
|
|
122 end if;
|
|
123 end loop;
|
|
124
|
|
125 Best_Path := Dummy_Path;
|
|
126 TC_Negotiation_Completed := true;
|
|
127
|
|
128 end Path_Negotiation;
|
|
129
|
|
130
|
|
131
|
|
132 begin
|
|
133
|
|
134 Report.Test ("C974012", "Asynchronous Select: Trigger is queued on a " &
|
|
135 "protected entry and completes before the " &
|
|
136 "abortable part");
|
|
137
|
|
138 -- ::::::::: Fragment of code
|
|
139
|
|
140 Local_Deficit.Bad_Voltage; -- Set barrier condition
|
|
141
|
|
142 -- For the given voltage deficiency start negotiating the best grid
|
|
143 -- path. If voltage returns to acceptable level cancel the negotiation
|
|
144 --
|
|
145 select
|
|
146 -- Prepare to terminate the Path_Negotiation if voltage improves
|
|
147 Local_Deficit.Terminate_Negotiation;
|
|
148 TC_Trigger_Completed := true;
|
|
149 then abort
|
|
150 Path_Negotiation (Dummy_Deficiency, New_Path) ;
|
|
151 Path_Available := true;
|
|
152 end select;
|
|
153 -- :::::::::
|
|
154
|
|
155 if not TC_Terminate_Negotiation_Executed or else not
|
|
156 TC_Trigger_Completed then
|
|
157 Report.Failed ("Unexpected test path taken");
|
|
158 end if;
|
|
159
|
|
160 if Path_Available or else TC_Negotiation_Completed then
|
|
161 Report.Failed ("Abortable part was not aborted");
|
|
162 end if;
|
|
163 Report.Result;
|
|
164
|
|
165 end C974012;
|