1use strict; 2use warnings; 3 4use Test::More; 5 6use Convert::BinHex; 7 8my %TEST = ( 9 PIVOT_3 => { 10 COMP => [ "90 00 01 02 03 04 00", "90 00 03" ], 11 BIN => "90 01 02 03 04 00 90 03", 12 }, 13 PIVOT_2 => { 14 COMP => [ "90 00 01 02 03 04 00 90", "00 03" ], 15 BIN => "90 01 02 03 04 00 90 03", 16 }, 17 PIVOT_1 => { 18 COMP => [ "90 00 01 02 03 04 00 90 00", "03" ], 19 BIN => "90 01 02 03 04 00 90 03", 20 }, 21 CHOPPY => { 22 COMP => [ "90", "00", "01 02 03 04", "00", "90", "00", "03" ], 23 BIN => "90 01 02 03 04 00 90 03", 24 }, 25 FOUR_FIVES => { 26 COMP => ["01 02 03 04 05 90 04"], 27 BIN => "01 02 03 04 05 05 05 05", 28 }, 29 FOUR_FIVES_AND_A_SIX => { 30 COMP => ["01 02 03 04 05 90 04 06"], 31 BIN => "01 02 03 04 05 05 05 05 06", 32 }, 33 FOUR_MARKS => { 34 COMP => ["01 02 03 04 90 00 90 04"], 35 BIN => "01 02 03 04 90 90 90 90", 36 }, 37 FOUR_MARKS_AND_A_SIX => { 38 COMP => ["01 02 03 04 90 00 90 04 06"], 39 BIN => "01 02 03 04 90 90 90 90 06", 40 }, 41 FIVE_ONES_AND_TWOS => { 42 COMP => ["01 90 05 02 90 05"], 43 BIN => "01 01 01 01 01 02 02 02 02 02", 44 }, 45); 46 47sub str2hex { 48 my $str = shift; 49 eval '"\x' . join( '\x', split( /\s+/, $str ) ) . '"'; 50} 51 52#------------------------------------------------------------ 53# BEGIN 54#------------------------------------------------------------ 55foreach my $TESTKEY ( sort keys %TEST ) { 56 my $test = $TEST{$TESTKEY}; 57 my @comps = map { str2hex($_) } @{ $test->{COMP} }; 58 my $bin = str2hex( $test->{BIN} ); 59 60 my $rbin = ''; 61 my $H2B = Convert::BinHex->hex2bin; 62 foreach my $comp (@comps) { 63 $rbin .= $H2B->comp2bin_next($comp); 64 } 65 is( $rbin, $bin, "test $TESTKEY" ); 66} 67 68done_testing(); 69 70