#!/usr/bin/env perl

use strict;
use warnings;

use Test::More;
use Test::Exception;

use Data::Dumper;

use CBOR::PP;

my @roundtrip = (
    '00',
    '01',
    "\xff",
);

for my $val (@roundtrip) {
    local $Data::Dumper::Useqq = 1;
    local $Data::Dumper::Terse = 1;
    local $Data::Dumper::Indent = 0;

    is(
        CBOR::PP::decode( CBOR::PP::encode($val) ),
        $val,
        "round-trip preserves: " . Dumper($val),
    );
}

#----------------------------------------------------------------------

is(
    unpack( 'H*', CBOR::PP::encode( CBOR::PP::tag(0, '2013-03-21T20:04:00Z') ) ),
    'c054323031332d30332d32315432303a30343a30305a',
    'encode a tagged string',
);

#----------------------------------------------------------------------

my $narcissus = [];
push @$narcissus, $narcissus;

throws_ok(
    sub { CBOR::PP::encode($narcissus) },
    'CBOR::PP::X::Recursion',
    'recursive object triggers recursion error',
);

my $a = [];
my $b = [$a];
push @$a, $b;

throws_ok(
    sub { CBOR::PP::encode($a) },
    'CBOR::PP::X::Recursion',
    'object that recurses with another object triggers recursion error',
);

done_testing();