The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: filetype=perl :
use Test::More tests => 548;
use lib 't/lib';
use Test::MMS::Parser;

BEGIN {
   use_ok('MMS::Parser');
}

my $parser = MMS::Parser->create();

# Test 1-octet stuff like octet or uint8
my $octet_checker = make_checker($parser, 'octet');
my $uint8_checker = make_checker($parser, 'uint8');
foreach my $index (0 .. 255) {
   my $c = chr($index);
   $octet_checker->($c, $c);
   $uint8_checker->($c, $index);
}

my %tests = (
   uint16 => [
      ["\x00\x00" => 0],
      ["\x00\x01" => 1],
      ["\x00\x10" => 16],
      ["\x00\x34" => 52],
      ["\x00\x80" => 128],
      ["\x00\xFF" => 255],
      ["\x01\x00" => 256],
      ["\xFF\x00" => 0xFF00],
      ["\x0F\x0F" => 0x0F0F],
      ["\x12\x34" => 0x1234],
      ["\xFF\xFF" => 0xFFFF],
   ],

   uint32 => [
      ["\x00\x00\x00\x00" => 0],
      ["\x00\x00\x00\x01" => 1],
      ["\x00\x00\x00\x10" => 16],
      ["\x00\x00\x00\x34" => 52],
      ["\x00\x00\x00\x80" => 128],
      ["\x00\x00\x00\xFF" => 255],
      ["\x00\x00\x01\x00" => 256],
      ["\x00\x00\xFF\x00" => 0xFF00],
      ["\x00\x00\x0F\x0F" => 0x0F0F],
      ["\x00\x00\x12\x34" => 0x1234],
      ["\x00\x00\xFF\xFF" => 0xFFFF],
      ["\x00\x00\xFF\xFF" => 0xFFFF],
      ["\x00\x00\xFF\xFF" => 0xFFFF],
      ["\x00\x00\xFF\xFF" => 0xFFFF],
      ["\x12\x34\x56\x78" => 0x1234_5678],
      ["\x87\x65\x43\x21" => 0x8765_4321],
      ["\xFF\xFF\xFF\xFF" => 0xFFFF_FFFF],
   ],

   uintvar => [
      ["\x00"                 => 0],
      ["\x01"                 => 1],
      ["\x10"                 => 16],
      ["\x7F"                 => 127],
      ["\xFF\x0F"             => 0x3F8F],
      ["\x82\x8F\x25"         => 0x87A5],
      ["\x8F\xFF\xFF\xFF\x7F" => 0xFF_FF_FF_FF],
   ],
);

while (my ($subname, $spec) = each %tests) {
   my $checker = make_checker($parser, $subname);
   $checker->(@$_) foreach @$spec;
}