[tracker/tracker-0.12: 6/202] test/libtracker-miner: Unit test for the priority queue



commit 10b40a5edcc407fc5f1434b24721a283fddbc649
Author: Ivan Frade <ivan frade gmail com>
Date:   Fri Sep 9 18:59:42 2011 +0300

    test/libtracker-miner: Unit test for the priority queue

 tests/libtracker-miner/Makefile.am                 |    6 +-
 .../libtracker-miner/tracker-priority-queue-test.c |  251 ++++++++++++++++++++
 2 files changed, 256 insertions(+), 1 deletions(-)
---
diff --git a/tests/libtracker-miner/Makefile.am b/tests/libtracker-miner/Makefile.am
index 13b5f08..75c8737 100644
--- a/tests/libtracker-miner/Makefile.am
+++ b/tests/libtracker-miner/Makefile.am
@@ -21,7 +21,8 @@ TEST_PROGS +=                                          \
 	tracker-miner-manager-test                     \
 	tracker-password-provider-test                 \
 	tracker-thumbnailer-test                       \
-	tracker-monitor-test
+	tracker-monitor-test			       \
+	tracker-priority-queue-test
 
 AM_CPPFLAGS =                                          \
 	$(BUILD_CFLAGS)                                \
@@ -78,6 +79,9 @@ tracker_monitor_test_SOURCES =                         \
 	$(libtracker_miner_monitor_sources)            \
 	tracker-monitor-test.c
 
+tracker_priority_queue_test_SOURCES = 		       \
+	tracker-priority-queue-test.c
+
 noinst_HEADERS =                                       \
 	$(libtracker_miner_marshal_headers)            \
 	$(libtracker_miner_monitor_headers)            \
diff --git a/tests/libtracker-miner/tracker-priority-queue-test.c b/tests/libtracker-miner/tracker-priority-queue-test.c
new file mode 100644
index 0000000..c57211c
--- /dev/null
+++ b/tests/libtracker-miner/tracker-priority-queue-test.c
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2010, Nokia <ivan frade nokia com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libtracker-miner/tracker-priority-queue.h>
+
+void
+test_priority_queue_ref_unref()
+{
+        TrackerPriorityQueue *one, *two;
+        
+        one = tracker_priority_queue_new ();
+        two = tracker_priority_queue_ref (one);
+
+        tracker_priority_queue_unref (two);
+        tracker_priority_queue_unref (one);
+}
+
+void
+test_priority_queue_emptiness ()
+{
+        TrackerPriorityQueue *one;
+        
+        one = tracker_priority_queue_new ();
+
+        g_assert (tracker_priority_queue_is_empty (one));
+        g_assert_cmpint (tracker_priority_queue_get_length (one), ==, 0);
+
+        tracker_priority_queue_unref (one);
+}
+
+void
+test_priority_queue_insertion_pop ()
+{
+        TrackerPriorityQueue *queue;
+        int                   i, priority;
+        gchar                *text, *expected;
+
+        queue = tracker_priority_queue_new ();
+
+        /* Insert in to loops to "mix" priorities in the insertion */
+        for (i = 1; i <= 10; i+=2) {
+                tracker_priority_queue_add (queue, g_strdup_printf ("test content %i", i), i);
+        }
+
+        for (i = 2; i <= 10; i+=2) {
+                tracker_priority_queue_add (queue, g_strdup_printf ("test content %i", i), i);
+        }
+
+        for (i = 1; i <= 10; i++) {
+                expected = g_strdup_printf ("test content %i", i);
+
+                text = (gchar *)tracker_priority_queue_pop (queue, &priority);
+
+                g_assert_cmpint (priority, ==, i);
+                g_assert_cmpstr (text, ==, expected);
+
+                g_free (expected);
+                g_free (text);
+        }
+
+        g_assert (tracker_priority_queue_is_empty (queue));        
+        tracker_priority_queue_unref (queue);
+}
+
+void
+test_priority_queue_peek ()
+{
+        TrackerPriorityQueue *queue;
+        gchar                *result;
+        gint                  priority;
+        
+        queue = tracker_priority_queue_new ();
+        
+        tracker_priority_queue_add (queue, g_strdup ("Low prio"), 10);
+        tracker_priority_queue_add (queue, g_strdup ("High prio"), 1);
+
+        result = tracker_priority_queue_peek (queue, &priority);
+        g_assert_cmpint (priority, ==, 1);
+        g_assert_cmpstr (result, ==, "High prio");
+
+        result = tracker_priority_queue_pop (queue, &priority);
+        g_free (result);
+
+        result = tracker_priority_queue_peek (queue, &priority);
+        g_assert_cmpint (priority, ==, 10);
+        g_assert_cmpstr (result, ==, "Low prio");
+
+        result = tracker_priority_queue_pop (queue, &priority);
+        g_free (result);
+
+        tracker_priority_queue_unref (queue);
+}
+
+
+void
+test_priority_queue_find ()
+{
+        TrackerPriorityQueue *queue;
+        gchar                *result;
+        int                   priority;
+
+        queue = tracker_priority_queue_new ();
+        
+        tracker_priority_queue_add (queue, g_strdup ("search me"), 10);
+        tracker_priority_queue_add (queue, g_strdup ("Not me"), 1);
+        tracker_priority_queue_add (queue, g_strdup ("Not me either"), 20);
+
+        result = (gchar *)tracker_priority_queue_find (queue, &priority, g_str_equal, "search me");
+        g_assert_cmpint (priority, ==, 10);
+
+        tracker_priority_queue_unref (queue);
+}
+
+void
+foreach_testing_cb (G_GNUC_UNUSED gpointer data, gpointer user_data)
+{
+        gint *counter = (gint *)user_data;
+        (*counter) += 1;
+}
+
+void
+test_priority_queue_foreach ()
+{
+        TrackerPriorityQueue *queue;
+        gint                  counter = 0;
+
+        queue = tracker_priority_queue_new ();
+        
+        tracker_priority_queue_add (queue, g_strdup ("x"), 10);
+        tracker_priority_queue_add (queue, g_strdup ("x"), 20);        
+        tracker_priority_queue_add (queue, g_strdup ("x"), 30);
+
+        tracker_priority_queue_foreach (queue, foreach_testing_cb, &counter);
+
+        g_assert_cmpint (counter, ==, 3);
+
+        tracker_priority_queue_unref (queue);
+}
+
+void
+test_priority_queue_foreach_remove ()
+{
+        TrackerPriorityQueue *queue;
+        
+        queue = tracker_priority_queue_new ();
+
+        tracker_priority_queue_add (queue, g_strdup ("y"), 1);
+        tracker_priority_queue_add (queue, g_strdup ("x"), 2);
+        tracker_priority_queue_add (queue, g_strdup ("y"), 3);
+        tracker_priority_queue_add (queue, g_strdup ("x"), 4);
+        tracker_priority_queue_add (queue, g_strdup ("y"), 5);
+        g_assert_cmpint (tracker_priority_queue_get_length (queue), ==, 5);
+        
+        tracker_priority_queue_foreach_remove (queue, g_str_equal, "y", g_free);
+        g_assert_cmpint (tracker_priority_queue_get_length (queue), ==, 2);
+
+        tracker_priority_queue_foreach_remove (queue, g_str_equal, "x", g_free);
+        g_assert_cmpint (tracker_priority_queue_get_length (queue), ==, 0);
+
+        tracker_priority_queue_unref (queue);
+}
+
+
+void
+test_priority_queue_branches ()
+{
+
+        /* Few specific testing to improve the branch coverage */
+
+        TrackerPriorityQueue *queue;
+        gchar                *result;
+        gint                  priority;
+
+        queue = tracker_priority_queue_new ();
+
+        /* Removal on empty list */
+        tracker_priority_queue_foreach_remove (queue, g_str_equal, "y", g_free);
+
+
+        /* Insert multiple elements in the same priority */
+        tracker_priority_queue_add (queue, g_strdup ("x"), 5);
+        tracker_priority_queue_add (queue, g_strdup ("y"), 5);
+        tracker_priority_queue_add (queue, g_strdup ("z"), 5);
+
+        g_assert_cmpint (tracker_priority_queue_get_length (queue), ==, 3);
+
+        /* Removal with multiple elements in same priority*/
+        g_assert (tracker_priority_queue_foreach_remove (queue, g_str_equal, "z", g_free));
+        g_assert (tracker_priority_queue_foreach_remove (queue, g_str_equal, "x", g_free));
+        
+
+        /* Pop those elements */
+        result = tracker_priority_queue_pop (queue, &priority);
+        g_assert_cmpint (priority, ==, 5);
+        g_free (result);
+
+        g_assert_cmpint (tracker_priority_queue_get_length (queue), ==, 0);
+        /* Pop on empty queue */
+        result = tracker_priority_queue_pop (queue, &priority);
+        g_assert (result == NULL);
+
+        tracker_priority_queue_unref (queue);
+}
+
+int
+main (int    argc,
+      char **argv)
+{
+	g_type_init ();
+	g_thread_init (NULL);
+	g_test_init (&argc, &argv, NULL);
+
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/emptiness",
+	                 test_priority_queue_emptiness);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/ref_unref",
+	                 test_priority_queue_ref_unref);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/insertion",
+	                 test_priority_queue_insertion_pop);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/peek",
+	                 test_priority_queue_peek);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/find",
+	                 test_priority_queue_find);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/foreach",
+	                 test_priority_queue_foreach);
+	g_test_add_func ("/libtracker-miner/tracker-priority-queue/foreach_remove",
+	                 test_priority_queue_foreach_remove);
+
+        g_test_add_func ("/libtracker-miner/tracker-priority-queue/branches",
+                         test_priority_queue_branches);
+
+	return g_test_run ();
+}



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