local
	tableutil,
	serializer
= ...

local a = { 1, 2, 3 }

local am = serializer.serialize(a)

tableutil.print(am)

local au = serializer.deserialize(am)

testassert(tableutil.equal(a, au))

local a1 = { "foo", "bar", a }
setmetatable(a1, a)

local a1m = serializer.serialize(a1)

tableutil.print(a1m)

local a1u = serializer.deserialize(a1m)

testassert(tableutil.equal(a1, a1u))

local a2 =
{
	a = a1,
	b = a1
}

local a2m = serializer.serialize(a2)

tableutil.print(a2m)

local a2u = serializer.deserialize(a2m)

testassert(tableutil.equal(a2, a2u))

local a3 =
{
	a = a1,
	b = a2
}

a3.c = a3

local a3m = serializer.serialize(a3)

tableutil.print(a3m)

local a3u = serializer.deserialize(a3m)

testassert(tableutil.equal(a3, a3u))

local a4 =
{
	[a1] = a2,
	[a3] = a2
}

a4[a4] = a4

setmetatable(a4, a3)
setmetatable(a3, a4)

local a4m = serializer.serialize(a4)

tableutil.print(a4m)

local a4u = serializer.deserialize(a4m)

testassert(tableutil.equal(a4, a4u))
