示例#1
0
        public void Create_Seal_SerializeDeserialize_Read()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            parcel.Seal(FakeNOPBank.Instance);



            var ser = new SlimSerializer(Parcel.STANDARD_KNOWN_SERIALIZER_TYPES);

            var ms = new MemoryStream();

            ser.Serialize(ms, parcel);
            ms.Position = 0;
            var parcel2 = ser.Deserialize(ms) as PeopleNamesParcel;

            Assert.IsNotNull(parcel2);
            var payload2 = parcel2.Payload;

            Assert.IsNotNull(payload2);


            Assert.AreEqual(payload2.Count, names.Count);
            Assert.IsTrue(payload2.SequenceEqual(names));
        }
示例#2
0
        public void Parcel_DeepClone_Benchmark_Parallel()
        {
            const int CNT = 100000;

            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };
            var p1 = new PeopleNamesParcel(new GDID(0, 123), names);

            p1.Seal(FakeNOPBank.Instance);

            var sw = System.Diagnostics.Stopwatch.StartNew();

            System.Threading.Tasks.Parallel.For(0, CNT,
                                                (i) =>
            {
                var p2 = p1.DeepClone() as PeopleNamesParcel;

                Assert.IsFalse(object.ReferenceEquals(p1, p2));
                Assert.IsFalse(object.ReferenceEquals(p1.Payload, p2.Payload));

                Assert.IsTrue(p1.Payload.Count == p2.Payload.Count);
                Assert.AreEqual(p1.GDID, p2.GDID);
            });
            sw.Stop();
            Console.WriteLine("NOTE: Core i7 x 6 cores 3.2Ghz 47000+ ops/sec on subsequent runs w/o optimization in non-server GC mode");
            Console.WriteLine("Cloned {0} times in {1} ms at {2} ops/sec", CNT, sw.ElapsedMilliseconds, CNT / (sw.ElapsedMilliseconds / 1000d));
        }
示例#3
0
        public void ForgetPayloadCopy()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.IsTrue(parcel.PayloadUnwrapped);
            Assert.IsFalse(parcel.HasWrappedPayload);

            parcel.Seal(FakeNOPBank.Instance);//SEAL!!!!!!!!!!!!!!!!

            Assert.IsTrue(parcel.PayloadUnwrapped);
            Assert.IsFalse(parcel.HasWrappedPayload);

            parcel.ForgetPayloadCopy();//FORGET!!!!!!!!!!!!!!!!!!!!

            Assert.IsFalse(parcel.PayloadUnwrapped);
            Assert.IsTrue(parcel.HasWrappedPayload);

            //even after forget payload, i can get my payload back
            var payload = parcel.Payload;

            Assert.IsTrue(parcel.PayloadUnwrapped);
            Assert.IsTrue(parcel.HasWrappedPayload);

            Assert.AreEqual(4, payload.Count);
            Assert.AreEqual("Kozloff", payload[0]);
            Assert.AreEqual("Sergeev", payload[1]);
            Assert.AreEqual("Aroyan", payload[2]);
            Assert.AreEqual("Gurevich", payload[3]);
        }
示例#4
0
        public void Parcel_DeepClone_Benchmark()
        {
            const int CNT = 25000;

            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };
            var p1 = new PeopleNamesParcel(new GDID(0, 123), names);

            p1.Seal(FakeNOPBank.Instance);

            var sw = System.Diagnostics.Stopwatch.StartNew();

            for (var i = 0; i < CNT; i++)
            {
                var p2 = p1.DeepClone() as PeopleNamesParcel;

                Assert.IsFalse(object.ReferenceEquals(p1, p2));
                Assert.IsFalse(object.ReferenceEquals(p1.Payload, p2.Payload));

                Assert.IsTrue(p1.Payload.Count == p2.Payload.Count);
                Assert.AreEqual(p1.GDID, p2.GDID);
            }
            sw.Stop();
            Console.WriteLine("NOTE: Core i7 3.2Ghz 14000 ops/sec on subsequent runs w/o optimization");
            Console.WriteLine("Cloned {0} times in {1} ms at {2} ops/sec", CNT, sw.ElapsedMilliseconds, CNT / (sw.ElapsedMilliseconds / 1000d));
        }
示例#5
0
        public void Create_Seal_ValidationError()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "NoAroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            parcel.Seal(FakeNOPBank.Instance);
        }
示例#6
0
        public void StateError_5()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "NoAroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.AreEqual(true, parcel.PayloadUnwrapped);
            parcel.ForgetPayloadCopy();
        }
示例#7
0
        public void StateError_2()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.AreEqual(true, parcel.PayloadUnwrapped);
            parcel.Seal(FakeNOPBank.Instance);
            parcel.Validate(FakeNOPBank.Instance);
        }
示例#8
0
        public void Parcel_DeepClone_2_Equals_ToString()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };
            var p1 = new PeopleNamesParcel(new GDID(0, 123), names);

            p1.Seal(FakeNOPBank.Instance);
            var p2 = p1.DeepClone() as PeopleNamesParcel;

            Assert.IsFalse(object.ReferenceEquals(p1, p2));
            Assert.IsTrue(p1.Equals(p2));

            Console.WriteLine(p1.ToString());
        }
示例#9
0
        public void Parcel_DeepClone_1()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };
            var p1 = new PeopleNamesParcel(new GDID(0, 123), names);

            p1.Seal(FakeNOPBank.Instance);
            var p2 = p1.DeepClone() as PeopleNamesParcel;

            Assert.IsFalse(object.ReferenceEquals(p1, p2));
            Assert.IsFalse(object.ReferenceEquals(p1.Payload, p2.Payload));

            Assert.IsTrue(p1.Payload.SequenceEqual(p2.Payload));
            Assert.AreEqual(p1.GDID, p2.GDID);
        }
示例#10
0
        public void StateError_4()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            //not sealed
            var ser = new SlimSerializer(Parcel.STANDARD_KNOWN_SERIALIZER_TYPES);

            var ms = new MemoryStream();

            ser.Serialize(ms, parcel);//can not serialize open parcel
        }
示例#11
0
        public void Create_Seal_Wrap()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.AreEqual(true, parcel.PayloadUnwrapped);
            parcel.Seal(FakeNOPBank.Instance);

            var buf = parcel.WrappedPayload;

            Assert.IsNotNull(buf);
        }
示例#12
0
        public void FullLifecycle()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.AreEqual(true, parcel.PayloadUnwrapped);
            parcel.Seal(FakeNOPBank.Instance);

            var ser = new SlimSerializer(Parcel.STANDARD_KNOWN_SERIALIZER_TYPES);

            var ms = new MemoryStream();

            ser.Serialize(ms, parcel);
            ms.Position = 0;
            var parcel2 = ser.Deserialize(ms) as PeopleNamesParcel;

            Assert.IsNotNull(parcel2);

            Assert.IsTrue(parcel2.HasWrappedPayload);
            parcel2.Open();
            Assert.IsFalse(parcel2.HasWrappedPayload);

            parcel2.Payload[1] = "Boyarskiy";
            parcel2.Seal(FakeNOPBank.Instance);

            ms.Position = 0;
            ser.Serialize(ms, parcel2);
            ms.Position = 0;
            var parcel3 = ser.Deserialize(ms) as PeopleNamesParcel;

            Assert.IsTrue(new List <string> {
                "Kozloff", "Boyarskiy", "Aroyan", "Gurevich"
            }.SequenceEqual(parcel3.Payload));
        }
示例#13
0
        public void Create_Seal_Wrap_UnwrapPayloadIntoOtherPayload()
        {
            var names = new List <string> {
                "Kozloff", "Sergeev", "Aroyan", "Gurevich"
            };

            var parcel = new PeopleNamesParcel(new GDID(0, 123), names);

            Assert.AreEqual(ParcelState.Creating, parcel.State);
            Assert.AreEqual(true, parcel.PayloadUnwrapped);
            parcel.Seal(FakeNOPBank.Instance);

            var buf = parcel.WrappedPayload;

            Assert.IsNotNull(buf);

            var ser = new SlimSerializer(Parcel.STANDARD_KNOWN_SERIALIZER_TYPES);

            var names2 = ser.Deserialize(new MemoryStream(buf)) as List <string>;

            Assert.IsNotNull(names2);
            Assert.AreEqual(names.Count, names2.Count);
            Assert.IsTrue(names2.SequenceEqual(names));
        }
示例#14
0
 public void StateError_3()
 {
     var parcel = new PeopleNamesParcel(new GDID(0, 123), null);
 }