aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats-4/tests/c3/c394001.a
blob: 3d5eabace843fc090d032479a6106a2ec4df5277 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
-- C394001.A
--
--                            Grant of Unlimited Rights
--
--    AdaCore holds unlimited rights in the software and documentation
--    contained herein. Unlimited rights are the same as those granted
--    by the U.S. Government for older parts of the Ada Conformity
--    Assessment Test Suite, and are defined in DFAR 252.227-7013(a)(19).
--    By making this public release, AdaCore intends to confer upon all
--    recipients unlimited rights equal to those held by the Ada Conformity
--    Assessment Authority. 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. ADACORE 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.
--
--                                    Notice
--
--    The ACAA has created and maintains the Ada Conformity Assessment Test
--    Suite for the purpose of conformity assessments conducted in accordance
--    with the International Standard ISO/IEC 18009 - Ada: Conformity
--    assessment of a language processor. This test suite should not be used
--    to make claims of conformance unless used in accordance with
--    ISO/IEC 18009 and any applicable ACAA procedures.
--
--    This test is based on one submitted by AdaCore; AdaCore retains the
--    copyright on the test.
--*
--  OBJECTIVE:
--      Check that an object of a task interface type can be the prefix of the
--      Terminated and Callable attributes.
--
--      Check that an object of a task interface type can be passed to an
--      abort statement.
--
--  CHANGE HISTORY:
--      20 Oct 2005 HK  Initial Version
--      05 Dec 2005 HK  Add delays to ensure uniform output on different
--                      machines.
--      28 Oct 2007 RLB Corrected objective, made self-testing, renamed
--                      for ACATS 3.0.
--!

with Impdef;
with Report; use Report;

procedure C394001 is

   package Pkg is
      ----------------
      -- Interfaces --
      ----------------

      type Task_Attribute_Iface is task interface;
      procedure Stop (Obj : in out Task_Attribute_Iface) is abstract;

      -------------------------------
      -- Interface implementations --
      -------------------------------

      task type Task_Typ_Task_Attribute_Iface is new
         Task_Attribute_Iface
      with
         entry Stop;
      end Task_Typ_Task_Attribute_Iface;
   end Pkg;

   package body Pkg is

      ------------
      -- Bodies --
      ------------

      task body Task_Typ_Task_Attribute_Iface is
         Terminated : Boolean := False;
      begin
         while not Terminated loop
            accept Stop do
               Terminated := True;
            end Stop;
         end loop;
      end Task_Typ_Task_Attribute_Iface;
   end Pkg;

   use Pkg;

   -----------
   -- Tests --
   -----------

   procedure Check_Value (Value, Expected : Boolean; Attribute : String) is
   begin
      if Value /= Expected then
         Failed (Attribute & " is " & Boolean'Image(Value) & " but " &
                 Boolean'Image(Expected) & " was expected");
      end if;
   end Check_Value;


   procedure Check_Attributes_And_Stop
        (Obj : in out Task_Attribute_Iface'Class) is
   begin
      delay Impdef.Switch_to_New_Task;
      Check_Value (Value => Obj'Callable,
                   Expected => True,
                   Attribute => "Callable");
      Check_Value (Value => Obj'Terminated,
                   Expected => False,
                   Attribute => "Terminated");

      Comment ("  Stop task");
      Obj.Stop;

      delay Impdef.Minimum_Task_Switch;
      Check_Value (Value => Obj'Callable,
                   Expected => False,
                   Attribute => "Callable");
      Check_Value (Value => Obj'Terminated,
                   Expected => True,
                   Attribute => "Terminated");

   end Check_Attributes_And_Stop;


   procedure Check_Attributes_And_Abort
        (Obj : in out Task_Attribute_Iface'Class) is
   begin
      delay Impdef.Switch_to_New_Task;
      Check_Value (Value => Obj'Callable,
                   Expected => True,
                   Attribute => "Callable");
      Check_Value (Value => Obj'Terminated,
                   Expected => False,
                   Attribute => "Terminated");

      Comment ("  Abort task");
      abort Obj;

      delay Impdef.Minimum_Task_Switch;
      Check_Value (Value => Obj'Callable,
                   Expected => False,
                   Attribute => "Callable");
      Check_Value (Value => Obj'Terminated,
                   Expected => True,
                   Attribute => "Terminated");
   end Check_Attributes_And_Abort;

   --  Local variables

   TTTAI1 : Task_Typ_Task_Attribute_Iface;
   TTTAI2 : Task_Typ_Task_Attribute_Iface;

begin
   Test ("C394001", "Check that an object of a task interface type can be " &
                    "the prefix of the Terminated and Callable attributes " &
                    "and be passed to an abort statement");

   Check_Attributes_And_Stop  (TTTAI1);
   Check_Attributes_And_Abort (TTTAI2);

   Result;
end C394001;