summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIvan Frade <ivan.frade@gmail.com>2011-09-09 18:59:42 +0300
committerIvan Frade <ivan.frade@gmail.com>2011-09-09 19:02:25 +0300
commit07db402ceb7b783601a58d7d7f7075b9257787c0 (patch)
tree04a6c56efeaf306e6eaa2bc6ef43951b5ffba8bd /tests
parentac59e6d42fee3fc9cb9ec1fc9a08f9a804f69814 (diff)
downloadtracker-07db402ceb7b783601a58d7d7f7075b9257787c0.tar.gz
test/libtracker-miner: Unit test for the priority queue
Diffstat (limited to 'tests')
-rw-r--r--tests/libtracker-miner/Makefile.am6
-rw-r--r--tests/libtracker-miner/tracker-priority-queue-test.c251
2 files changed, 256 insertions, 1 deletions
diff --git a/tests/libtracker-miner/Makefile.am b/tests/libtracker-miner/Makefile.am
index 13b5f082f..75c873717 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 000000000..c57211c88
--- /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 ();
+}