| -- CXH3002.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 pragma Inspection_Point is allowed whereever a declarative |
| -- item or statement is allowed. Check that pragma Inspection_Point may |
| -- have zero or more arguments. Check that the execution of pragma |
| -- Inspection_Point has no effect. |
| -- |
| -- TEST DESCRIPTION |
| -- Check pragma Inspection_Point applied to: |
| -- A no objects, |
| -- B one object, |
| -- C multiple objects. |
| -- Check pragma Inspection_Point applied to: |
| -- D Enumeration type objects, |
| -- E Integer type objects (signed and unsigned), |
| -- F access type objects, |
| -- G Floating Point type objects, |
| -- H Fixed point type objects, |
| -- I array type objects, |
| -- J record type objects, |
| -- K tagged type objects, |
| -- L protected type objects, |
| -- M controlled type objects, |
| -- N task type objects. |
| -- Check pragma Inspection_Point applied in: |
| -- O declarations (package, procedure) |
| -- P statements (incl package elaboration) |
| -- Q subprogram (procedure, function, finalization) |
| -- R package |
| -- S specification |
| -- T body (PO entry, task body, loop body, accept body, select body) |
| -- U task |
| -- V protected object |
| -- |
| -- |
| -- APPLICABILITY CRITERIA: |
| -- This test is only applicable for a compiler attempting validation |
| -- for the Safety and Security Annex. |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 26 OCT 95 SAIC Initial version |
| -- 12 NOV 96 SAIC Revised for 2.1 |
| -- |
| --! |
| |
| ----------------------------------------------------------------- CXH3002_0 |
| |
| package CXH3002_0 is |
| |
| type Enum is (Item,Stuff,Things); |
| |
| type Int is range 0..256; |
| |
| type Unt is mod 256; |
| |
| type Flt is digits 5; |
| |
| type Fix is delta 0.5 range -1.0..1.0; |
| |
| type Root(Disc: Enum) is record |
| I: Int; |
| U: Unt; |
| end record; |
| |
| type List is array(Unt) of Root(Stuff); |
| |
| type A_List is access all List; |
| type A_Proc is access procedure(R:Root); |
| |
| procedure Proc(R:Root); |
| function Func return A_Proc; |
| |
| protected type PT is |
| entry Prot_Entry(Switch: Boolean); |
| private |
| Toggle : Boolean := False; |
| end PT; |
| |
| task type TT is |
| entry Task_Entry(Items: in A_List); |
| end TT; |
| |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- AORS |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| |
| end CXH3002_0; |
| |
| ----------------------------------------------------------------- CXH3002_1 |
| |
| with Ada.Finalization; |
| package CXH3002_0.CXH3002_1 is |
| |
| type Final is new Ada.Finalization.Controlled with |
| record |
| Value : Natural; |
| end record; |
| |
| procedure Initialize( F: in out Final ); |
| procedure Adjust( F: in out Final ); |
| procedure Finalize( F: in out Final ); |
| |
| end CXH3002_0.CXH3002_1; |
| |
| -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CXH3002_0 |
| |
| package body CXH3002_0 is |
| |
| Global_Variable : Character := 'A'; |
| |
| procedure Proc(R:Root) is |
| begin |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point( Global_Variable ); -- BDPQT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| case R.Disc is |
| when Item => Global_Variable := 'I'; |
| when Stuff => Global_Variable := 'S'; |
| when Things => Global_Variable := 'T'; |
| end case; |
| end Proc; |
| |
| function Func return A_Proc is |
| begin |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- APQT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| return Proc'Access; |
| end Func; |
| |
| protected body PT is |
| entry Prot_Entry(Switch: Boolean) when True is |
| begin |
| Toggle := Switch; |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- APVT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| end Prot_Entry; |
| end PT; |
| |
| task body TT is |
| List_Copy : A_List; |
| begin |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- APUT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| loop |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- APUT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| select |
| accept Task_Entry(Items: in A_List) do |
| List_Copy := Items; |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point( List_Copy ); -- BFPUT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| end Task_Entry; |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- APUT |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| or terminate; |
| end select; |
| end loop; |
| end TT; |
| |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point; -- ARTO |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| |
| end CXH3002_0; |
| |
| -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CXH3002_1 |
| |
| with Report; |
| package body CXH3002_0.CXH3002_1 is |
| |
| Embedded_Final_Object : Final |
| := (Ada.Finalization.Controlled with Value => 1); |
| -- attempt to call Initialize here would P_E! |
| |
| procedure Initialize( F: in out Final ) is |
| begin |
| F.Value := 1; |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point( Embedded_Final_Object ); -- BKQP |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| end Initialize; |
| |
| procedure Adjust( F: in out Final ) is |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point; -- AQO |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| begin |
| F.Value := 2; |
| end Adjust; |
| |
| procedure Finalize( F: in out Final ) is |
| begin |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- AQP |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| if F.Value not in 1..10 then |
| Report.Failed("Bad value in controlled object at finalization"); |
| end if; |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| pragma Inspection_Point; -- AQP |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---==== |
| end Finalize; |
| |
| begin |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---====== |
| pragma Inspection_Point( Embedded_Final_Object ); -- BKRTP |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---====== |
| null; |
| end CXH3002_0.CXH3002_1; |
| |
| ------------------------------------------------------------------- CXH3002 |
| |
| with Report; |
| with CXH3002_0.CXH3002_1; |
| procedure CXH3002 is |
| |
| use type CXH3002_0.Enum, CXH3002_0.Int, CXH3002_0.Unt, CXH3002_0.Flt, |
| CXH3002_0.Fix, CXH3002_0.Root; |
| |
| Main_Enum : CXH3002_0.Enum := CXH3002_0.Item; |
| Main_Int : CXH3002_0.Int; |
| Main_Unt : CXH3002_0.Unt; |
| Main_Flt : CXH3002_0.Flt; |
| Main_Fix : CXH3002_0.Fix; |
| Main_Rec : CXH3002_0.Root(CXH3002_0.Stuff) |
| := (CXH3002_0.Stuff, I => 1, U => 2); |
| |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| pragma Inspection_Point( Main_Rec ); -- BJQO |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---===== |
| |
| Main_List : CXH3002_0.List := ( others => Main_Rec ); |
| |
| Main_A_List : CXH3002_0.A_List := new CXH3002_0.List'( others => Main_Rec ); |
| Main_A_Proc : CXH3002_0.A_Proc := CXH3002_0.Func; |
| -- CXH3002_0.Proc'Access |
| Main_PT : CXH3002_0.PT; |
| Main_TT : CXH3002_0.TT; |
| |
| type Test_Range is (First, Second); |
| |
| procedure Assert( Truth : Boolean; Message : String ) is |
| begin |
| if not Truth then |
| Report.Failed( "Unexpected value found in " & Message ); |
| end if; |
| end Assert; |
| |
| begin -- Main test procedure. |
| |
| Report.Test ("CXH3002", "Check pragma Inspection_Point" ); |
| |
| Enclosure:declare |
| Main_Final : CXH3002_0.CXH3002_1.Final; |
| Xtra_Final : CXH3002_0.CXH3002_1.Final; |
| begin |
| for Test_Case in Test_Range loop |
| |
| |
| case Test_Case is |
| when First => |
| Main_Final.Value := 5; |
| Xtra_Final := Main_Final; -- call Adjust |
| Main_Enum := CXH3002_0.Things; |
| Main_Int := CXH3002_0.Int'First; |
| Main_Unt := CXH3002_0.Unt'Last; |
| Main_Flt := 3.14; |
| Main_Fix := 0.5; |
| Main_Rec := (CXH3002_0.Stuff, I => 3, U => 4); |
| Main_List(Main_Unt) := Main_Rec; |
| Main_A_List(CXH3002_0.Unt'First) := (CXH3002_0.Stuff, I => 5, U => 6); |
| Main_A_Proc( Main_A_List(2) ); |
| Main_PT.Prot_Entry(True); |
| Main_TT.Task_Entry( null ); |
| |
| when Second => |
| Assert( Main_Final.Value = 5, "Main_Final" ); |
| Assert( Xtra_Final.Value = 2, "Xtra_Final" ); |
| Assert( Main_Enum = CXH3002_0.Things, "Main_Enum" ); |
| Assert( Main_Int = CXH3002_0.Int'First, "Main_Int" ); |
| Assert( Main_Unt = CXH3002_0.Unt'Last, "Main_Unt" ); |
| Assert( Main_Flt in 3.0..3.5, "Main_Flt" ); |
| Assert( Main_Fix = 0.5, "Main_Fix" ); |
| Assert( Main_Rec = (CXH3002_0.Stuff, I => 3, U => 4), "Main_Rec" ); |
| Assert( Main_List(Main_Unt) = Main_Rec, "Main_List" ); |
| Assert( Main_A_List(CXH3002_0.Unt'First) |
| = (CXH3002_0.Stuff, I => 5, U => 6), "Main_A_List" ); |
| |
| end case; |
| |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---== |
| pragma Inspection_Point( -- CQP |
| Main_Final, -- M |
| Main_Enum, -- D |
| Main_Int, -- E |
| Main_Unt, -- E |
| Main_Flt, -- G |
| Main_Fix, -- H |
| Main_Rec, -- J |
| Main_List, -- I |
| Main_A_List, -- F |
| Main_A_Proc, -- F |
| Main_PT, -- L |
| Main_TT ); -- N |
| -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- ---== |
| |
| end loop; |
| end Enclosure; |
| |
| Report.Result; |
| |
| end CXH3002; |