mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-29 23:32:33 +00:00
tests: add checks for gst_queue_array_find() and _drop_element()
https://bugzilla.gnome.org/show_bug.cgi?id=692691
This commit is contained in:
parent
0b2ccd5ff1
commit
53a7fe04a0
1 changed files with 146 additions and 0 deletions
|
@ -226,6 +226,150 @@ 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_find)
|
||||
{
|
||||
GstQueueArray *array;
|
||||
guint i;
|
||||
guint index;
|
||||
|
||||
guint random_initial = g_random_int_range (10, 100);
|
||||
guint value_to_find = 5;
|
||||
|
||||
/* Create an array of initial size 10 */
|
||||
array = gst_queue_array_new (10);
|
||||
fail_unless_equals_int (array->size, 10);
|
||||
|
||||
while (random_initial--) {
|
||||
gst_queue_array_push_tail (array, GINT_TO_POINTER (g_random_int ()));
|
||||
gst_queue_array_pop_head (array);
|
||||
}
|
||||
|
||||
/* push 10 values in */
|
||||
for (i = 0; i < 10; i++)
|
||||
gst_queue_array_push_tail (array, GINT_TO_POINTER (i));
|
||||
|
||||
fail_unless_equals_int (array->length, 10);
|
||||
fail_unless_equals_int (array->size, 10);
|
||||
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value,
|
||||
GINT_TO_POINTER (value_to_find));
|
||||
fail_if (index == -1);
|
||||
fail_unless_equals_int (value_to_find, GPOINTER_TO_INT (array->array[index]));
|
||||
|
||||
/* push 10 values in */
|
||||
for (i = 0; i < 10; i++)
|
||||
gst_queue_array_pop_head (array);
|
||||
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value,
|
||||
GINT_TO_POINTER (value_to_find));
|
||||
fail_unless (index == -1);
|
||||
|
||||
gst_queue_array_free (array);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_array_drop)
|
||||
{
|
||||
GstQueueArray *array;
|
||||
guint i;
|
||||
guint index;
|
||||
guint index_2;
|
||||
|
||||
/* Create an array of initial size 10 */
|
||||
array = gst_queue_array_new (10);
|
||||
fail_unless_equals_int (array->size, 10);
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
gst_queue_array_push_tail (array, GINT_TO_POINTER (i));
|
||||
|
||||
fail_unless (array->length == 5);
|
||||
|
||||
/* Naive case remove head */
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (0));
|
||||
fail_if (index == -1);
|
||||
gst_queue_array_drop_element (array, index);
|
||||
fail_unless (array->length == 4);
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (0));
|
||||
fail_unless (index == -1);
|
||||
|
||||
/* Naive case remove tail */
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (4));
|
||||
fail_if (index == -1);
|
||||
gst_queue_array_drop_element (array, index);
|
||||
fail_unless (array->length == 3);
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (4));
|
||||
fail_unless (index == -1);
|
||||
|
||||
/* Remove in middle of non-wrapped */
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (2));
|
||||
index_2 =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (3));
|
||||
fail_if (index == -1);
|
||||
fail_if (index_2 == -1);
|
||||
gst_queue_array_drop_element (array, index);
|
||||
fail_unless (array->length == 2);
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (2));
|
||||
fail_unless (index == -1);
|
||||
index_2 =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (3));
|
||||
fail_if (index_2 == -1);
|
||||
|
||||
/* Remove the rest */
|
||||
while (array->length)
|
||||
gst_queue_array_pop_head (array);
|
||||
|
||||
/* Add until wrapping */
|
||||
for (i = 0; i < 9; i++)
|
||||
gst_queue_array_push_tail (array, GINT_TO_POINTER (i));
|
||||
|
||||
fail_unless (array->head > array->tail);
|
||||
|
||||
/* Remove from between head and array end */
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (1));
|
||||
fail_if (index == -1);
|
||||
fail_unless (index > array->head);
|
||||
index_2 = array->head;
|
||||
gst_queue_array_drop_element (array, index);
|
||||
fail_unless (array->length == 8);
|
||||
fail_if (array->head == index_2);
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (1));
|
||||
fail_unless (index == -1);
|
||||
|
||||
/* Remove from between head and array end */
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (8));
|
||||
fail_if (index == -1);
|
||||
fail_unless (index < array->tail);
|
||||
index_2 = array->tail;
|
||||
gst_queue_array_drop_element (array, index);
|
||||
fail_unless (array->length == 7);
|
||||
fail_if (array->tail == index_2);
|
||||
index =
|
||||
gst_queue_array_find (array, compare_pointer_value, GINT_TO_POINTER (8));
|
||||
fail_unless (index == -1);
|
||||
|
||||
gst_queue_array_free (array);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
gst_queue_array_suite (void)
|
||||
{
|
||||
|
@ -239,6 +383,8 @@ 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_find);
|
||||
tcase_add_test (tc_chain, test_array_drop);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue