The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;

use Test::More tests => 196;

BEGIN { use_ok "Data::Pond", qw(pond_read_datum pond_write_datum); }

is_deeply pond_read_datum($_), eval($_) foreach
	'""',
	'"abc"',
	'"a b"',
	"\"a'b\"",
	'"a\tb"',
	'"a\nb"',
	"\"a\\\\b\"",
	"\"a\\\"b\"",
	"\"a\\\$b\"",
	"\"a\\\*b\"",
	'"a\xe3b"',
	'"a\x00b"',
	'"a\x7fb"',
	'"a\x80b"',
	'"a\xa0b"',
	'"a\x{123}b"',
	"\"a\x{123}b\"",
	'"a\123b"',
	'"a\12b"',
	'"a\1b"',
	' "abc" ',
	"''",
	"'abc'",
	"'a\"bc'",
	"'a\\bc'",
	"'a\\'bc'",
	"'a\\\\bc'",
	"'a\\\"bc'",
	"'a\x{123}b'",
	" 'abc' ",
	'123',
	'7',
	'0',
	'"0123"',
	'"00"',
	'"1234567890"',
	' 123 ',
	'[]',
	'[1]',
	'[ 1 ]',
	'[1,]',
	'[ 1 , ]',
	'["a",2]',
	'["a",2,]',
	'["a",[2],]',
	' [ "a" , [ 2 ] , ] ',
	'{}',
	'{1,2}',
	'{1,2,}',
	' { 1 , 2 , } ',
	'{a=>b=>}',
	' { a => b => } ',
	'{a=>[],b=>123}',
	'{a=>[],b=>123,}',
	'{" foo",123}';

is pond_write_datum(pond_read_datum($_), {unicode=>1}), $_ foreach
	'""',
	'"abc"',
	'"a b"',
	"\"a'b\"",
	'"a\tb"',
	'"a\nb"',
	"\"a\\\\b\"",
	"\"a\\\"b\"",
	"\"a\\\$b\"",
	"\"a*b\"",
	"\"a\xe3b\"",
	'"a\x00b"',
	'"a\x7fb"',
	'"a\x80b"',
	'"a\xa0b"',
	"\"a\x{123}b\"",
	'123',
	'7',
	'0',
	'"0123"',
	'"00"',
	'"1234567890"',
	'[]',
	'[1]',
	'["a",2]',
	'["a",[2]]',
	'{}',
	'{1=>2}',
	'{a=>"b"}',
	'{a=>[],b=>123}',
	'{a=>[],b=>"0123"}',
	'{a=>[],b=>"00"}',
	'{a=>[],b=>"1234567890"}',
	'{" foo"=>123}',
	"{\"z\x{123}Z\"=>[\"a\x{123}A\"]}";

is pond_write_datum(pond_read_datum($_), {indent=>0, unicode=>1}), $_ foreach
	'""',
	'"abc"',
	'"a b"',
	"\"a'b\"",
	'"a\tb"',
	'"a\nb"',
	"\"a\\\\b\"",
	"\"a\\\"b\"",
	"\"a\\\$b\"",
	"\"a*b\"",
	"\"a\xe3b\"",
	'"a\x00b"',
	'"a\x7fb"',
	'"a\x80b"',
	'"a\xa0b"',
	"\"a\x{123}b\"",
	'123',
	'7',
	'0',
	'"0123"',
	'"00"',
	'"1234567890"',
	'[]',
	"[\n    1,\n]",
	"[\n    \"a\",\n    2,\n]",
	"[\n    \"a\",\n    [\n        2,\n    ],\n]",
	"{}",
	"{\n    1 => 2,\n}",
	"{\n    a => \"b\",\n}",
	"{\n    a => [],\n    b => 123,\n}",
	"{\n    a => [],\n    b => \"0123\",\n}",
	"{\n    a => [],\n    b => \"00\",\n}",
	"{\n    a => [],\n    b => \"1234567890\",\n}",
	"{\n    \" foo\" => 123,\n}",
	"{\n    \"z\x{123}Z\" => [\n        \"a\x{123}A\",\n    ],\n}";

is pond_write_datum(pond_read_datum($_), {}), $_ foreach
	'""',
	'"abc"',
	'"a b"',
	"\"a'b\"",
	'"a\tb"',
	'"a\nb"',
	"\"a\\\\b\"",
	"\"a\\\"b\"",
	"\"a\\\$b\"",
	"\"a*b\"",
	'"a\x{e3}b"',
	'"a\x00b"',
	'"a\x7fb"',
	'"a\x80b"',
	'"a\xa0b"',
	'"a\x{123}b"',
	'123',
	'7',
	'0',
	'"0123"',
	'"00"',
	'"1234567890"',
	'[]',
	'[1]',
	'["a",2]',
	'["a",[2]]',
	'{}',
	'{1=>2}',
	'{a=>"b"}',
	'{a=>[],b=>123}',
	'{a=>[],b=>"0123"}',
	'{a=>[],b=>"00"}',
	'{a=>[],b=>"1234567890"}',
	'{" foo"=>123}',
	"{\"z\\x{123}Z\"=>[\"a\\x{123}A\"]}";

is pond_write_datum(pond_read_datum($_), {indent=>0}), $_ foreach
	'""',
	'"abc"',
	'"a b"',
	"\"a'b\"",
	'"a\tb"',
	'"a\nb"',
	"\"a\\\\b\"",
	"\"a\\\"b\"",
	"\"a\\\$b\"",
	"\"a*b\"",
	"\"a\\x{e3}b\"",
	'"a\x00b"',
	'"a\x7fb"',
	'"a\x80b"',
	'"a\xa0b"',
	"\"a\\x{123}b\"",
	'123',
	'7',
	'0',
	'"0123"',
	'"00"',
	'"1234567890"',
	'[]',
	"[\n    1,\n]",
	"[\n    \"a\",\n    2,\n]",
	"[\n    \"a\",\n    [\n        2,\n    ],\n]",
	"{}",
	"{\n    1 => 2,\n}",
	"{\n    a => \"b\",\n}",
	"{\n    a => [],\n    b => 123,\n}",
	"{\n    a => [],\n    b => \"0123\",\n}",
	"{\n    a => [],\n    b => \"00\",\n}",
	"{\n    a => [],\n    b => \"1234567890\",\n}",
	"{\n    \" foo\" => 123,\n}",
	"{\n    \"z\\x{123}Z\" => [\n        \"a\\x{123}A\",\n    ],\n}";

1;