[gxml] Fixes and tests for SerializableHashMap post-deserialization
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Fixes and tests for SerializableHashMap post-deserialization
- Date: Wed, 24 Feb 2016 19:48:47 +0000 (UTC)
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]