示例#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 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);
        }
示例#3
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);
            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.AreEqual(ParcelState.Sealed, parcel2.State);
            parcel2.Open();
            Assert.AreEqual(ParcelState.Modifying, parcel2.State);

            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) );
        }
示例#4
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
        }
示例#5
0
 public void StateError_3()
 {
     var parcel = new PeopleNamesParcel(new GDID(0, 123), null);
 }
示例#6
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));
        }
示例#7
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));
        }
示例#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 );
        }