예제 #1
0
        public static bool Equals(Schema s1, Schema s2)
        {
            if (ReferenceEquals(s1, s2))
            {
                return(true);
            }
            if (s2 == null || s1 == null || s1.HasMetadata != s2.HasMetadata || s1.Fields.Count != s2.Fields.Count)
            {
                return(false);
            }

            if (!s1.Fields.Keys.All(k => s2.Fields.ContainsKey(k) && FieldComparer.Equals(s1.Fields[k], s2.Fields[k])) ||
                !s2.Fields.Keys.All(k => s1.Fields.ContainsKey(k) && FieldComparer.Equals(s2.Fields[k], s1.Fields[k])))
            {
                return(false);
            }

            if (s1.HasMetadata && s2.HasMetadata)
            {
                return(s1.Metadata.Keys.Count() == s2.Metadata.Keys.Count() &&
                       s1.Metadata.Keys.All(k => s2.Metadata.ContainsKey(k) && s1.Metadata[k] == s2.Metadata[k]) &&
                       s2.Metadata.Keys.All(k => s1.Metadata.ContainsKey(k) && s2.Metadata[k] == s1.Metadata[k]));
            }
            return(true);
        }
예제 #2
0
        public void TestListTypeConstructor()
        {
            var stringField = new Field.Builder().Name("item").DataType(StringType.Default).Build();
            var stringType1 = new ListType(stringField);
            var stringType2 = new ListType(StringType.Default);

            Assert.True(FieldComparer.Equals(stringType1.ValueField, stringType2.ValueField));
            Assert.Equal(stringType1.ValueDataType.TypeId, stringType2.ValueDataType.TypeId);
        }
예제 #3
0
        private static void CompareNested(NestedType expectedType, NestedType actualType)
        {
            Assert.Equal(expectedType.Fields.Count, actualType.Fields.Count);

            for (int i = 0; i < expectedType.Fields.Count; i++)
            {
                FieldComparer.Compare(expectedType.Fields[i], actualType.Fields[i]);
            }
        }
예제 #4
0
        public void Equality()
        {
            Field f0_nullable    = new Field.Builder().Name("f0").DataType(Int32Type.Default).Build();
            Field f0_nonnullable = new Field.Builder().Name("f0").DataType(Int32Type.Default).Nullable(false).Build();
            Field f0_other       = new Field.Builder().Name("f0").DataType(Int32Type.Default).Build();
            Field f0_with_meta   = new Field.Builder().Name("f0").DataType(Int32Type.Default).Nullable(true).Metadata("a", "1").Metadata("b", "2").Build();

            Assert.True(FieldComparer.Equals(f0_nullable, f0_other));
            Assert.False(FieldComparer.Equals(f0_nullable, f0_nonnullable));
            Assert.False(FieldComparer.Equals(f0_nullable, f0_with_meta));
        }
예제 #5
0
        public void TestMetadataConstruction()
        {
            var metadata = new Dictionary <string, string> {
                { "foo", "bar" }, { "bizz", "buzz" }
            };
            var   metadata1   = new Dictionary <string, string>(metadata);
            Field f0_nullable = new Field.Builder().Name("f0").DataType(Int32Type.Default).Metadata(metadata).Build();
            Field f1_nullable = new Field.Builder().Name("f0").DataType(Int32Type.Default).Metadata(metadata1).Build();

            Assert.True(metadata.Keys.SequenceEqual(f0_nullable.Metadata.Keys) && metadata.Values.SequenceEqual(f0_nullable.Metadata.Values));
            Assert.True(FieldComparer.Equals(f0_nullable, f1_nullable));
        }
예제 #6
0
        public void TestStructGetFieldByName()
        {
            Field f0_nullable = new Field.Builder().Name("f0").DataType(Int32Type.Default).Build();
            Field f1_nullable = new Field.Builder().Name("f1").DataType(StringType.Default).Build();
            Field f2_nullable = new Field.Builder().Name("f2").DataType(UInt8Type.Default).Build();

            List <Field> fields = new List <Field>()
            {
                f0_nullable, f1_nullable, f2_nullable
            };
            StructType struct_type = new StructType(fields);

            FieldComparer.Compare(struct_type.GetFieldByName("f0"), f0_nullable);
            FieldComparer.Compare(struct_type.GetFieldByName("f1"), f1_nullable);
            FieldComparer.Compare(struct_type.GetFieldByName("f2"), f2_nullable);
            Assert.True(struct_type.GetFieldByName("not_found") == null);
        }
예제 #7
0
        public void TestStructBasics()
        {
            Field f0_nullable = new Field.Builder().Name("f0").DataType(Int32Type.Default).Build();
            Field f1_nullable = new Field.Builder().Name("f1").DataType(StringType.Default).Build();
            Field f2_nullable = new Field.Builder().Name("f2").DataType(UInt8Type.Default).Build();

            List <Field> fields = new List <Field>()
            {
                f0_nullable, f1_nullable, f2_nullable
            };
            StructType struct_type = new StructType(fields);

            var structFields = struct_type.Fields;

            Assert.True(FieldComparer.Equals(structFields.ElementAt(0), f0_nullable));
            Assert.True(FieldComparer.Equals(structFields.ElementAt(1), f1_nullable));
            Assert.True(FieldComparer.Equals(structFields.ElementAt(2), f2_nullable));
        }
예제 #8
0
        public static void Compare(Schema expected, Schema actual)
        {
            if (ReferenceEquals(expected, actual))
            {
                return;
            }

            Assert.Equal(expected.HasMetadata, actual.HasMetadata);
            if (expected.HasMetadata)
            {
                Assert.Equal(expected.Metadata.Keys.Count(), actual.Metadata.Keys.Count());
                Assert.True(expected.Metadata.Keys.All(k => actual.Metadata.ContainsKey(k) && expected.Metadata[k] == actual.Metadata[k]));
                Assert.True(actual.Metadata.Keys.All(k => expected.Metadata.ContainsKey(k) && actual.Metadata[k] == expected.Metadata[k]));
            }

            Assert.Equal(expected.Fields.Count, actual.Fields.Count);
            Assert.True(expected.Fields.Keys.All(k => actual.Fields.ContainsKey(k)));
            foreach (string name in expected.Fields.Keys)
            {
                FieldComparer.Compare(expected.Fields[name], actual.Fields[name]);
            }
        }