summaryrefslogtreecommitdiff
path: root/tests/glibmm_variant
diff options
context:
space:
mode:
authorKjell Ahlstedt <kjell.ahlstedt@bredband.net>2017-03-06 15:13:46 +0100
committerKjell Ahlstedt <kjell.ahlstedt@bredband.net>2017-03-06 15:13:46 +0100
commit2f80fe4276c9ed4de493dc88218187d8c685d06a (patch)
tree543c4a41eb6ddafc47a43d6adf05d811f3fd69da /tests/glibmm_variant
parent6e205b721ebb26264bb00bdf294e04255de34f34 (diff)
downloadglibmm-2f80fe4276c9ed4de493dc88218187d8c685d06a.tar.gz
tests/glibmm_variant: Add test of Variant<std::tuple>
Bug 777791
Diffstat (limited to 'tests/glibmm_variant')
-rw-r--r--tests/glibmm_variant/main.cc66
1 files changed, 65 insertions, 1 deletions
diff --git a/tests/glibmm_variant/main.cc b/tests/glibmm_variant/main.cc
index dca4ee37..4d3c2c74 100644
--- a/tests/glibmm_variant/main.cc
+++ b/tests/glibmm_variant/main.cc
@@ -11,6 +11,70 @@ std::ostream& ostr = debug;
static void test_variant_floating();
static void test_dynamic_cast();
+namespace
+{
+
+int test_tuple()
+{
+ using TupleType = std::tuple<guint16, Glib::ustring, bool>;
+ using MapType = std::map<guint16, TupleType>;
+ bool result_ok = true;
+
+ // First tuple
+ const guint16 q1 = 2;
+ const Glib::ustring s1 = "Hi there";
+ const bool b1 = false;
+ auto t1 = std::make_tuple(q1, s1, b1);
+ auto tuple1_variant = Glib::Variant<TupleType>::create(t1);
+
+ // Second tuple
+ const guint16 q2 = 3;
+ const Glib::ustring s2 = "Hello";
+ const bool b2 = true;
+ auto t2 = std::make_tuple(q2, s2, b2);
+ auto tuple2_variant = Glib::Variant<TupleType>::create(t2);
+
+ // Insert the tuples in a map.
+ MapType m;
+ m[4] = t1;
+ m[5] = t2;
+ auto map_variant = Glib::Variant<MapType>::create(m);
+
+ std::string type_string = tuple1_variant.variant_type().get_string();
+ ostr << "Type string of tuple1: " << type_string << std::endl;
+ result_ok &= type_string == "(qsb)";
+
+ type_string = tuple2_variant.get_type_string();
+ ostr << "Type string of tuple2: " << type_string << std::endl;
+ result_ok &= type_string == "(qsb)";
+
+ type_string = map_variant.variant_type().get_string();
+ ostr << "Type string of map of tuples: " << type_string << std::endl;
+ result_ok &= map_variant.get_type_string() == "a{q(qsb)}";
+
+ // Extract from the map of tuples.
+ std::pair<guint16, TupleType> child0 = map_variant.get_child(0);
+ ostr << "Index of first map entry: " << child0.first << std::endl;
+ result_ok &= child0.first == 4;
+ auto extracted_tuple = child0.second;
+ auto q3 = std::get<guint16>(extracted_tuple);
+ auto s3 = std::get<Glib::ustring>(extracted_tuple);
+ auto b3 = std::get<bool>(extracted_tuple);
+ ostr << "Extracted tuple1 from map: (" << q3 << ", " << s3 << ", " << b3 << ")" << std::endl;
+ result_ok &= q3 == q1 && s3 == s1 && b3 == b1;
+
+ // Extract from a tuple.
+ auto q4 = tuple2_variant.get_child<guint16>(0);
+ auto s4 = tuple2_variant.get_child_variant<Glib::ustring>(1).get();
+ auto b4 = std::get<bool>(tuple2_variant.get());
+ ostr << "Extracted tuple2: (" << q4 << ", " << s4 << ", " << b4 << ")" << std::endl;
+ result_ok &= q4 == q2 && s4 == s2 && b4 == b2;
+
+ return result_ok ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+} // anonymous namespace
+
int
main(int, char**)
{
@@ -163,7 +227,7 @@ main(int, char**)
test_variant_floating();
test_dynamic_cast();
- return EXIT_SUCCESS;
+ return test_tuple();
}
// Test casting of multiple types to a ustring: