use Test::More tests => 20;
BEGIN { use_ok('Class::Bits') };
package Foo;
use Class::Bits;
make_bits(foo=>1, bar=>'s4', dor=> 2);
package Bar;
use Class::Bits;
make_bits(foo=>32, doz=>16, bar=>'s32', dor=>'s16');
package main;
my $obj=Foo->new();
is($obj->length, 10, 'length');
is($obj->dor, 0, 'init to 0');
is($obj->bar(3), 3, 'set to 3');
is($obj->bar, 3, 'get 3');
is($obj->bar(255), -1, 'set out of range');
is($$obj, "\xf0\x00", 'as string');
my $o2=Foo->new("\xf0\x01");
is($o2->dor, 1, "init from string");
my $o3=Foo->new(foo=>1, bar=>2, dor=>2);
is($o3->bar, 2, "init from array");
is($$o3, "\x21\x02", "as string 3");
my $o4=Bar->new();
is ($o4->foo(4294967295), 4294967295, "4294967295 to u32 4294967295");
is ($o4->foo(-1), 4294967295, "-1 to u32 4294967295");
is ($o4->bar(-1), -1, "-1 to s32 -1");
is ($o4->bar(4294967295), -1, "4294967295 to s32 -1");
is ($o4->dor(4294967295), -1, "4294967295 to s16 -1");
is ($o4->dor(-1), -1, "-1 to s16 -1");
is ($o4->doz(4294967295), 65535, "4294967295 to u16 65535");
is ($o4->doz(-1), 65535, "-1 to u16 65535");
my @k=sort $o4->keys;
is ($k[0], 'bar', 'keys bar');
is ($k[3], 'foo', 'keys foo');