[glib] Improve GNode test coverage a bit



commit b4ed2af52fbe195aab3771066dac71172f8716ed
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Jul 27 00:17:20 2010 -0400

    Improve GNode test coverage a bit

 glib/tests/node.c |  117 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 117 insertions(+), 0 deletions(-)
---
diff --git a/glib/tests/node.c b/glib/tests/node.c
index 09e133d..4f733bf 100644
--- a/glib/tests/node.c
+++ b/glib/tests/node.c
@@ -105,15 +105,27 @@ traversal_test (void)
   g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
   g_assert_cmpstr (tstring, ==,  "ABCDEFGHIJK");
   g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_PRE_ORDER, G_TRAVERSE_ALL, 2, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==,  "ABF");
+  g_free (tstring); tstring = NULL;
   g_node_traverse (root, G_POST_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
   g_assert_cmpstr (tstring, ==, "CDEBHIJKGFA");
   g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_POST_ORDER, G_TRAVERSE_ALL, 2, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "BFA");
+  g_free (tstring); tstring = NULL;
   g_node_traverse (root, G_IN_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
   g_assert_cmpstr (tstring, ==, "CBDEAHGIJKF");
   g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_IN_ORDER, G_TRAVERSE_ALL, 2, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "BAF");
+  g_free (tstring); tstring = NULL;
   g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, node_build_string, &tstring);
   g_assert_cmpstr (tstring, ==, "ABFCDEGHIJK");
   g_free (tstring); tstring = NULL;
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, 2, node_build_string, &tstring);
+  g_assert_cmpstr (tstring, ==, "ABF");
+  g_free (tstring); tstring = NULL;
   
   g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, node_build_string, &tstring);
   g_assert_cmpstr (tstring, ==, "CDEHIJK");
@@ -276,6 +288,109 @@ misc_test (void)
   g_node_destroy (root);
 }
 
+static gboolean
+check_order (GNode    *node,
+             gpointer  data)
+{
+  gchar **expected = data;
+  gchar d;
+
+  d = GPOINTER_TO_INT (node->data);
+  g_assert_cmpint (d, ==, **expected);
+  (*expected)++;
+
+  return FALSE;
+}
+
+static void
+unlink_test (void)
+{
+  GNode *root;
+  GNode *cnode;
+  GNode *node;
+  gchar *expected;
+
+  /*
+   *        -------- a --------
+   *       /         |          \
+   *     b           c           d
+   *   / | \       / | \       / | \
+   * e   f   g   h   i   j   k   l   m
+   *
+   */
+
+  root = g_node_new (C2P ('a'));
+  node = g_node_append_data (root, C2P ('b'));
+  g_node_append_data (node, C2P ('e'));
+  g_node_append_data (node, C2P ('f'));
+  g_node_append_data (node, C2P ('g'));
+
+  node = cnode = g_node_append_data (root, C2P ('c'));
+  g_node_append_data (node, C2P ('h'));
+  g_node_append_data (node, C2P ('i'));
+  g_node_append_data (node, C2P ('j'));
+
+  node = g_node_append_data (root, C2P ('d'));
+  g_node_append_data (node, C2P ('k'));
+  g_node_append_data (node, C2P ('l'));
+  g_node_append_data (node, C2P ('m'));
+
+  g_node_unlink (cnode);
+
+  expected = "abdefgklm";
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, check_order, &expected);
+
+  expected = "chij";
+  g_node_traverse (cnode, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, check_order, &expected);
+
+  g_node_destroy (root);
+  g_node_destroy (cnode);
+}
+
+static gpointer
+copy_up (gconstpointer src,
+         gpointer      data)
+{
+  gchar l, u;
+
+  l = GPOINTER_TO_INT (src);
+  u = g_ascii_toupper (l);
+
+  return GINT_TO_POINTER (u);
+}
+
+static void
+copy_test (void)
+{
+  GNode *root;
+  GNode *copy;
+  gchar *expected;
+
+  root = g_node_new (C2P ('a'));
+  g_node_append_data (root, C2P ('b'));
+  g_node_append_data (root, C2P ('c'));
+  g_node_append_data (root, C2P ('d'));
+
+  expected = "abcd";
+  g_node_traverse (root, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, check_order, &expected);
+
+  copy = g_node_copy (root);
+
+  expected = "abcd";
+  g_node_traverse (copy, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, check_order, &expected);
+
+  g_node_destroy (copy);
+
+  copy = g_node_copy_deep (root, copy_up, NULL);
+
+  expected = "ABCD";
+  g_node_traverse (copy, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, check_order, &expected);
+
+  g_node_destroy (copy);
+
+  g_node_destroy (root);
+}
+
 int
 main (int   argc,
       char *argv[])
@@ -286,6 +401,8 @@ main (int   argc,
   g_test_add_func ("/node/construction", construct_test);
   g_test_add_func ("/node/traversal", traversal_test);
   g_test_add_func ("/node/misc", misc_test);
+  g_test_add_func ("/node/unlink", unlink_test);
+  g_test_add_func ("/node/copy", copy_test);
 
   return g_test_run ();
 }



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