| -- CA13A01.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 subunits declared in non-generic child units of a public |
| -- parent have the same visibility into its parent, its siblings |
| -- (public and private), and packages on which its parent depends |
| -- as is available at the point of their declaration. |
| -- |
| -- TEST DESCRIPTION: |
| -- Declare an check system procedure as a subunit in a private child |
| -- package of the basic operation package (FA13A00.A). This procedure |
| -- has visibility into its parent ancestor and its private sibling. |
| -- |
| -- Declare an emergency procedure as a subunit in a public child package |
| -- of the basic operation package (FA13A00.A). This procedure has |
| -- visibility into its parent ancestor and its private sibling. |
| -- |
| -- Declare an express procedure as a subunit in a public child subprogram |
| -- of the basic operation package (FA13A00.A). This procedure has |
| -- visibility into its parent ancestor and its public sibling. |
| -- |
| -- In the main program, "with"s the child package and subprogram. Check |
| -- that subunits perform as expected. |
| -- |
| -- TEST FILES: |
| -- The following files comprise this test: |
| -- |
| -- FA13A00.A |
| -- CA13A01.A |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 06 Dec 94 SAIC ACVC 2.0 |
| -- |
| --! |
| |
| -- Private child package of an elevator application. This package |
| -- provides maintenance operations. |
| |
| private package FA13A00_1.CA13A01_4 is -- Maintenance operation |
| |
| One_Floor : Floor_No := 1; -- Type declared in parent. |
| |
| procedure Check_System; |
| |
| -- other type definitions and procedure declarations in real application. |
| |
| end FA13A00_1.CA13A01_4; |
| |
| --==================================================================-- |
| |
| -- Context clauses required for visibility needed by separate subunit. |
| |
| with FA13A00_0; -- Building Manager |
| |
| with FA13A00_1.FA13A00_2; -- Floor Calculation (private) |
| |
| with FA13A00_1.FA13A00_3; -- Move Elevator |
| |
| use FA13A00_0; |
| |
| package body FA13A00_1.CA13A01_4 is |
| |
| procedure Check_System is separate; |
| |
| end FA13A00_1.CA13A01_4; |
| |
| --==================================================================-- |
| |
| separate (FA13A00_1.CA13A01_4) |
| |
| -- Subunit Check_System declared in Maintenance Operation. |
| |
| procedure Check_System is |
| begin |
| -- See if regular power is on. |
| |
| if Power /= V120 then -- Reference package with'ed by |
| TC_Operation := false; -- the subunit parent's body. |
| end if; |
| |
| -- Test elevator function. |
| |
| FA13A00_1.FA13A00_3.Move_Elevator -- Reference public sibling of |
| (Penthouse, Call_Waiting); -- the subunit parent's body. |
| |
| if not Call_Waiting (Penthouse) then -- Reference private part of the |
| TC_Operation := false; -- parent of the subunit package's |
| -- body. |
| end if; |
| |
| FA13A00_1.FA13A00_2.Down (One_Floor); -- Reference private sibling of |
| -- the subunit parent's body. |
| |
| if Current_Floor /= Floor'pred (Penthouse) then |
| TC_Operation := false; -- Reference type declared in the |
| end if; -- parent of the subunit parent's |
| -- body. |
| |
| end Check_System; |
| |
| --==================================================================-- |
| |
| -- Public child package of an elevator application. This package provides |
| -- an emergency operation. |
| |
| package FA13A00_1.CA13A01_5 is -- Emergency Operation |
| |
| -- Other type definitions in real application. |
| |
| procedure Emergency; |
| |
| private |
| type Bell_Type is (Inactive, Active); |
| |
| end FA13A00_1.CA13A01_5; |
| |
| --==================================================================-- |
| |
| -- Context clauses required for visibility needed by separate subunit. |
| |
| with FA13A00_0; -- Building Manager |
| |
| with FA13A00_1.FA13A00_3; -- Move Elevator |
| |
| with FA13A00_1.CA13A01_4; -- Maintenance Operation (private) |
| |
| use FA13A00_0; |
| |
| package body FA13A00_1.CA13A01_5 is |
| |
| procedure Emergency is separate; |
| |
| end FA13A00_1.CA13A01_5; |
| |
| --==================================================================-- |
| |
| separate (FA13A00_1.CA13A01_5) |
| |
| -- Subunit Emergency declared in Maintenance Operation. |
| |
| procedure Emergency is |
| Bell : Bell_Type; -- Reference type declared in the |
| -- subunit parent's body. |
| |
| begin |
| -- Calls maintenance operation. |
| |
| FA13A00_1.CA13A01_4.Check_System; -- Reference private sibling of the |
| -- subunit parent 's body. |
| |
| -- Clear all calls to the elevator. |
| |
| Clear_Calls (Call_Waiting); -- Reference subprogram declared |
| -- in the parent of the subunit |
| -- parent's body. |
| for I in Floor loop |
| if Call_Waiting (I) then -- Reference private part of the |
| TC_Operation := false; -- parent of the subunit parent's |
| end if; -- body. |
| end loop; |
| |
| -- Move elevator to the basement. |
| |
| FA13A00_1.FA13A00_3.Move_Elevator -- Reference public sibling of the |
| (Basement, Call_Waiting); -- subunit parent's body. |
| |
| if Current_Floor /= Basement then -- Reference type declared in the |
| TC_Operation := false; -- parent of the subunit parent's |
| end if; -- body. |
| |
| -- Shut off power. |
| |
| Power := Off; -- Reference package with'ed by |
| -- the subunit parent's body. |
| |
| -- Activate bell. |
| |
| Bell := Active; -- Reference type declared in the |
| -- subunit parent's body. |
| |
| end Emergency; |
| |
| --==================================================================-- |
| |
| -- Public child subprogram of an elevator application. This subprogram |
| -- provides an express operation. |
| |
| procedure FA13A00_1.CA13A01_6; |
| |
| --==================================================================-- |
| |
| -- Context clauses required for visibility needed by separate subunit. |
| |
| with FA13A00_0; -- Building Manager |
| |
| with FA13A00_1.FA13A00_2; -- Floor Calculation (private) |
| |
| with FA13A00_1.FA13A00_3; -- Move Elevator |
| |
| use FA13A00_0; |
| |
| procedure FA13A00_1.CA13A01_6 is -- Express Operation |
| |
| -- Other type definitions in real application. |
| |
| procedure GoTo_Penthouse is separate; |
| |
| begin |
| GoTo_Penthouse; |
| |
| end FA13A00_1.CA13A01_6; |
| |
| --==================================================================-- |
| |
| separate (FA13A00_1.CA13A01_6) |
| |
| -- Subunit GoTo_Penthouse declared in Express Operation. |
| |
| procedure GoTo_Penthouse is |
| begin |
| -- Go faster. |
| |
| Power := V240; -- Reference package with'ed by |
| -- the subunit parent's body. |
| |
| -- Call elevator. |
| |
| Call (Penthouse, Call_Waiting); -- Reference subprogram declared in |
| -- the parent of the subunit |
| -- parent's body. |
| |
| if not Call_Waiting (Penthouse) then -- Reference private part of the |
| TC_Operation := false; -- parent of the subunit parent's |
| end if; -- body. |
| |
| -- Move elevator to Penthouse. |
| |
| FA13A00_1.FA13A00_3.Move_Elevator -- Reference public sibling of the |
| (Penthouse, Call_Waiting); -- subunit parent's body. |
| |
| if Current_Floor /= Penthouse then -- Reference type declared in the |
| TC_Operation := false; -- parent of the subunit parent's |
| end if; -- body. |
| |
| -- Return slowly |
| |
| while Current_Floor /= Floor1 loop -- Reference type, subprogram |
| FA13A00_1.FA13A00_2.Down (1); -- declared in the parent of the |
| -- subunit parent's body. |
| end loop; |
| |
| if Current_Floor /= Floor1 then -- Reference type declared in |
| TC_Operation := false; -- the parent of the subunit |
| end if; -- parent's body. |
| |
| -- Back to normal. |
| |
| Power := V120; -- Reference package with'ed by |
| -- the subunit parent's body. |
| |
| end GoTo_Penthouse; |
| |
| --==================================================================-- |
| |
| with FA13A00_1.CA13A01_5; -- Emergency Operation |
| -- implicitly with Basic Elevator |
| -- Operations |
| |
| with FA13A00_1.CA13A01_6; -- Express Operation |
| |
| with Report; |
| |
| procedure CA13A01 is |
| |
| begin |
| |
| Report.Test ("CA13A01", "Check that subunits declared in non-generic " & |
| "child units of a public parent have the same visibility " & |
| "into its parent, its parent's siblings, and packages on " & |
| "which its parent depends"); |
| |
| -- Go to Penthouse. |
| |
| FA13A00_1.CA13A01_6; |
| |
| -- Call emergency operation. |
| |
| FA13A00_1.CA13A01_5.Emergency; |
| |
| if not FA13A00_1.TC_Operation then |
| Report.Failed ("Incorrect elevator operation"); |
| end if; |
| |
| Report.Result; |
| |
| end CA13A01; |