50 lines
1.2 KiB
Ada
50 lines
1.2 KiB
Ada
-- { dg-do run }
|
|
|
|
with System, Ada.Unchecked_Conversion; use System;
|
|
|
|
procedure BLKextract_From_Reg is
|
|
|
|
type Byte is range 0 .. +255;
|
|
for Byte'size use 8;
|
|
|
|
type RGB is array (1 .. 3) of Byte;
|
|
for RGB'Size use 24;
|
|
|
|
type RAW_Packet is range 0 .. 2 ** 32 - 1;
|
|
for RAW_Packet'Size use 32;
|
|
|
|
type Composite_Packet is record
|
|
Values : RGB;
|
|
Pad : Byte;
|
|
end record;
|
|
for Composite_Packet use record
|
|
Values at 0 range 0 .. 23;
|
|
Pad at 3 range 0 .. 7;
|
|
end record;
|
|
for Composite_Packet'Size use 32;
|
|
|
|
function To_Composite_Packet is
|
|
new Ada.Unchecked_Conversion (RAW_Packet, Composite_Packet);
|
|
|
|
function Blob return RGB is
|
|
RAW_Blob : RAW_Packet := 16#01020304#;
|
|
begin
|
|
return To_Composite_Packet (RAW_Blob).Values;
|
|
end;
|
|
|
|
Blob_Color : RGB := Blob;
|
|
Expected_Color : RGB;
|
|
begin
|
|
if System.Default_Bit_Order = High_Order_First then
|
|
Expected_Color := (1 => 1, 2 => 2, 3 => 3);
|
|
else
|
|
Expected_Color := (1 => 4, 2 => 3, 3 => 2);
|
|
end if;
|
|
|
|
for I in Blob_Color'Range loop
|
|
if Blob_Color (I) /= Expected_Color (I) then
|
|
raise Program_Error;
|
|
end if;
|
|
end loop;
|
|
end;
|