示例#1
0
        public void TestEquivalence()
        {
            var cell1 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell2 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell3 = new SampleCell1 {
                Foo = 1, Bar = "foo"
            };
            var cell4 = new SampleCell2 {
                Foo = 1, Bar = "bar"
            };
            var cell5 = new SampleCell3 {
                Foo = 1, Bar = "bar"
            };
            var cell6 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };
            var cell7 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };

            // Reference first
            Assert.True(cell1.Equivalent(cell1));
            Assert.True(cell2.Equivalent(cell2));
            Assert.True(cell3.Equivalent(cell3));
            Assert.True(cell4.Equivalent(cell4));

            // Fingerprint second

            Assert.True(cell1.Equivalent(cell4));
            Assert.False(cell4.Equivalent(cell1));

            Assert.True(cell6.Equivalent(cell7));
            Assert.True(cell7.Equivalent(cell6));
            cell7.Quux = true;
            Assert.True(cell6.Equivalent(cell7));
            Assert.False(cell7.Equivalent(cell6));

            // Contents third

            cell4.Bar = "foo";
            Assert.False(cell1.Equivalent(cell4));
            Assert.False(cell4.Equivalent(cell1));

            cell6.Quux = false;
            Assert.False(cell6.Equivalent(cell7));
            Assert.False(cell7.Equivalent(cell6));
            cell6.Quux = true;
            Assert.True(cell6.Equivalent(cell7));
            Assert.True(cell7.Equivalent(cell6));
        }
示例#2
0
        public void TestCreation()
        {
            Cell cell1 = new SampleCell1();
            Cell cell2 = new SampleCell2();
            Cell cell3 = new SampleCell3();
            Cell cell4 = new SampleCell4();

            // Static construction

            var tag = cell1.GetTypeTag();

            Assert.Null(tag.Base);
            Assert.Equal(cell1.GetType(), tag.RuntimeType);
            Assert.Equal(2, tag.NumProps);
            Assert.Equal(0, tag.Offset);

            tag = cell2.GetTypeTag();
            Assert.Equal(cell1.GetTypeTag(), tag.Base);
            Assert.Equal(cell2.GetType(), tag.RuntimeType);
            Assert.Equal(1, tag.NumProps);
            Assert.Equal(2, tag.Offset);

            tag = cell3.GetTypeTag();
            Assert.Equal(cell1.GetTypeTag(), tag.Base);
            Assert.Equal(cell3.GetType(), tag.RuntimeType);
            Assert.Equal(1, tag.NumProps);
            Assert.Equal(2, tag.Offset);

            tag = cell4.GetTypeTag();
            Assert.Equal(cell2.GetTypeTag(), tag.Base);
            Assert.Equal(cell4.GetType(), tag.RuntimeType);
            Assert.Equal(1, tag.NumProps);
            Assert.Equal(3, tag.Offset);

            // Fingerprint length
            Assert.Equal(2, cell1.GetFingerprint().Length);
            Assert.Equal(3, cell2.GetFingerprint().Length);
            Assert.Equal(3, cell3.GetFingerprint().Length);
            Assert.Equal(4, cell4.GetFingerprint().Length);
        }
示例#3
0
        public void TestHashing()
        {
            var cell1 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell2 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell3 = new SampleCell1 {
                Foo = 1, Bar = "foo"
            };
            var cell4 = new SampleCell2 {
                Foo = 1, Bar = "bar"
            };
            var cell5 = new SampleCell3 {
                Foo = 1, Bar = "bar"
            };
            var cell6 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };
            var cell7 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };

            Assert.Equal(cell1.GetHashCode(), cell2.GetHashCode());
            Assert.NotEqual(cell1.GetHashCode(), cell3.GetHashCode());

            Assert.Equal(cell1.GetHashCode(), cell4.GetHashCode());
            Assert.Equal(cell1.GetHashCode(), cell5.GetHashCode());
            Assert.Equal(cell1.GetHashCode(), cell6.GetHashCode());
            Assert.Equal(cell1.GetHashCode(), cell7.GetHashCode());

            Assert.Equal(cell6.GetHashCode(), cell7.GetHashCode());

            cell6.Quux = true;
            Assert.NotEqual(cell6.GetHashCode(), cell7.GetHashCode());
            cell7.Quux = true;
            Assert.Equal(cell6.GetHashCode(), cell7.GetHashCode());
        }
示例#4
0
        public void TestEquality()
        {
            var cell1 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell2 = new SampleCell1 {
                Foo = 1, Bar = "bar"
            };
            var cell3 = new SampleCell1 {
                Foo = 1, Bar = "foo"
            };
            var cell4 = new SampleCell2 {
                Foo = 1, Bar = "bar"
            };
            var cell5 = new SampleCell3 {
                Foo = 1, Bar = "bar"
            };
            var cell6 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };
            var cell7 = new SampleCell4 {
                Foo = 1, Bar = "bar"
            };

            Assert.True(cell1.Equals(cell2));
            Assert.True(cell2.Equals(cell1));
            Assert.False(cell1.Equals(cell3));
            Assert.False(cell3.Equals(cell1));

            Assert.False(cell1.Equals(cell4));
            Assert.False(cell1.Equals(cell5));
            Assert.False(cell1.Equals(cell6));
            Assert.False(cell1.Equals(cell7));

            Assert.True(cell6.Equals(cell7));
        }
示例#5
0
        public void TestPartialSerialization()
        {
            var eventFactory = new EventFactory();

            eventFactory.Register <SampleEvent5>();

            var buffer = new x2net.Buffer();

            var cell1 = new SampleCell1 {  // base
                Foo = 9,
                Bar = "hello"
            };
            var cell2 = new SampleCell2 {  // derived
                Foo = 9,
                Bar = "hello",
                Baz = true
            };

            var event1 = new SampleEvent5 {
                // base > base > base
                SampleCell = cell1
            };  // has base
            Serializer serializer = new Serializer(buffer);

            serializer.Write(event1.GetTypeId());
            event1.Serialize(serializer);

            long bufferLength = buffer.Length;

            buffer.Rewind();
            Deserializer deserializer = new Deserializer(buffer);
            int          typeId;

            deserializer.Read(out typeId);
            var retrieved = eventFactory.Create(typeId);

            retrieved.Deserialize(deserializer);

            var event11 = retrieved as SampleEvent5;

            Assert.NotNull(event11);

            Assert.Equal(event1.SampleCell.Foo, event11.SampleCell.Foo);
            Assert.Equal(event1.SampleCell.Bar, event11.SampleCell.Bar);

            buffer.Reset();

            // derived > base > base
            event1.SampleCell = cell2;  // base <= derived
            serializer        = new Serializer(buffer);
            serializer.Write(event1.GetTypeId());
            event1.Serialize(serializer);

            Assert.Equal(bufferLength, buffer.Length);

            {
                var event2 = new SampleEvent6 {
                    SampleCell = cell2 // derived <= derived
                };                     // has derived
                var buffer2 = new x2net.Buffer();
                serializer = new Serializer(buffer2);
                serializer.Write(event2.GetTypeId());
                event2.Serialize(serializer);
                Assert.True(buffer2.Length > buffer.Length);
            }

            buffer.Rewind();
            deserializer = new Deserializer(buffer);
            deserializer.Read(out typeId);
            retrieved = eventFactory.Create(typeId);
            retrieved.Deserialize(deserializer);

            var event12 = retrieved as SampleEvent5;

            Assert.NotNull(event12);

            Assert.True(event12.SampleCell is SampleCell1);

            Assert.Equal(event1.SampleCell.Foo, event12.SampleCell.Foo);
            Assert.Equal(event1.SampleCell.Bar, event12.SampleCell.Bar);
        }