[Spice-devel] [PATCH spice-gtk 3/4] tests: add some coroutine tests
Christophe Fergeau
cfergeau at redhat.com
Tue Nov 19 09:15:24 PST 2013
I haven't retested this, I'll just assume all tests are passing this time,
ACK.
Christophe
On Tue, Nov 19, 2013 at 04:14:24PM +0100, Marc-André Lureau wrote:
> ---
> tests/Makefile.am | 18 +++++---
> tests/coroutine.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 147 insertions(+), 7 deletions(-)
> create mode 100644 tests/coroutine.c
>
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 9510e2c..6f80d93 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -1,18 +1,22 @@
> NULL =
>
> -noinst_PROGRAMS = util
> +noinst_PROGRAMS = \
> + coroutine \
> + util \
> + $(NULL)
> +
> TESTS = $(noinst_PROGRAMS)
>
> AM_CPPFLAGS = \
> $(GIO_CFLAGS) -I$(top_srcdir)/gtk \
> -DG_LOG_DOMAIN=\"GSpice\" \
> $(NULL)
> -AM_LDFLAGS = $(GIO_LIBS)
>
> -util_SOURCES = \
> - $(top_srcdir)/gtk/spice-util-priv.h \
> - $(top_srcdir)/gtk/spice-util.c \
> - $(top_srcdir)/gtk/spice-util.h \
> - util.c \
> +AM_LDFLAGS = $(GIO_LIBS) -static
> +
> +LDADD = \
> + $(top_builddir)/gtk/libspice-client-glib-2.0.la \
> $(NULL)
>
> +util_SOURCES = util.c
> +coroutine_SOURCES = coroutine.c
> diff --git a/tests/coroutine.c b/tests/coroutine.c
> new file mode 100644
> index 0000000..09bb74a
> --- /dev/null
> +++ b/tests/coroutine.c
> @@ -0,0 +1,136 @@
> +#include <glib.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <stdlib.h>
> +
> +#include "coroutine.h"
> +
> +static gpointer co_entry_check_self(gpointer data)
> +{
> + g_assert(data == coroutine_self());
> + g_assert(!coroutine_self_is_main());
> +
> + return NULL;
> +}
> +
> +static gpointer co_entry_42(gpointer data)
> +{
> + g_assert(GPOINTER_TO_INT(data) == 42);
> + g_assert(!coroutine_self_is_main());
> +
> + return GINT_TO_POINTER(0x42);
> +}
> +
> +static void test_coroutine_simple(void)
> +{
> + struct coroutine *self = coroutine_self();
> + struct coroutine co = {
> + .stack_size = 16 << 20,
> + .entry = co_entry_42,
> + };
> + gpointer result;
> +
> + g_assert(coroutine_self_is_main());
> +
> + g_assert(coroutine_init(&co) == 0);
> + result = coroutine_yieldto(&co, GINT_TO_POINTER(42));
> + g_assert_cmpint(GPOINTER_TO_INT(result), ==, 0x42);
> +
> +#if GLIB_CHECK_VERSION(2,34,0)
> + g_test_expect_message(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "*!to->exited*");
> + coroutine_yieldto(&co, GINT_TO_POINTER(42));
> + g_test_assert_expected_messages();
> +#endif
> +
> + g_assert(self == coroutine_self());
> + g_assert(coroutine_self_is_main());
> +}
> +
> +static gpointer co_entry_two(gpointer data)
> +{
> + struct coroutine *self = coroutine_self();
> + struct coroutine co = {
> + .stack_size = 16 << 20,
> + .entry = co_entry_check_self,
> + };
> +
> + g_assert(!coroutine_self_is_main());
> + g_assert(coroutine_init(&co) == 0);
> + coroutine_yieldto(&co, &co);
> +
> + g_assert(self == coroutine_self());
> + return NULL;
> +}
> +
> +static void test_coroutine_two(void)
> +{
> + struct coroutine *self = coroutine_self();
> + struct coroutine co = {
> + .stack_size = 16 << 20,
> + .entry = co_entry_two,
> + };
> +
> + g_assert(coroutine_init(&co) == 0);
> + coroutine_yieldto(&co, NULL);
> +
> + g_assert(self == coroutine_self());
> +}
> +
> +static gpointer co_entry_yield(gpointer data)
> +{
> + gpointer val;
> +
> + g_assert(data == NULL);
> + val = coroutine_yield(GINT_TO_POINTER(1));
> + g_assert_cmpint(GPOINTER_TO_INT(val), ==, 2);
> +
> + g_assert(!coroutine_self_is_main());
> +
> + val = coroutine_yield(GINT_TO_POINTER(3));
> + g_assert_cmpint(GPOINTER_TO_INT(val), ==, 4);
> +
> + return NULL;
> +}
> +
> +static void test_coroutine_yield(void)
> +{
> + struct coroutine *self = coroutine_self();
> + struct coroutine co = {
> + .stack_size = 16 << 20,
> + .entry = co_entry_yield,
> + };
> + gpointer val;
> +
> + g_assert (coroutine_init(&co) == 0);
> + val = coroutine_yieldto(&co, NULL);
> +
> + g_assert(self == coroutine_self());
> + g_assert_cmpint(GPOINTER_TO_INT(val), ==, 1);
> +
> + val = coroutine_yieldto(&co, GINT_TO_POINTER(2));
> +
> + g_assert(self == coroutine_self());
> + g_assert_cmpint(GPOINTER_TO_INT(val), ==, 3);
> +
> + val = coroutine_yieldto(&co, GINT_TO_POINTER(4));
> +
> + g_assert(self == coroutine_self());
> + g_assert(val == NULL);
> +
> +#if GLIB_CHECK_VERSION(2,34,0)
> + g_test_expect_message(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "*!to->exited*");
> + coroutine_yieldto(&co, GINT_TO_POINTER(42));
> + g_test_assert_expected_messages();
> +#endif
> +}
> +
> +int main(int argc, char* argv[])
> +{
> + g_test_init(&argc, &argv, NULL);
> +
> + g_test_add_func("/coroutine/simple", test_coroutine_simple);
> + g_test_add_func("/coroutine/two", test_coroutine_two);
> + g_test_add_func("/coroutine/yield", test_coroutine_yield);
> +
> + return g_test_run ();
> +}
> --
> 1.8.3.1
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20131119/6ea4b026/attachment.pgp>
More information about the Spice-devel
mailing list