static void Generate(ref AddressBook ab, ref NetAddressBook nab) { ab.List = new List<Person>(); nab.List = new List<NetPerson>(); //Generating structures for (int n = 0; n < 5000; n++) { Person p = new Person(); p.Name = "Alice" + n; p.Id = 17532; p.Email = "Alice" + n + "@silentobit.com"; p.Phone = new List<Person.PhoneNumber>(); ab.List.Add(p); NetPerson np = new NetPerson(); np.Name = p.Name; np.Id = p.Id; np.Email = p.Email; np.Phone = new List<NetPerson.NetPhoneNumber>(); nab.List.Add(np); for (int m = 0; m < 1000; m++) { Person.PhoneNumber pn = new Person.PhoneNumber(); pn.Type = Person.PhoneType.MOBILE; pn.Number = m.ToString(); p.Phone.Add(pn); NetPerson.NetPhoneNumber npn = new NetPerson.NetPhoneNumber(); npn.Type = Person.PhoneType.MOBILE; npn.Number = pn.Number; np.Phone.Add(npn); } } }
static void Generate(ref AddressBook ab, ref NetAddressBook nab) { ab.List = new List <Person>(); nab.List = new List <NetPerson>(); //Generating structures for (int n = 0; n < 5000; n++) { Person p = new Person(); p.Name = "Alice" + n; p.Id = 17532; p.Email = "Alice" + n + "@silentobit.com"; p.Phone = new List <Person.PhoneNumber>(); ab.List.Add(p); NetPerson np = new NetPerson(); np.Name = p.Name; np.Id = p.Id; np.Email = p.Email; np.Phone = new List <NetPerson.NetPhoneNumber>(); nab.List.Add(np); for (int m = 0; m < 1000; m++) { Person.PhoneNumber pn = new Person.PhoneNumber(); pn.Type = Person.PhoneType.MOBILE; pn.Number = m.ToString(); p.Phone.Add(pn); NetPerson.NetPhoneNumber npn = new NetPerson.NetPhoneNumber(); npn.Type = Person.PhoneType.MOBILE; npn.Number = pn.Number; np.Phone.Add(npn); } } }
/// <summary> /// Test wire format of the person example against protobuf-net - another c# protocol buffers library /// </summary> public static void Run() { Person p1 = new Person(); p1.Name = "Alice"; p1.Id = -240; p1.Email = "*****@*****.**"; p1.Phone = new List <Person.PhoneNumber>(); p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.MOBILE, Number = "+46 11111111111" }); p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.HOME, Number = "+46 777777777" }); //Serialize using this(Protobuf code generator) MemoryStream ms1 = new MemoryStream(); Person.Serialize(ms1, p1); //Deserialize using ProtoBuf.Net MemoryStream ms2 = new MemoryStream(ms1.ToArray()); NetPerson p2 = ProtoBuf.Serializer.Deserialize <NetPerson>(ms2); //Test Test("12 Name", p1.Name == p2.Name); Test("12 Id", p1.Id == p2.Id); Test("12 Email", p1.Email == p2.Email); Test("12 Phone", p1.Phone.Count == p2.Phone.Count); Test("12 Phone[0]", p1.Phone [0].Number == p2.Phone [0].Number); Test("12 Phone[0]", (int)p1.Phone [0].Type == (int)p2.Phone [0].Type); Test("12 Phone[1]", p1.Phone [1].Number == p2.Phone [1].Number); //Disabled test since missing data should return the default value(HOME). //Test ("12 Phone[1]", (int)p1.Phone [1].Type == (int)p2.Phone [1].Type); //Correct invalid data for the next test p2.Phone [1].Type = Person.PhoneType.HOME; MemoryStream ms3 = new MemoryStream(); ProtoBuf.Serializer.Serialize(ms3, p2); //Test wire data byte[] b1 = ms1.ToArray(); byte[] b3 = ms3.ToArray(); Test("WireLength", b1.Length == b3.Length); if (b1.Length == b3.Length) { for (int n = 0; n < b1.Length; n++) { if (b1 [n] != b3 [n]) { Test("Wire" + n, b1 [n] == b3 [n]); } } } else { Console.WriteLine(BitConverter.ToString(b1)); Console.WriteLine(); Console.WriteLine(BitConverter.ToString(b3)); } MemoryStream ms4 = new MemoryStream(ms3.ToArray()); Person p4 = Person.Deserialize(ms4); //Test Test("14 Name", p1.Name == p4.Name); Test("14 Id", p1.Id == p4.Id); Test("14 Email", p1.Email == p4.Email); Test("14 Phone", p1.Phone.Count == p4.Phone.Count); Test("14 Phone[0]", p1.Phone [0].Number == p4.Phone [0].Number); Test("14 Phone[0]", p1.Phone [0].Type == p4.Phone [0].Type); Test("14 Phone[1]", p1.Phone [1].Number == p4.Phone [1].Number); Test("14 Phone[1]", p1.Phone [1].Type == p4.Phone [1].Type); }
public void Run() { Person p1 = new Person(); p1.Name = "Alice"; p1.Id = -240; p1.Email = "*****@*****.**"; p1.Phone = new List <Person.PhoneNumber>(); // Pretty sure protobuf-net serializes default optional fields wrong (https://code.google.com/p/protobuf-net/issues/detail?id=136) // Don't set PhoneType.HOME, otherwise tests will fail. bool nullable = HasNullable <Person.PhoneNumber>("Type"); p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.MOBILE, Number = "+46 11111111111" }); if (nullable) { p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.WORK, Number = "+46 777777777" }); } else { p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.HOME, Number = "+46 777777777" }); } //Serialize using this(Protobuf code generator) MemoryStream ms1 = new MemoryStream(); Person.Serialize(ms1, p1); //Deserialize using ProtoBuf.Net MemoryStream ms2 = new MemoryStream(ms1.ToArray()); NetPerson p2 = ProtoBuf.Serializer.Deserialize <NetPerson>(ms2); //Test Assert.AreEqual(p1.Name, p2.Name); Assert.AreEqual(p1.Id, p2.Id); Assert.AreEqual(p1.Email, p2.Email); Assert.AreEqual(p1.Phone.Count, p2.Phone.Count); Assert.AreEqual(p1.Phone[0].Number, p2.Phone[0].Number); Assert.AreEqual((int)p1.Phone[0].Type, (int)p2.Phone[0].Type); Assert.AreEqual(p1.Phone[1].Number, p2.Phone[1].Number); //Disabled test since missing data should return the default value(HOME). //Test ("12 Phone[1]", (int)p1.Phone [1].Type, (int)p2.Phone [1].Type); //Correct invalid data for the next test if (nullable == false) { p2.Phone[1].Type = Person.PhoneType.HOME; } MemoryStream ms3 = new MemoryStream(); ProtoBuf.Serializer.Serialize(ms3, p2); //Test wire data byte[] b1 = ms1.ToArray(); byte[] b3 = ms3.ToArray(); Assert.AreEqual(b1.Length, b3.Length, "WireLength"); for (int n = 0; n < b1.Length; n++) { Assert.AreEqual(b1[n], b3[n]); } MemoryStream ms4 = new MemoryStream(ms3.ToArray()); Person p4 = Person.Deserialize(ms4); //Test Assert.AreEqual(p1.Name, p4.Name); Assert.AreEqual(p1.Id, p4.Id); Assert.AreEqual(p1.Email, p4.Email); Assert.AreEqual(p1.Phone.Count, p4.Phone.Count); Assert.AreEqual(p1.Phone[0].Number, p4.Phone[0].Number); Assert.AreEqual(p1.Phone[0].Type, p4.Phone[0].Type); Assert.AreEqual(p1.Phone[1].Number, p4.Phone[1].Number); Assert.AreEqual(p1.Phone[1].Type, p4.Phone[1].Type); }
public static void Run() { Console.WriteLine("Starting speed test..."); AddressBook ab = new AddressBook(); NetAddressBook nab = new NetAddressBook(); ab.List = new List <Person>(); nab.List = new List <NetPerson>(); //Generating structures for (int n = 0; n < 5000; n++) { Person p = new Person(); p.Name = "Alice" + n; p.Id = 17532; p.Email = "*****@*****.**"; p.Phone = new List <Person.PhoneNumber>(); ab.List.Add(p); NetPerson np = new NetPerson(); np.Name = p.Name; np.Id = p.Id; np.Email = p.Email; np.Phone = new List <NetPerson.NetPhoneNumber>(); nab.List.Add(np); for (int m = 0; m < 1000; m++) { Person.PhoneNumber pn = new Person.PhoneNumber(); pn.Type = Person.PhoneType.MOBILE; pn.Number = m.ToString(); p.Phone.Add(pn); NetPerson.NetPhoneNumber npn = new NetPerson.NetPhoneNumber(); npn.Type = Person.PhoneType.MOBILE; npn.Number = pn.Number; np.Phone.Add(npn); } } using (MemoryStream ms = new MemoryStream()) { //Serialize DateTime start = DateTime.Now; AddressBook.Serialize(ms, ab); TimeSpan serialize = DateTime.Now - start; Console.WriteLine("Speed test: Serialize " + ab.List.Count + " posts in " + serialize.TotalSeconds + " s"); //Deserialize ms.Seek(0, SeekOrigin.Begin); start = DateTime.Now; var dab = AddressBook.Deserialize(new StreamRead(ms)); TimeSpan deserialize = DateTime.Now - start; Console.WriteLine("Speed test: Deserialize " + dab.List.Count + " posts in " + deserialize.TotalSeconds + " s"); } using (MemoryStream ms = new MemoryStream()) { //Serialize DateTime start = DateTime.Now; ProtoBuf.Serializer.Serialize(ms, nab); TimeSpan serialize = DateTime.Now - start; Console.WriteLine("Protobuf-net: Serialize " + nab.List.Count + " posts in " + serialize.TotalSeconds + " s"); //Deserialize ms.Seek(0, SeekOrigin.Begin); start = DateTime.Now; var dab = ProtoBuf.Serializer.Deserialize <NetAddressBook>(ms); TimeSpan deserialize = DateTime.Now - start; Console.WriteLine("Protobuf-net: Deserialize " + dab.List.Count + " posts in " + deserialize.TotalSeconds + " s"); } }
public static void Run() { Console.WriteLine("Starting speed test..."); AddressBook ab = new AddressBook(); NetAddressBook nab = new NetAddressBook(); ab.List = new List<Person>(); nab.List = new List<NetPerson>(); //Generating structures for (int n = 0; n < 5000; n++) { Person p = new Person(); p.Name = "Alice" + n; p.Id = 17532; p.Email = "*****@*****.**"; p.Phone = new List<Person.PhoneNumber>(); ab.List.Add(p); NetPerson np = new NetPerson(); np.Name = p.Name; np.Id = p.Id; np.Email = p.Email; np.Phone = new List<NetPerson.NetPhoneNumber>(); nab.List.Add(np); for (int m = 0; m < 1000; m++) { Person.PhoneNumber pn = new Person.PhoneNumber(); pn.Type = Person.PhoneType.MOBILE; pn.Number = m.ToString(); p.Phone.Add(pn); NetPerson.NetPhoneNumber npn = new NetPerson.NetPhoneNumber(); npn.Type = Person.PhoneType.MOBILE; npn.Number = pn.Number; np.Phone.Add(npn); } } using (MemoryStream ms = new MemoryStream()) { //Serialize DateTime start = DateTime.Now; AddressBook.Serialize(ms, ab); TimeSpan serialize = DateTime.Now - start; Console.WriteLine("Speed test: Serialize " + ab.List.Count + " posts in " + serialize.TotalSeconds + " s"); //Deserialize ms.Seek(0, SeekOrigin.Begin); start = DateTime.Now; var dab = AddressBook.Deserialize(new StreamRead(ms)); TimeSpan deserialize = DateTime.Now - start; Console.WriteLine("Speed test: Deserialize " + dab.List.Count + " posts in " + deserialize.TotalSeconds + " s"); } using (MemoryStream ms = new MemoryStream()) { //Serialize DateTime start = DateTime.Now; ProtoBuf.Serializer.Serialize(ms, nab); TimeSpan serialize = DateTime.Now - start; Console.WriteLine("Protobuf-net: Serialize " + nab.List.Count + " posts in " + serialize.TotalSeconds + " s"); //Deserialize ms.Seek(0, SeekOrigin.Begin); start = DateTime.Now; var dab = ProtoBuf.Serializer.Deserialize<NetAddressBook>(ms); TimeSpan deserialize = DateTime.Now - start; Console.WriteLine("Protobuf-net: Deserialize " + dab.List.Count + " posts in " + deserialize.TotalSeconds + " s"); } }
public void Run() { Person p1 = new Person(); p1.Name = "Alice"; p1.Id = -240; p1.Email = "*****@*****.**"; p1.Phone = new List <Person.PhoneNumber>(); p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.MOBILE, Number = "+46 11111111111" }); p1.Phone.Add(new Person.PhoneNumber() { Type = Person.PhoneType.HOME, Number = "+46 777777777" }); //Serialize using this(Protobuf code generator) MemoryStream ms1 = new MemoryStream(); Person.Serialize(ms1, p1); //Deserialize using ProtoBuf.Net MemoryStream ms2 = new MemoryStream(ms1.ToArray()); NetPerson p2 = ProtoBuf.Serializer.Deserialize <NetPerson>(ms2); //Test Assert.AreEqual(p1.Name, p2.Name); Assert.AreEqual(p1.Id, p2.Id); Assert.AreEqual(p1.Email, p2.Email); Assert.AreEqual(p1.Phone.Count, p2.Phone.Count); Assert.AreEqual(p1.Phone[0].Number, p2.Phone[0].Number); Assert.AreEqual((int)p1.Phone[0].Type, (int)p2.Phone[0].Type); Assert.AreEqual(p1.Phone[1].Number, p2.Phone[1].Number); //Disabled test since missing data should return the default value(HOME). //Test ("12 Phone[1]", (int)p1.Phone [1].Type, (int)p2.Phone [1].Type); //Correct invalid data for the next test p2.Phone[1].Type = Person.PhoneType.HOME; MemoryStream ms3 = new MemoryStream(); ProtoBuf.Serializer.Serialize(ms3, p2); //Test wire data byte[] b1 = ms1.ToArray(); byte[] b3 = ms3.ToArray(); Assert.AreEqual(b1.Length, b3.Length, "WireLength"); for (int n = 0; n < b1.Length; n++) { Assert.AreEqual(b1[n], b3[n]); } MemoryStream ms4 = new MemoryStream(ms3.ToArray()); Person p4 = Person.Deserialize(ms4); //Test Assert.AreEqual(p1.Name, p4.Name); Assert.AreEqual(p1.Id, p4.Id); Assert.AreEqual(p1.Email, p4.Email); Assert.AreEqual(p1.Phone.Count, p4.Phone.Count); Assert.AreEqual(p1.Phone[0].Number, p4.Phone[0].Number); Assert.AreEqual(p1.Phone[0].Type, p4.Phone[0].Type); Assert.AreEqual(p1.Phone[1].Number, p4.Phone[1].Number); Assert.AreEqual(p1.Phone[1].Type, p4.Phone[1].Type); }