tests: one more test for gst_queue_array_drop_element()
authorTim-Philipp Müller <tim@centricular.net>
Tue, 29 Jan 2013 22:54:21 +0000 (22:54 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 30 Jan 2013 11:32:21 +0000 (11:32 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=692691

Conflicts:
tests/check/libs/queuearray.c

tests/check/libs/queuearray.c

index e41412c..8844e69 100644 (file)
@@ -199,6 +199,54 @@ GST_START_TEST (test_array_grow_end)
 
 GST_END_TEST;
 
+static int
+compare_pointer_value (gconstpointer a, gconstpointer b)
+{
+  return (int) ((guintptr) a - (guintptr) b);
+}
+
+GST_START_TEST (test_array_drop2)
+{
+#define NUM_QA_ELEMENTS 674
+  gboolean in_array[NUM_QA_ELEMENTS] = { FALSE, };
+  GstQueueArray *array;
+  guint i, j, count, idx;
+
+  array = gst_queue_array_new (10);
+
+  for (i = 0; i < NUM_QA_ELEMENTS; i++) {
+    gpointer element = GUINT_TO_POINTER (i);
+
+    if (g_random_boolean ()) {
+      gst_queue_array_push_tail (array, element);
+      in_array[i] = TRUE;
+    }
+  }
+
+  for (j = 0, count = 0; j < NUM_QA_ELEMENTS; j++)
+    count += in_array[j] ? 1 : 0;
+  fail_unless_equals_int (gst_queue_array_get_length (array), count);
+
+  while (gst_queue_array_get_length (array) > 0) {
+    for (i = 0; i < NUM_QA_ELEMENTS; i++) {
+      if (g_random_boolean () && g_random_boolean () && in_array[i]) {
+        idx = gst_queue_array_find (array, compare_pointer_value,
+            GUINT_TO_POINTER (i));
+        gst_queue_array_drop_element (array, idx);
+        in_array[i] = FALSE;
+      }
+    }
+
+    for (j = 0, count = 0; j < NUM_QA_ELEMENTS; j++)
+      count += in_array[j] ? 1 : 0;
+    fail_unless_equals_int (gst_queue_array_get_length (array), count);
+  }
+
+  gst_queue_array_free (array);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_queue_array_suite (void)
 {
@@ -212,6 +260,7 @@ gst_queue_array_suite (void)
   tcase_add_test (tc_chain, test_array_grow_multiple);
   tcase_add_test (tc_chain, test_array_grow_middle);
   tcase_add_test (tc_chain, test_array_grow_end);
+  tcase_add_test (tc_chain, test_array_drop2);
 
   return s;
 }