Data-Bitfield
view release on metacpan or search on metacpan
t/02intfield.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Fatal;
use Data::Bitfield qw( bitfield intfield signed_intfield );
{
bitfield { format => "bytes-LE" }, BYTES =>
first => intfield(0,2),
second => intfield(2,2),
third => intfield(4,4);
is( sprintf( "%v02x", pack_BYTES( first => 1, third => 6 ) ), "61",
'pack_BYTES' );
is_deeply( { unpack_BYTES( "\x46" ) }, { first => 2, second => 1, third => 4 },
'unpack_BYTES' );
}
# 16bits in little- and big-endian
{
bitfield { format => "bytes-LE" }, U16L =>
i => intfield(0, 16);
bitfield { format => "bytes-BE" }, U16B =>
i => intfield(0, 16);
is( sprintf( "%v02x", pack_U16L( i => 0x1234 ) ), "34.12",
'pack_U16L' );
is( sprintf( "%v02x", pack_U16B( i => 0x1234 ) ), "12.34",
'pack_U16B' );
is_deeply( { unpack_U16L( "\x78\x56" ) }, { i => 0x5678 },
'unpack_U16L' );
is_deeply( { unpack_U16B( "\x56\x78" ) }, { i => 0x5678 },
'unpack_U16B' );
}
# Two 8bit fields still encode in the correct direction
{
bitfield { format => "bytes-LE" }, U8U8L =>
x => intfield(0, 8),
y => intfield(8, 8);
bitfield { format => "bytes-BE" }, U8U8B =>
x => intfield(0, 8),
y => intfield(8, 8);
is( sprintf( "%v02x", pack_U8U8L( x => 1, y => 2 ) ), "01.02",
'pack_U16L' );
is( sprintf( "%v02x", pack_U8U8B( x => 1, y => 2 ) ), "01.02",
'pack_U16L' );
is_deeply( { unpack_U8U8L( "\x01\x02" ) }, { x => 1, y => 2 },
'unpack_U8U8L' );
is_deeply( { unpack_U8U8B( "\x01\x02" ) }, { x => 1, y => 2 },
'unpack_U8U8B' );
}
# signed_intfield
{
bitfield { format => "bytes-LE" }, S4S4 =>
a => signed_intfield(0, 4),
b => signed_intfield(4, 4);
( run in 1.545 second using v1.01-cache-2.11-cpan-54e63673c56 )