1-- { dg-do run } 2 3procedure Enum4 is 4 5 procedure Assert (Expected, Actual : String) is 6 begin 7 if Expected /= Actual then 8 raise Program_Error; 9 end if; 10 end Assert; 11 12 procedure Test_1 is 13 type Test_Enum is (Enum_1, Enum_2); 14 for Test_Enum use (Enum_1=> 8, Enum_2=> 12); 15 16 Enum_Values : constant array (Test_Enum) of Natural := (8, 12); 17 18 type Test_Enum_Rep is range 1..12; 19 Tmp_Test_Enum_Rep : Test_Enum_Rep; 20 begin 21 Tmp_Test_Enum_Rep := Test_Enum'Enum_Rep (Test_Enum'First); 22 Assert (" 8", Tmp_Test_Enum_Rep'Img); 23 24 for Enum in Test_Enum loop 25 Tmp_Test_Enum_Rep := Test_Enum'Enum_Rep (Enum); 26 Assert (Enum_Values (Enum)'Img, Tmp_Test_Enum_Rep'Img); 27 end loop; 28 end Test_1; 29 30 procedure Test_2 is 31 type Test_Enum is (Enum_1); 32 for Test_Enum use (Enum_1=> 2); 33 34 type Test_Enum_Rep_Full is range 0..2; 35 subtype Test_Enum_Rep_Short is 36 Test_Enum_Rep_Full range 2..Test_Enum_Rep_Full'Last; 37 38 Tmp_Test_Enum_Rep_Full : Test_Enum_Rep_Full; 39 Tmp_Test_Enum_Rep_Short : Test_Enum_Rep_Short; 40 41 begin 42 Tmp_Test_Enum_Rep_Short := Test_Enum'Enum_Rep (Test_Enum'First); 43 Assert (" 2", Tmp_Test_Enum_Rep_Short'Img); 44 45 for Enum in Test_Enum loop 46 Tmp_Test_Enum_Rep_Full := Test_Enum'Enum_Rep (Enum); 47 Assert (" 2", Tmp_Test_Enum_Rep_Short'Img); 48 end loop; 49 50 for Enum in Test_Enum range Test_Enum'First .. Test_Enum'Last loop 51 Tmp_Test_Enum_Rep_Short := Test_Enum'Enum_Rep(Enum); -- Test #2 52 Assert (" 2", Tmp_Test_Enum_Rep_Short'Img); 53 end loop; 54 end Test_2; 55 56begin 57 Test_1; 58 Test_2; 59end; 60