[gxml] Fixes and tests for SerializableHashMap post-deserialization



commit 1f241fb89ec53408932b01494bcfc38229bd248c
Author: Daniel Espinosa <esodan gmail com>
Date:   Wed Feb 24 13:35:02 2016 -0600

    Fixes and tests for SerializableHashMap post-deserialization
    
    * Moved SerializableArrayList performance tests to performance
      need --enable-performance-tests to check them
    
    * Added performance tests for SerializableHashMap

 gxml/SerializableGeeArrayList.vala     |    1 +
 gxml/SerializableGeeHashMap.vala       |    6 ++-
 test/SerializableGeeArrayListTest.vala |   60 -------------------------
 test/SerializableGeeHashMapTest.vala   |   62 +++++++++++++++++++++++++
 test/gxml-performance.vala             |   77 ++++++++++++++++++++++++++++++++
 5 files changed, 145 insertions(+), 61 deletions(-)
---
diff --git a/gxml/SerializableGeeArrayList.vala b/gxml/SerializableGeeArrayList.vala
index 79bf514..6dfdd5f 100644
--- a/gxml/SerializableGeeArrayList.vala
+++ b/gxml/SerializableGeeArrayList.vala
@@ -147,6 +147,7 @@ public class GXml.SerializableArrayList<G> : Gee.ArrayList<G>, Serializable, Ser
                     throws GLib.Error
   {
     _node = node;
+    _deserialized = false;
     if (deserialize_proceed ())
       return deserialize_children ();
     return false;
diff --git a/gxml/SerializableGeeHashMap.vala b/gxml/SerializableGeeHashMap.vala
index 3161619..b239614 100644
--- a/gxml/SerializableGeeHashMap.vala
+++ b/gxml/SerializableGeeHashMap.vala
@@ -29,10 +29,11 @@ using GXml;
 public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, SerializableCollection
 {
   GXml.Node _node;
+  bool _deserialized;
 
   // SerializableCollection interface
   public virtual bool deserialize_proceed () { return true; }
-  public virtual bool deserialized () { return true; }
+  public virtual bool deserialized () { return _deserialized; }
   public virtual bool is_prepared () { return (_node is GXml.Node); }
   public virtual bool deserialize_node (GXml.Node node) throws GLib.Error {
     if (!(value_type.is_a (typeof (GXml.Serializable)) &&
@@ -50,6 +51,7 @@ public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, Ser
     return true;
   }
   public virtual bool deserialize_children ()  throws GLib.Error {
+    if (_deserialized) return false;
     if (!(value_type.is_a (typeof (GXml.Serializable)) &&
         value_type.is_a (typeof (SerializableMapKey)))) {
       throw new SerializableError.UNSUPPORTED_TYPE_ERROR (_("%s: Value type '%s' is unsupported"), 
@@ -60,6 +62,7 @@ public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, Ser
         deserialize_node (n);
       }
     }
+    _deserialized = true;
     return true;
   }
 
@@ -142,6 +145,7 @@ public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, Ser
                     throws GLib.Error
   {
     _node = node;
+    _deserialized = false;
     if (deserialize_proceed ())
       return deserialize_children ();
     return false;
diff --git a/test/SerializableGeeArrayListTest.vala b/test/SerializableGeeArrayListTest.vala
index f2d582d..ba38712 100644
--- a/test/SerializableGeeArrayListTest.vala
+++ b/test/SerializableGeeArrayListTest.vala
@@ -213,65 +213,5 @@ class SerializableGeeArrayListTest : GXmlTest
         assert_not_reached ();
       }
     });
-    Test.add_func ("/gxml/serializable/serializable_array_list/post-deserialization/disable",
-    () => {
-      try {
-        double time;
-        Test.message ("Starting generating document...");
-        Test.timer_start ();
-        var d = new TwDocument ();
-        var ce = new CElement ();
-        for (int i = 0; i < 500000; i++) {
-          var e = new AElement ();
-          ce.elements.add (e);
-        }
-        ce.serialize (d);
-        time = Test.timer_elapsed ();
-        Test.minimized_result (time, "Created document: %g seconds", time);
-        Test.message ("Starting deserializing document: Disable collection deserialization...");
-        Test.timer_start ();
-        var cep = new CElement ();
-        cep.elements.enable_deserialize = false;
-        cep.deserialize (d);
-        time = Test.timer_elapsed ();
-        Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
-        assert (cep.elements.is_prepared ());
-        Test.message ("Calling deserialize_children()...");
-        Test.timer_start ();
-        cep.elements.deserialize_children ();
-        time = Test.timer_elapsed ();
-        Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from NODE: %g seconds", 
time);
-      } catch (GLib.Error e) {
-        GLib.message ("ERROR: "+e.message);
-        assert_not_reached ();
-      }
-    });
-    Test.add_func ("/gxml/serializable/serializable_array_list/post-deserialization/enable",
-    () => {
-      try {
-        double time;
-        Test.message ("Starting generating document...");
-        Test.timer_start ();
-        var d = new TwDocument ();
-        var ce = new CElement ();
-        for (int i = 0; i < 500000; i++) {
-          var e = new AElement ();
-          ce.elements.add (e);
-        }
-        ce.serialize (d);
-        time = Test.timer_elapsed ();
-        Test.minimized_result (time, "Created document: %g seconds", time);
-        Test.message ("Starting deserializing document: Enable collection deserialization...");
-        Test.timer_start ();
-        var cet = new CElement ();
-        cet.elements.enable_deserialize = true;
-        cet.deserialize (d);
-        time = Test.timer_elapsed ();
-        Test.minimized_result (time, "Enable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
-      } catch (GLib.Error e) {
-        GLib.message ("ERROR: "+e.message);
-        assert_not_reached ();
-      }
-    });
   }
 }
diff --git a/test/SerializableGeeHashMapTest.vala b/test/SerializableGeeHashMapTest.vala
index 3ccff5d..6d966fa 100644
--- a/test/SerializableGeeHashMapTest.vala
+++ b/test/SerializableGeeHashMapTest.vala
@@ -28,6 +28,24 @@ using Gee;
 
 class SerializableGeeHashMapTest : GXmlTest
 {
+  class HElement : SerializableObjectModel, SerializableMapKey<string>
+  {
+    public string name { get; set; }
+    public string get_map_key () { return name; }
+    public override string node_name () { return "HElement"; }
+    public override string to_string () { return "HElement"; }
+    public class HashMap : SerializableHashMap<string,HElement> {
+      public bool enable_deserialize { get; set; default = false; }
+      public override bool deserialize_proceed () { return enable_deserialize; }
+    }
+  }
+  class HCElement : SerializableObjectModel {
+    public HElement.HashMap elements1 { get; set; default = new HElement.HashMap (); }
+    public HElement.HashMap elements2 { get; set; default = new HElement.HashMap (); }
+    public override string node_name () { return "HCElement"; }
+    public override string to_string () { return "HCElement"; }
+  }
+  
   class Space : SerializableObjectModel, SerializableMapKey<string>
   {
     public string get_map_key () { return name; }
@@ -324,5 +342,49 @@ class SerializableGeeHashMapTest : GXmlTest
         assert_not_reached ();
       }
     });
+    Test.add_func ("/gxml/performance/hashmap/post-deserialization/disable",
+    () => {
+      try {
+        double time;
+        Test.message ("Starting generating document...");
+        Test.timer_start ();
+        var d = new TwDocument ();
+        var ce = new HCElement ();
+        for (int i = 0; i < 250000; i++) {
+          var e1 = new HElement ();
+          e1.name = "1E"+i.to_string ();
+          ce.elements1.set (e1.name, e1);
+          var e2 = new HElement ();
+          e2.name = "2E"+i.to_string ();
+          ce.elements2.set (e2.name, e2);
+        }
+        ce.serialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Created document: %g seconds", time);
+        Test.message ("Starting deserializing document: Disable collection deserialization...");
+        Test.timer_start ();
+        var cep = new HCElement ();
+        cep.elements1.enable_deserialize = false;
+        cep.elements2.enable_deserialize = false;
+        cep.deserialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
+        assert (cep.elements1.is_prepared ());
+        assert (cep.elements2.is_prepared ());
+        Test.message ("Calling C1 deserialize_children()...");
+        Test.timer_start ();
+        cep.elements1.deserialize_children ();
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "C1: Disable Deserialize Collection. Deserialized from NODE: %g 
seconds", time);
+        Test.message ("Calling C1 deserialize_children()...");
+        Test.timer_start ();
+        cep.elements2.deserialize_children ();
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "C2: Disable Deserialize Collection. Deserialized from NODE: %g 
seconds", time);
+      } catch (GLib.Error e) {
+        GLib.message ("ERROR: "+e.message);
+        assert_not_reached ();
+      }
+    });
   }
 }
diff --git a/test/gxml-performance.vala b/test/gxml-performance.vala
index 9757974..12bd40c 100644
--- a/test/gxml-performance.vala
+++ b/test/gxml-performance.vala
@@ -119,6 +119,23 @@ class BookStore : SerializableContainer
 
 public class Performance
 {
+  // ArrayList
+  class AElement : SerializableObjectModel
+  {
+    public string name { get; set; }
+    public AElement.named (string name) { this.name = name; }
+    public override string to_string () { return name; }
+    public class Array : SerializableArrayList<AElement> {
+      public bool enable_deserialize { get; set; default = false; }
+      public override bool deserialize_proceed () { return enable_deserialize; }
+    }
+  }
+
+  class CElement : SerializableObjectModel {
+    public AElement.Array elements { get; set; default = new AElement.Array (); }
+    public override string node_name () { return "CElement"; }
+    public override string to_string () { return "CElement"; }
+  }
   /**
    * Iterate recursively through all node and children nodes in document.
    */
@@ -297,6 +314,66 @@ public class Performance
         assert_not_reached ();
       }
     });
+    Test.add_func ("/gxml/performance/arraylist/post-deserialization/disable",
+    () => {
+      try {
+        double time;
+        Test.message ("Starting generating document...");
+        Test.timer_start ();
+        var d = new TwDocument ();
+        var ce = new CElement ();
+        for (int i = 0; i < 500000; i++) {
+          var e = new AElement ();
+          ce.elements.add (e);
+        }
+        ce.serialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Created document: %g seconds", time);
+        Test.message ("Starting deserializing document: Disable collection deserialization...");
+        Test.timer_start ();
+        var cep = new CElement ();
+        cep.elements.enable_deserialize = false;
+        cep.deserialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
+        assert (cep.elements.is_prepared ());
+        Test.message ("Calling deserialize_children()...");
+        Test.timer_start ();
+        cep.elements.deserialize_children ();
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from NODE: %g seconds", 
time);
+      } catch (GLib.Error e) {
+        GLib.message ("ERROR: "+e.message);
+        assert_not_reached ();
+      }
+    });
+    Test.add_func ("/gxml/performance/arraylist/post-deserialization/enable",
+    () => {
+      try {
+        double time;
+        Test.message ("Starting generating document...");
+        Test.timer_start ();
+        var d = new TwDocument ();
+        var ce = new CElement ();
+        for (int i = 0; i < 500000; i++) {
+          var e = new AElement ();
+          ce.elements.add (e);
+        }
+        ce.serialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Created document: %g seconds", time);
+        Test.message ("Starting deserializing document: Enable collection deserialization...");
+        Test.timer_start ();
+        var cet = new CElement ();
+        cet.elements.enable_deserialize = true;
+        cet.deserialize (d);
+        time = Test.timer_elapsed ();
+        Test.minimized_result (time, "Enable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
+      } catch (GLib.Error e) {
+        GLib.message ("ERROR: "+e.message);
+        assert_not_reached ();
+      }
+    });
 #endif
   }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]