-- { dg-do run }
-- { dg-options "-gnatws" }

with Unchecked_Conversion;
procedure biased_uc is
begin
    --  Case (f) target type is biased, source is unbiased

    declare 
       type a is new integer range 0 .. 255; 
       for a'size use 8;

       type b is new integer range 200 .. 455; 
       for b'size use 8;

       av : a; 
       bv : b; 

       for av'size use 8;
       for bv'size use 8;

       function a2b is new Unchecked_Conversion (a,b);

    begin   
       bv := a2b (200);
       if bv = 200 then
          raise Program_Error;
       end if; 
    end;    

    --  Case (g) target type is biased, source object is biased

    declare 
       type a is new integer range 1 .. 256; 
       for a'size use 16; 

       type b is new integer range 1 .. 65536;
       for b'size use 16;

       av : a;
       bv : b;

       for av'size use 8;
       for bv'size use 16;

       function a2b is new Unchecked_Conversion (a,b);

    begin
       bv := a2b (1);
       if bv /= 2 then
          raise Program_Error;
       end if;
    end;
end;