test Tags serialization/deserialization
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sat, 04 Aug 2007 14:51:09 +0200
changeset 1145 7308b6cb153f
parent 1144 6442e000420b
child 1146 394db4614892
test Tags serialization/deserialization
src/common/tags.cc
--- a/src/common/tags.cc	Sat Aug 04 14:41:33 2007 +0200
+++ b/src/common/tags.cc	Sat Aug 04 14:51:09 2007 +0200
@@ -301,9 +301,9 @@
 public:
   static const char *GetUid (void) {return "myTagA.test.nsnam.org";}
   void Print (std::ostream &os) const {g_a = true;}
-  uint32_t GetSerializedSize (void) const {return 0;}
-  void Serialize (Buffer::Iterator i) const {}
-  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
+  uint32_t GetSerializedSize (void) const {return 1;}
+  void Serialize (Buffer::Iterator i) const {i.WriteU8 (a);}
+  uint32_t Deserialize (Buffer::Iterator i) {a = i.ReadU8 (); return 1;}
 
   uint8_t a;
 };
@@ -312,9 +312,9 @@
 public:
   static const char *GetUid (void) {return "myTagB.test.nsnam.org";}
   void Print (std::ostream &os) const {g_b = true;}
-  uint32_t GetSerializedSize (void) const {return 0;}
-  void Serialize (Buffer::Iterator i) const {}
-  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
+  uint32_t GetSerializedSize (void) const {return 4;}
+  void Serialize (Buffer::Iterator i) const {i.WriteU32 (b);}
+  uint32_t Deserialize (Buffer::Iterator i) {b = i.ReadU32 (); return 4;}
 
   uint32_t b;
 };
@@ -323,9 +323,9 @@
 public:
   static const char *GetUid (void) {return "myTagC.test.nsnam.org";}
   void Print (std::ostream &os) const {g_c = true;}
-  uint32_t GetSerializedSize (void) const {return 0;}
-  void Serialize (Buffer::Iterator i) const {}
-  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
+  uint32_t GetSerializedSize (void) const {return Tags::SIZE;}
+  void Serialize (Buffer::Iterator i) const {i.Write (c, Tags::SIZE);}
+  uint32_t Deserialize (Buffer::Iterator i) {i.Read (c, Tags::SIZE); return Tags::SIZE;}
   uint8_t c [Tags::SIZE];
 };
 class myInvalidTag 
@@ -521,6 +521,58 @@
     tmp.Remove (smartTag);
   }
 
+  {
+    Tags source;
+    myTagA aSource;
+    aSource.a = 0x66;
+    source.Add (aSource);
+    Buffer buffer;
+    uint32_t serialized = source.GetSerializedSize ();
+    buffer.AddAtStart (serialized);
+    source.Serialize (buffer.Begin (), serialized);
+    Tags dest;
+    dest.Deserialize (buffer.Begin ());
+    myTagA aDest;
+    aDest.a = 0x55;
+    dest.Peek (aDest);
+    if (aDest.a != 0x66)
+      {
+        ok = false;
+      }
+  }
+
+  {
+    Tags source;
+    myTagA aSource;
+    aSource.a = 0x66;
+    source.Add (aSource);
+    myTagZ zSource;
+    zSource.z = 0x77;
+    source.Add (zSource);
+
+    Buffer buffer;
+    uint32_t serialized = source.GetSerializedSize ();
+    buffer.AddAtStart (serialized);
+    source.Serialize (buffer.Begin (), serialized);
+    Tags dest;
+    dest.Deserialize (buffer.Begin ());
+
+    myTagA aDest;
+    aDest.a = 0x55;
+    dest.Peek (aDest);
+    if (aDest.a != 0x66)
+      {
+        ok = false;
+      }
+    myTagZ zDest;
+    zDest.z = 0x44;
+    dest.Peek (zDest);
+    if (zDest.z != 0x44)
+      {
+        ok = false;
+      }
+  }
+
   return ok;
 }