module tests.serialization;

import tern.serialization;

unittest
{
    static foreach(value; [1, 2, 4, ubyte.max, ushort.max, uint.max, ulong.max, ubyte.max+1, ushort.max+1, uint.max+1, ulong.max+1, ubyte.max-1, ushort.max-1, uint.max-1, ulong.max-1, 69, 420])
    {{
        static foreach(typeS; ["ubyte", "byte", "ushort", "short", "int", "uint", "long", "ulong", "float", "real", "double"])
        {{
            alias T = mixin(typeS);
            T initial = cast(T)value;
            assert(initial == initial.serialize().deserialize!T);

            T[] arrayTest = [initial, initial, initial, initial, initial, initial, initial];
            
            assert(arrayTest == arrayTest.serialize().deserialize!(T[]));
        }}
    }}
    static foreach(value; [1, 2, 4, ubyte.max, ushort.max, 3.14159265359, 6.28318530718, 1.234567])
    {{
        static foreach(typeS; ["ubyte", "byte", "ushort", "short", "int", "uint", "long", "ulong", "float", "real", "double"])
        {{
            alias T = mixin(typeS);
            T initial = cast(T)value;
            assert(initial == initial.serialize().deserialize!T);

            T[] arrayTest = [initial, initial, initial, initial, initial, initial, initial];

            assert(arrayTest == arrayTest.serialize().deserialize!(T[]));
        }}
    }}
}