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