public Tests DataModelSerializerFactory_StructuralConversions_Tests()
        {
            var recordHelper = new StructuralHelper(StructuralDataTypeKinds.Record)
            {
                { "Item1", typeof(int), 42 },
                { "Item2", typeof(string), "qux" },
            };

            var record     = recordHelper.Instance;
            var recordType = recordHelper.Type;

#pragma warning disable IDE0050 // Convert to tuple. (Test for anonymous types.)

            var anonymous     = new { Item1 = 42, Item2 = "qux" };
            var anonymousType = anonymous.GetType();

#pragma warning restore IDE0050

            var tuple     = Tuple.Create(42, "qux");
            var tupleType = typeof(Tuple <int, string>);

            var entity = new MyTuple {
                Item1 = 42, Item2 = "qux"
            };
            var entityType = typeof(MyTuple);

            var tests = new Tests
            {
                // record to anonymous
                { "(Anonymous)(Record)new { Item1 = 42, Item2 = \"qux\" }", recordType, anonymousType, record, DataTypeObjectEqualityComparer.Default },
                // record to entity
                { "(MyTuple)(Record)new { Item1 = 42, Item2 = \"qux\" }", recordType, entityType, record, DataTypeObjectEqualityComparer.Default },
                // record to tuple
                { "(Tuple<int, string>)(Record)new { Item1 = 42, Item2 = \"qux\" }", recordType, tupleType, record, DataTypeObjectEqualityComparer.Default },

                // anonymous to record
                { "(Record)(Anonymous)new { Item1 = 42, Item2 = \"qux\" }", anonymousType, recordType, anonymous, DataTypeObjectEqualityComparer.Default },
                // anonymous to entity
                { "(MyTuple)(Anonymous)new { Item1 = 42, Item2 = \"qux\" }", anonymousType, entityType, anonymous, DataTypeObjectEqualityComparer.Default },
                // anonymous to tuple
                { "(Tuple<int, string>)(Anonymous)new { Item1 = 42, Item2 = \"qux\" }", anonymousType, tupleType, anonymous, DataTypeObjectEqualityComparer.Default },

                // entity to record
                { "(Record)(MyTuple)new MyTuple { Item1 = 42, Item2 = \"qux\" }", entityType, recordType, entity, DataTypeObjectEqualityComparer.Default },
                // entity to anonymous
                { "(Anonymous)(MyTuple)new MyTuple { Item1 = 42, Item2 = \"qux\" }", entityType, anonymousType, entity, DataTypeObjectEqualityComparer.Default },
                // entity to tuple
                { "(Tuple<int, string>)(MyTuple)new MyTuple { Item1 = 42, Item2 = \"qux\" }", entityType, tupleType, entity, DataTypeObjectEqualityComparer.Default },

                // tuple to record
                { "(Record)(Tuple<int, string>)Tuple.Create(42, \"qux\")", tupleType, recordType, tuple, DataTypeObjectEqualityComparer.Default },
                // tuple to anonymous
                { "(Anonymous)(Tuple<int, string>)Tuple.Create(42, \"qux\")", tupleType, anonymousType, tuple, DataTypeObjectEqualityComparer.Default },
                // tuple to entity
                { "(MyTuple)(Tuple<int, string>)Tuple.Create(42, \"qux\")", tupleType, entityType, tuple, DataTypeObjectEqualityComparer.Default },
            };

            return(tests);
        }
        public Tests DataModelSerializerFactory_Record_Tests()
        {
            var s1 = new StructuralHelper(StructuralDataTypeKinds.Record)
            {
                { "Foo", typeof(int), 42 },
                { "Bar", typeof(string), "qux" },
            };

            var tests = new Tests
            {
                { "new Record()", s1.Type, Activator.CreateInstance(s1.Type) },
                { "new Record { Foo = 42, Bar = \"qux\" }", s1.Type, s1.Instance },
                { "(Record)null", s1.Type, null },
            };

            return(tests);
        }