mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-09 20:35:49 +01:00
GSequence: Make g_sequence_iter_move behave as documented
As pointed out in bug 658313, moving before the begin iter is supposed to return the begin iter, not the end iter. Also add a test for this behaviour.
This commit is contained in:
parent
2a3f7f49b4
commit
440bd2a975
@ -1422,12 +1422,18 @@ g_sequence_iter_move (GSequenceIter *iter,
|
|||||||
gint delta)
|
gint delta)
|
||||||
{
|
{
|
||||||
gint new_pos;
|
gint new_pos;
|
||||||
|
gint len;
|
||||||
|
|
||||||
g_return_val_if_fail (iter != NULL, NULL);
|
g_return_val_if_fail (iter != NULL, NULL);
|
||||||
|
|
||||||
|
len = g_sequence_get_length (get_sequence (iter));
|
||||||
|
|
||||||
new_pos = node_get_pos (iter) + delta;
|
new_pos = node_get_pos (iter) + delta;
|
||||||
|
|
||||||
new_pos = clamp_position (get_sequence (iter), new_pos);
|
if (new_pos < 0)
|
||||||
|
new_pos = 0;
|
||||||
|
else if (new_pos > len)
|
||||||
|
new_pos = len;
|
||||||
|
|
||||||
return node_get_by_pos (iter, new_pos);
|
return node_get_by_pos (iter, new_pos);
|
||||||
}
|
}
|
||||||
|
@ -1210,6 +1210,35 @@ test_out_of_range_jump (void)
|
|||||||
|
|
||||||
g_assert (g_sequence_iter_is_begin (iter));
|
g_assert (g_sequence_iter_is_begin (iter));
|
||||||
g_assert (g_sequence_iter_is_end (iter));
|
g_assert (g_sequence_iter_is_end (iter));
|
||||||
|
|
||||||
|
g_sequence_free (seq);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_iter_move (void)
|
||||||
|
{
|
||||||
|
GSequence *seq = g_sequence_new (NULL);
|
||||||
|
GSequenceIter *iter;
|
||||||
|
gint i;
|
||||||
|
|
||||||
|
for (i = 0; i < 10; ++i)
|
||||||
|
g_sequence_append (seq, GINT_TO_POINTER (i));
|
||||||
|
|
||||||
|
iter = g_sequence_get_begin_iter (seq);
|
||||||
|
iter = g_sequence_iter_move (iter, 5);
|
||||||
|
g_assert_cmpint (GPOINTER_TO_INT (g_sequence_get (iter)), ==, 5);
|
||||||
|
|
||||||
|
iter = g_sequence_iter_move (iter, -10);
|
||||||
|
g_assert (g_sequence_iter_is_begin (iter));
|
||||||
|
|
||||||
|
iter = g_sequence_get_end_iter (seq);
|
||||||
|
iter = g_sequence_iter_move (iter, -5);
|
||||||
|
g_assert_cmpint (GPOINTER_TO_INT (g_sequence_get (iter)), ==, 5);
|
||||||
|
|
||||||
|
iter = g_sequence_iter_move (iter, 10);
|
||||||
|
g_assert (g_sequence_iter_is_end (iter));
|
||||||
|
|
||||||
|
g_sequence_free (seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -1326,6 +1355,8 @@ test_stable_sort (void)
|
|||||||
iter = g_sequence_iter_next (iter);
|
iter = g_sequence_iter_next (iter);
|
||||||
g_sequence_check (seq);
|
g_sequence_check (seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_sequence_free (seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -1340,6 +1371,7 @@ main (int argc,
|
|||||||
|
|
||||||
/* Standalone tests */
|
/* Standalone tests */
|
||||||
g_test_add_func ("/sequence/out-of-range-jump", test_out_of_range_jump);
|
g_test_add_func ("/sequence/out-of-range-jump", test_out_of_range_jump);
|
||||||
|
g_test_add_func ("/sequence/iter-move", test_iter_move);
|
||||||
g_test_add_func ("/sequence/insert-sorted-non-pointer", test_insert_sorted_non_pointer);
|
g_test_add_func ("/sequence/insert-sorted-non-pointer", test_insert_sorted_non_pointer);
|
||||||
g_test_add_func ("/sequence/stable-sort", test_stable_sort);
|
g_test_add_func ("/sequence/stable-sort", test_stable_sort);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user