[gxml] Additional complications about testing post-deserialization for HashMap



commit af28b78d88c8dffff8e1908eb33707fa9b1a45b7
Author: Daniel Espinosa <esodan gmail com>
Date:   Wed Feb 24 17:31:43 2016 -0600

    Additional complications about testing post-deserialization for HashMap

 NEWS                              |    2 +-
 gxml/SerializableObjectModel.vala |    2 +-
 test/gxml-performance.vala        |   67 +++++++++++++++++++++++--------------
 3 files changed, 44 insertions(+), 27 deletions(-)
---
diff --git a/NEWS b/NEWS
index 8daac3a..85e684c 100644
--- a/NEWS
+++ b/NEWS
@@ -7,7 +7,7 @@ Version 0.9.2
 * API change SerializableCollection: added new abstract methods for post-deserialization
 
 * SerializableCollection: Implementations now support enable/disable deserialization
-  for post operation using SerializableCollection.deserialize_children() for initial
+  for post-deseralization using SerializableCollection.deserialize_children() for initial
   document load time optimization
 
 * More memory optimizations: SerializableCollection implementations don't hold
diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index 6d0a16e..7e87b3b 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -313,7 +313,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
       element = (Element) node;
     else
       element = (Element) doc.root;
-    return_val_if_fail (element != null, null);
+    return_val_if_fail (element != null, false);
     if (node_name () == null) {
       GLib.warning (_("WARNING: Object type '%s' have no Node Name defined").printf (get_type ().name ()));
       return false;
diff --git a/test/gxml-performance.vala b/test/gxml-performance.vala
index 92e9ff6..d958e7c 100644
--- a/test/gxml-performance.vala
+++ b/test/gxml-performance.vala
@@ -143,22 +143,30 @@ public class Performance
     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 override string to_string () { return "HElement:"+name; }
     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 {
+  class HcpElement : SerializableObjectModel {
     public HElement.HashMap elements { get; set; default = new HElement.HashMap (); }
-    public override string node_name () { return "HCElement"; }
-    public override string to_string () { return "HCElement"; }
+    public override string node_name () { return "HcpElement"; }
+    public override string to_string () { return "HcpElement"; }
   }
-  class HtcElement : SerializableObjectModel {
-    public HCElement elements1 { get; set; default = new HCElement (); }
-    public HCElement elements2 { get; set; default = new HCElement (); }
-    public override string node_name () { return "HCElement"; }
-    public override string to_string () { return "HCElement"; }
+  class HcsElement : SerializableObjectModel {
+    public HElement.HashMap elements { get; set; default = new HElement.HashMap (); }
+    public override string node_name () { return "HcsElement"; }
+    public override string to_string () { return "HcsElement"; }
+  }
+  class HTopElement : SerializableObjectModel {
+    [Description (nick="HcpElement")]
+    public HcpElement elements1 { get; set; default = new HcpElement (); }
+    [Description (nick="HcsElement")]
+    public HcsElement elements2 { get; set; default = new HcsElement (); }
+    public override string node_name () { return "HTopElement"; }
+    public override string to_string () { return "HToplement"; }
+    public override bool property_use_nick () { return true; }
   }
   // TreeMap
   class HTElement : SerializableObjectModel, SerializableMapKey<string>
@@ -443,36 +451,45 @@ public class Performance
         Test.message ("Starting generating document...");
         Test.timer_start ();
         var d = new TwDocument ();
-        var ce = new HtcElement ();
+        var ce = new HTopElement ();
         for (int i = 0; i < 125000; i++) {
-          var e1 = new HCElement ();
-          e1.elements.name = "1E"+i.to_string ();
+          var e1 = new HElement ();
+          e1.name = "1E"+i.to_string ();
           ce.elements1.elements.set (e1.name, e1);
           var e2 = new HElement ();
           e2.name = "2E"+i.to_string ();
           ce.elements2.elements.set (e2.name, e2);
         }
+        assert (ce.elements1.elements.size == 125000);
+        assert (ce.elements2.elements.size == 125000);
         ce.serialize (d);
+        assert (d.root != null);
+        assert (d.root.children.size == 2);
+        assert (d.root.children[0].children.size == 125000);
+        assert (d.root.children[1].children.size == 125000);
         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;
+        var cep = new HTopElement ();
+        cep.elements1.elements.enable_deserialize = false;
+        cep.elements2.elements.enable_deserialize = false;
         cep.deserialize (d);
+        assert(cep.elements1.elements.size == 0);
+        assert(cep.elements2.elements.size == 0);
         time = Test.timer_elapsed ();
         Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
         Test.message ("Calling C1 deserialize_children()...");
         Test.timer_start ();
-        cep.elements1.deserialize_children ();
-        assert (!cep.elements1.deserialize_children ());
+        assert (cep.elements1.elements.deserialize_children ());
+        assert (cep.elements1.elements.size == 125000);
+        assert (!cep.elements1.elements.deserialize_children ());
         time = Test.timer_elapsed ();
         Test.minimized_result (time, "C1: Disable Deserialize Collection. Deserialized from NODE: %g 
seconds", time);
         Test.message ("Calling C2 deserialize_children()...");
         Test.timer_start ();
-        cep.elements2.deserialize_children ();
-        assert (!cep.elements2.deserialize_children ());
+        cep.elements2.elements.deserialize_children ();
+        assert (!cep.elements2.elements.deserialize_children ());
         time = Test.timer_elapsed ();
         Test.minimized_result (time, "C2: Disable Deserialize Collection. Deserialized from NODE: %g 
seconds", time);
       } catch (GLib.Error e) {
@@ -487,7 +504,7 @@ public class Performance
         Test.message ("Starting generating document...");
         Test.timer_start ();
         var d = new TwDocument ();
-        var ce = new HtcElement ();
+        var ce = new HTopElement ();
         for (int i = 0; i < 125000; i++) {
           var e1 = new HElement ();
           e1.name = "1E"+i.to_string ();
@@ -501,14 +518,14 @@ public class Performance
         Test.minimized_result (time, "Created document: %g seconds", time);
         Test.message ("Starting deserializing document: Enable collection deserialization...");
         Test.timer_start ();
-        var cep = new HCElement ();
-        cep.elements1.enable_deserialize = true;
-        cep.elements2.enable_deserialize = true;
+        var cep = new HTopElement ();
+        cep.elements1.elements.enable_deserialize = true;
+        cep.elements2.elements.enable_deserialize = true;
         cep.deserialize (d);
         time = Test.timer_elapsed ();
         Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds", 
time);
-        assert (!cep.elements1.deserialize_children ());
-        assert (!cep.elements2.deserialize_children ());
+        assert (!cep.elements1.elements.deserialize_children ());
+        assert (!cep.elements2.elements.deserialize_children ());
       } catch (GLib.Error e) {
         GLib.message ("ERROR: "+e.message);
         assert_not_reached ();


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