#!/usr/bin/env perl use Test::More; use CBOR::PP; my $is_64bit = eval { pack 'Q' }; my $is_weird_double = $Config::Config{'uselongdouble'} || $Config::Config{'usequadmath'}; SKIP: { skip "CBOR::XS didn’t load: $@" if !eval { require CBOR::XS; 1 }; skip "Types::Serialiser didn’t load: $@" if !eval { require Types::Serialiser; 1 }; my @tests = ( q<>, 0, 1, # Not all long-double Perls break here, but some do. ( $is_weird_double ? () : 1.1 ), -1, -24, -25, -254, -255, -256, -257, -65534, -65535, -65536, -65537, "\x00", "\xff", undef, Types::Serialiser::true(), Types::Serialiser::false(), [], {}, [ 0 ], [ 0xffffffff ], [ (undef) x 65535 ], [ (undef) x 65536 ], { map { ($_ => undef) } 1 .. 65535 }, { map { ($_ => undef) } 1 .. 65536 }, [ 123, q<>, { tiny => 'x', tiny2 => ('x' x 23), short => ('x' x 24), short2 => ('x' x 255), medium => ('x' x 256), medium2 => ('x' x 65535), large => ('x' x 65536), }, [ (undef) x 1 ], [ (undef) x 23], [ (undef) x 24], [ (undef) x 255 ], [ (undef) x 256 ], { map { ($_ => undef) } 1 .. 1 }, { map { ($_ => undef) } 1 .. 23}, { map { ($_ => undef) } 1 .. 24}, { map { ($_ => undef) } 1 .. 255 }, { map { ($_ => undef) } 1 .. 256 }, ], ); for my $item ( @tests ) { my ($cbor, $decoded); $cbor = CBOR::XS::encode_cbor($item); $decoded = CBOR::PP::decode($cbor); is_deeply( $decoded, $item, 'we decode what CBOR::XS encoded', ) or diag explain $decoded; $cbor = CBOR::PP::encode($item) or die "failed to encode()?"; $decoded = CBOR::XS::decode_cbor($cbor); is_deeply( $decoded, $item, sprintf( "CBOR::XS decodes what we encoded (%d bytes)", length $cbor), ) or diag sprintf('%v.02x', $cbor); } } done_testing;