| 1 |
BEGIN { $| = 1; print "1..123\n"; } |
| 2 |
|
| 3 |
use CBOR::XS; |
| 4 |
|
| 5 |
print "ok 1\n"; |
| 6 |
my $tst = 1; |
| 7 |
|
| 8 |
sub tst($$) { |
| 9 |
my ($cbor, $correct) = @_; |
| 10 |
|
| 11 |
my $dec = CBOR::XS->new; |
| 12 |
|
| 13 |
# chop |
| 14 |
for my $step (1 .. length $cbor) { |
| 15 |
my $buf = ""; |
| 16 |
my @cbor; |
| 17 |
|
| 18 |
$dec->incr_reset; |
| 19 |
|
| 20 |
for (unpack "(a$step)*", $cbor) { |
| 21 |
$buf .= $_; |
| 22 |
push @cbor, $dec->incr_parse_multiple ($buf); |
| 23 |
} |
| 24 |
|
| 25 |
print length $buf ? "not " : "", "ok ", ++$tst, "\n"; |
| 26 |
|
| 27 |
my $enc = join " ", map +(unpack "H*", encode_cbor $_), @cbor; |
| 28 |
|
| 29 |
print $enc eq $correct ? "" : "not ", "ok ", ++$tst, " # ($step) $enc eq $correct\n"; |
| 30 |
} |
| 31 |
} |
| 32 |
|
| 33 |
sub err($$) { |
| 34 |
if (eval { CBOR::XS->new->max_size (1e3)->incr_parse ($_[0]); 1 }) { |
| 35 |
print "not ok ", ++$tst, " # unexpected success\n"; |
| 36 |
} elsif ($@ =~ $_[1]) { |
| 37 |
print "ok ", ++$tst, "\n"; |
| 38 |
} else { |
| 39 |
print "not ok ", ++$tst, " # $@\n"; |
| 40 |
} |
| 41 |
} |
| 42 |
|
| 43 |
tst "\x81\x82\x81\x80\x80\x80", "8182818080 80"; |
| 44 |
tst "\x01\x18\x55\x01", "01 1855 01"; |
| 45 |
#tst "\x18\x01\x19\x02\x02\x1a\x04\x04\x04\x04\x1b\x08\x08\x08\x08\x08\x08\x08\x08\x00", "01 190202 1a04040404 1b0808080808080808 00"; |
| 46 |
tst "\x18\x01\x19\x02\x02\x1a\x04\x04\x04\x04\x00", "01 190202 1a04040404 00"; |
| 47 |
tst "\x41A\x42CD", "4141 424344"; |
| 48 |
tst "\x58\x01A\x59\x00\x01B\x5a\x00\x00\x00\x01C\x5b\x00\x00\x00\x00\x00\x00\x00\x02XY\x01", "4141 4142 4143 425859 01"; |
| 49 |
tst "\x5f\x41A\x41B\x42CD\xff", "4441424344"; |
| 50 |
err "\xff", "major 7"; |
| 51 |
err "\x5a\xff\x00\x00\x00", "max_size"; |
| 52 |
|