(root)/
gcc-13.2.0/
gcc/
testsuite/
gnat.dg/
enum4.adb
--  { 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;