Update contrib.
1 /* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. */
4 #include <glib-object.h>
8 #include <glib_global.h>
9 #include "mrt2_glib2_test.h"
14 #define G_TYPE_TEST (g_test_get_type ())
15 #define G_TEST(test) (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
16 #define G_IS_TEST(test) (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
17 #define G_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
18 #define G_IS_TEST_CLASS(tclass) (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
19 #define G_TEST_GET_CLASS(test) (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
21 typedef struct _GTest GTest;
22 typedef struct _GTestClass GTestClass;
31 GObjectClass parent_class;
34 static GType g_test_get_type (void);
35 static volatile gboolean stopping;
37 static void g_test_class_init (GTestClass * klass);
38 static void g_test_init (GTest * test);
39 static void g_test_dispose (GObject * object);
41 static GObjectClass *parent_class = NULL;
44 g_test_get_type (void)
46 static GType test_type = 0;
49 static const GTypeInfo test_info = {
53 (GClassInitFunc) g_test_class_init,
58 (GInstanceInitFunc) g_test_init,
62 test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
69 g_test_class_init (GTestClass * klass)
71 GObjectClass *gobject_class;
73 gobject_class = (GObjectClass *) klass;
75 parent_class = g_type_class_ref (G_TYPE_OBJECT);
77 gobject_class->dispose = g_test_dispose;
81 g_test_init (GTest * test)
83 //g_print ("init %p\n", test);
87 g_test_dispose (GObject * object)
91 test = G_TEST (object);
93 //g_print ("dispose %p!\n", object);
95 G_OBJECT_CLASS (parent_class)->dispose (object);
99 g_test_do_refcount (GTest * test)
102 g_object_unref (test);
106 run_thread (GTest * test)
111 g_test_do_refcount (test);
112 if ((i++ % 10000) == 0) {
114 g_thread_yield(); /* force context switch */
122 main (int argc, char **argv)
125 GTest *test1, *test2;
126 GArray *test_threads;
127 const guint n_threads = 5;
131 g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
132 g_set_print_handler(mrtPrintHandler);
136 g_thread_init (NULL);
137 //g_print ("START: %s\n", argv[0]);
138 g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
141 test1 = g_object_new (G_TYPE_TEST, NULL);
142 g_assert(test1 != NULL);
144 test2 = g_object_new (G_TYPE_TEST, NULL);
145 g_assert(test2 != NULL);
147 test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *));
151 for (i = 0; i < n_threads; i++) {
154 thread = g_thread_create ((GThreadFunc) run_thread, test1, TRUE, NULL);
155 g_array_append_val (test_threads, thread);
157 thread = g_thread_create ((GThreadFunc) run_thread, test2, TRUE, NULL);
158 g_array_append_val (test_threads, thread);
164 //g_print ("\nstopping\n");
166 /* join all threads */
167 for (i = 0; i < 2 * n_threads; i++) {
170 thread = g_array_index (test_threads, GThread *, i);
171 g_thread_join (thread);
174 //g_print ("stopped\n");
176 testResultXml("objects");
177 #endif /* EMULATOR */