mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-27 22:46:15 +01:00
Improve test coverage
Duplicate the atomic tests for the functions, and test the new atomic operations as well.
This commit is contained in:
parent
a79a5a6202
commit
059fa31ad1
@ -3,37 +3,187 @@
|
|||||||
int
|
int
|
||||||
main (void)
|
main (void)
|
||||||
{
|
{
|
||||||
guint u;
|
guint u, u2;
|
||||||
gint s;
|
gint s, s2;
|
||||||
gpointer vp;
|
gpointer vp, vp2;
|
||||||
int *ip;
|
int *ip, *ip2;
|
||||||
gsize gs;
|
gsize gs, gs2;
|
||||||
|
gboolean res;
|
||||||
|
|
||||||
g_atomic_int_set (&u, 5);
|
g_atomic_int_set (&u, 5);
|
||||||
g_atomic_int_get (&u);
|
u2 = g_atomic_int_get (&u);
|
||||||
g_atomic_int_compare_and_exchange (&u, 6, 7);
|
g_assert_cmpint (u2, ==, 5);
|
||||||
|
res = g_atomic_int_compare_and_exchange (&u, 6, 7);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (u, ==, 5);
|
||||||
g_atomic_int_add (&u, 1);
|
g_atomic_int_add (&u, 1);
|
||||||
|
g_assert_cmpint (u, ==, 6);
|
||||||
g_atomic_int_inc (&u);
|
g_atomic_int_inc (&u);
|
||||||
(void) g_atomic_int_dec_and_test (&u);
|
g_assert_cmpint (u, ==, 7);
|
||||||
|
res = g_atomic_int_dec_and_test (&u);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (u, ==, 6);
|
||||||
|
u2 = g_atomic_int_and (&u, 5);
|
||||||
|
g_assert_cmpint (u2, ==, 6);
|
||||||
|
g_assert_cmpint (u, ==, 4);
|
||||||
|
u2 = g_atomic_int_or (&u, 8);
|
||||||
|
g_assert_cmpint (u2, ==, 4);
|
||||||
|
g_assert_cmpint (u, ==, 12);
|
||||||
|
u2 = g_atomic_int_xor (&u, 4);
|
||||||
|
g_assert_cmpint (u2, ==, 12);
|
||||||
|
g_assert_cmpint (u, ==, 8);
|
||||||
|
|
||||||
g_atomic_int_set (&s, 5);
|
g_atomic_int_set (&s, 5);
|
||||||
g_atomic_int_get (&s);
|
s2 = g_atomic_int_get (&s);
|
||||||
g_atomic_int_compare_and_exchange (&s, 6, 7);
|
g_assert_cmpint (s2, ==, 5);
|
||||||
|
res = g_atomic_int_compare_and_exchange (&s, 6, 7);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (s, ==, 5);
|
||||||
g_atomic_int_add (&s, 1);
|
g_atomic_int_add (&s, 1);
|
||||||
|
g_assert_cmpint (s, ==, 6);
|
||||||
g_atomic_int_inc (&s);
|
g_atomic_int_inc (&s);
|
||||||
(void) g_atomic_int_dec_and_test (&s);
|
g_assert_cmpint (s, ==, 7);
|
||||||
|
res = g_atomic_int_dec_and_test (&s);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (s, ==, 6);
|
||||||
|
s2 = g_atomic_int_and (&s, 5);
|
||||||
|
g_assert_cmpint (s2, ==, 6);
|
||||||
|
g_assert_cmpint (s, ==, 4);
|
||||||
|
s2 = g_atomic_int_or (&s, 8);
|
||||||
|
g_assert_cmpint (s2, ==, 4);
|
||||||
|
g_assert_cmpint (s, ==, 12);
|
||||||
|
s2 = g_atomic_int_xor (&s, 4);
|
||||||
|
g_assert_cmpint (s2, ==, 12);
|
||||||
|
g_assert_cmpint (s, ==, 8);
|
||||||
|
|
||||||
g_atomic_pointer_set (&vp, 0);
|
g_atomic_pointer_set (&vp, 0);
|
||||||
g_atomic_pointer_get (&vp);
|
vp2 = g_atomic_pointer_get (&vp);
|
||||||
g_atomic_pointer_compare_and_exchange (&vp, 0, 0);
|
g_assert (vp2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&vp, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (vp == 0);
|
||||||
|
|
||||||
g_atomic_pointer_set (&ip, 0);
|
g_atomic_pointer_set (&ip, 0);
|
||||||
g_atomic_pointer_get (&ip);
|
ip2 = g_atomic_pointer_get (&ip);
|
||||||
g_atomic_pointer_compare_and_exchange (&ip, 0, 0);
|
g_assert (ip2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&ip, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (ip == 0);
|
||||||
|
|
||||||
g_atomic_pointer_set (&gs, 0);
|
g_atomic_pointer_set (&gs, 0);
|
||||||
g_atomic_pointer_get (&gs);
|
gs2 = (gsize) g_atomic_pointer_get (&gs);
|
||||||
g_atomic_pointer_compare_and_exchange (&gs, 0, 0);
|
g_assert (gs2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&gs, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (gs == 0);
|
||||||
|
gs2 = g_atomic_pointer_add (&gs, 5);
|
||||||
|
g_assert (gs2 == 0);
|
||||||
|
g_assert (gs == 5);
|
||||||
|
gs2 = g_atomic_pointer_and (&gs, 6);
|
||||||
|
g_assert (gs2 == 5);
|
||||||
|
g_assert (gs == 4);
|
||||||
|
gs2 = g_atomic_pointer_or (&gs, 8);
|
||||||
|
g_assert (gs2 == 4);
|
||||||
|
g_assert (gs == 12);
|
||||||
|
gs2 = g_atomic_pointer_xor (&gs, 4);
|
||||||
|
g_assert (gs2 == 12);
|
||||||
|
g_assert (gs == 8);
|
||||||
|
|
||||||
|
/* repeat, without the macros */
|
||||||
|
#undef g_atomic_int_set
|
||||||
|
#undef g_atomic_int_get
|
||||||
|
#undef g_atomic_int_compare_and_exchange
|
||||||
|
#undef g_atomic_int_add
|
||||||
|
#undef g_atomic_int_inc
|
||||||
|
#undef g_atomic_int_and
|
||||||
|
#undef g_atomic_int_or
|
||||||
|
#undef g_atomic_int_xor
|
||||||
|
#undef g_atomic_int_dec_and_test
|
||||||
|
#undef g_atomic_pointer_set
|
||||||
|
#undef g_atomic_pointer_get
|
||||||
|
#undef g_atomic_pointer_compare_and_exchange
|
||||||
|
#undef g_atomic_pointer_add
|
||||||
|
#undef g_atomic_pointer_and
|
||||||
|
#undef g_atomic_pointer_or
|
||||||
|
#undef g_atomic_pointer_xor
|
||||||
|
|
||||||
|
g_atomic_int_set ((gint*)&u, 5);
|
||||||
|
u2 = g_atomic_int_get ((gint*)&u);
|
||||||
|
g_assert_cmpint (u2, ==, 5);
|
||||||
|
res = g_atomic_int_compare_and_exchange ((gint*)&u, 6, 7);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (u, ==, 5);
|
||||||
|
g_atomic_int_add ((gint*)&u, 1);
|
||||||
|
g_assert_cmpint (u, ==, 6);
|
||||||
|
g_atomic_int_inc ((gint*)&u);
|
||||||
|
g_assert_cmpint (u, ==, 7);
|
||||||
|
res = g_atomic_int_dec_and_test ((gint*)&u);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (u, ==, 6);
|
||||||
|
u2 = g_atomic_int_and (&u, 5);
|
||||||
|
g_assert_cmpint (u2, ==, 6);
|
||||||
|
g_assert_cmpint (u, ==, 4);
|
||||||
|
u2 = g_atomic_int_or (&u, 8);
|
||||||
|
g_assert_cmpint (u2, ==, 4);
|
||||||
|
g_assert_cmpint (u, ==, 12);
|
||||||
|
u2 = g_atomic_int_xor (&u, 4);
|
||||||
|
g_assert_cmpint (u2, ==, 12);
|
||||||
|
|
||||||
|
g_atomic_int_set (&s, 5);
|
||||||
|
s2 = g_atomic_int_get (&s);
|
||||||
|
g_assert_cmpint (s2, ==, 5);
|
||||||
|
res = g_atomic_int_compare_and_exchange (&s, 6, 7);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (s, ==, 5);
|
||||||
|
g_atomic_int_add (&s, 1);
|
||||||
|
g_assert_cmpint (s, ==, 6);
|
||||||
|
g_atomic_int_inc (&s);
|
||||||
|
g_assert_cmpint (s, ==, 7);
|
||||||
|
res = g_atomic_int_dec_and_test (&s);
|
||||||
|
g_assert (!res);
|
||||||
|
g_assert_cmpint (s, ==, 6);
|
||||||
|
s2 = g_atomic_int_and ((guint*)&s, 5);
|
||||||
|
g_assert_cmpint (s2, ==, 6);
|
||||||
|
g_assert_cmpint (s, ==, 4);
|
||||||
|
s2 = g_atomic_int_or ((guint*)&s, 8);
|
||||||
|
g_assert_cmpint (s2, ==, 4);
|
||||||
|
g_assert_cmpint (s, ==, 12);
|
||||||
|
s2 = g_atomic_int_xor ((guint*)&s, 4);
|
||||||
|
g_assert_cmpint (s2, ==, 12);
|
||||||
|
g_assert_cmpint (s, ==, 8);
|
||||||
|
|
||||||
|
g_atomic_pointer_set (&vp, 0);
|
||||||
|
vp2 = g_atomic_pointer_get (&vp);
|
||||||
|
g_assert (vp2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&vp, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (vp == 0);
|
||||||
|
|
||||||
|
g_atomic_pointer_set (&ip, 0);
|
||||||
|
ip2 = g_atomic_pointer_get (&ip);
|
||||||
|
g_assert (ip2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&ip, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (ip == 0);
|
||||||
|
|
||||||
|
g_atomic_pointer_set (&gs, 0);
|
||||||
|
gs2 = (gsize) g_atomic_pointer_get (&gs);
|
||||||
|
g_assert (gs2 == 0);
|
||||||
|
res = g_atomic_pointer_compare_and_exchange (&gs, 0, 0);
|
||||||
|
g_assert (res);
|
||||||
|
g_assert (gs == 0);
|
||||||
|
gs2 = g_atomic_pointer_add (&gs, 5);
|
||||||
|
g_assert (gs2 == 0);
|
||||||
|
g_assert (gs == 5);
|
||||||
|
gs2 = g_atomic_pointer_and (&gs, 6);
|
||||||
|
g_assert (gs2 == 5);
|
||||||
|
g_assert (gs == 4);
|
||||||
|
gs2 = g_atomic_pointer_or (&gs, 8);
|
||||||
|
g_assert (gs2 == 4);
|
||||||
|
g_assert (gs == 12);
|
||||||
|
gs2 = g_atomic_pointer_xor (&gs, 4);
|
||||||
|
g_assert (gs2 == 12);
|
||||||
|
g_assert (gs == 8);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user