aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gnat.dg/enum4.adb
blob: e8d743ec1d391fca84c38c1bbc342f9b1f6cff67 (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
--  { dg-do run }

procedure Enum4 is

   procedure Assert (Expected, Actual : String) is
   begin
      if Expected /= Actual then
         raise Program_Error;
      end if;
   end Assert;

   procedure Test_1 is
      type Test_Enum is (Enum_1,     Enum_2);
      for Test_Enum use (Enum_1=> 8, Enum_2=> 12);

      Enum_Values : constant array (Test_Enum) of Natural := (8, 12);

      type Test_Enum_Rep is range 1..12;
      Tmp_Test_Enum_Rep : Test_Enum_Rep;
   begin
      Tmp_Test_Enum_Rep := Test_Enum'Enum_Rep (Test_Enum'First);
      Assert (" 8", Tmp_Test_Enum_Rep'Img);

      for Enum in Test_Enum loop
         Tmp_Test_Enum_Rep := Test_Enum'Enum_Rep (Enum);
         Assert (Enum_Values (Enum)'Img, Tmp_Test_Enum_Rep'Img);
      end loop;
   end Test_1;

   procedure Test_2 is
      type Test_Enum is (Enum_1);
      for Test_Enum use (Enum_1=> 2);

      type Test_Enum_Rep_Full is range 0..2;
      subtype Test_Enum_Rep_Short is
        Test_Enum_Rep_Full range 2..Test_Enum_Rep_Full'Last;

      Tmp_Test_Enum_Rep_Full  : Test_Enum_Rep_Full;
      Tmp_Test_Enum_Rep_Short : Test_Enum_Rep_Short;

   begin
      Tmp_Test_Enum_Rep_Short := Test_Enum'Enum_Rep (Test_Enum'First);
      Assert (" 2", Tmp_Test_Enum_Rep_Short'Img);

      for Enum in Test_Enum loop
         Tmp_Test_Enum_Rep_Full := Test_Enum'Enum_Rep (Enum);
         Assert (" 2", Tmp_Test_Enum_Rep_Short'Img);
      end loop;

      for Enum in Test_Enum range Test_Enum'First .. Test_Enum'Last loop
         Tmp_Test_Enum_Rep_Short := Test_Enum'Enum_Rep(Enum);  --  Test #2
         Assert (" 2", Tmp_Test_Enum_Rep_Short'Img);
      end loop;
   end Test_2;

begin
   Test_1;
   Test_2;
end;