+ /* basic testing */
+ timer = g_timer_new ();
+ g_timer_start (timer);
+ elapsed = g_timer_elapsed (timer, NULL);
+ g_timer_stop (timer);
+ g_assert_cmpfloat (elapsed, <=, g_timer_elapsed (timer, NULL));
+ g_timer_destroy (timer);
+
+ if (g_test_slow())
+ {
+ if (g_test_verbose())
+ g_print ("checking timers...\n");
+ timer = g_timer_new ();
+ if (g_test_verbose())
+ g_print (" spinning for 3 seconds...\n");
+ g_timer_start (timer);
+ while (g_timer_elapsed (timer, NULL) < 3)
+ ;
+ g_timer_stop (timer);
+ g_timer_destroy (timer);
+ if (g_test_verbose())
+ g_print ("ok\n");
+ }
+
+ if (g_test_slow())
+ {
+ gulong elapsed_usecs;
+ if (g_test_verbose())
+ g_print ("checking g_timer_continue...\n");
+ timer2 = g_timer_new ();
+ if (g_test_verbose())
+ g_print ("\trun for 1 second...\n");
+ timer = g_timer_new();
+ g_usleep (G_USEC_PER_SEC); /* run timer for 1 second */
+ g_timer_stop (timer);
+ if (g_test_verbose())
+ g_print ("\tstop for 1 second...\n");
+ g_usleep (G_USEC_PER_SEC); /* wait for 1 second */
+ if (g_test_verbose())
+ g_print ("\trun for 2 seconds...\n");
+ g_timer_continue (timer);
+ g_usleep (2 * G_USEC_PER_SEC); /* run timer for 2 seconds */
+ g_timer_stop(timer);
+ if (g_test_verbose())
+ g_print ("\tstop for 1.5 seconds...\n");
+ g_usleep ((3 * G_USEC_PER_SEC) / 2); /* wait for 1.5 seconds */
+ if (g_test_verbose())
+ g_print ("\trun for 0.2 seconds...\n");
+ g_timer_continue (timer);
+ g_usleep (G_USEC_PER_SEC / 5); /* run timer for 0.2 seconds */
+ g_timer_stop (timer);
+ if (g_test_verbose())
+ g_print ("\tstop for 4 seconds...\n");
+ g_usleep (4 * G_USEC_PER_SEC); /* wait for 4 seconds */
+ if (g_test_verbose())
+ g_print ("\trun for 5.8 seconds...\n");
+ g_timer_continue (timer);
+ g_usleep ((29 * G_USEC_PER_SEC) / 5); /* run timer for 5.8 seconds */
+ g_timer_stop(timer);
+ elapsed = g_timer_elapsed (timer, &elapsed_usecs);
+ if (g_test_verbose())
+ g_print ("\t=> timer = %.6f = %d.%06ld (should be: 9.000000) (%.6f off)\n", elapsed, (int) elapsed, elapsed_usecs, ABS (elapsed - 9.));
+ g_assert_cmpfloat (elapsed, >, 8.8);
+ g_assert_cmpfloat (elapsed, <, 9.2);
+ if (g_test_verbose())
+ g_print ("g_timer_continue ... ok\n\n");
+ g_timer_stop (timer2);
+ elapsed = g_timer_elapsed (timer2, &elapsed_usecs);
+ if (g_test_verbose())
+ g_print ("\t=> timer2 = %.6f = %d.%06ld (should be: %.6f) (%.6f off)\n\n", elapsed, (int) elapsed, elapsed_usecs, 9.+6.5, ABS (elapsed - (9.+6.5)));
+ g_assert_cmpfloat (elapsed, >, 8.8 + 6.5);
+ g_assert_cmpfloat (elapsed, <, 9.2 + 6.5);
+ if (g_test_verbose())
+ g_print ("timer2 ... ok\n\n");
+ g_timer_destroy (timer);
+ g_timer_destroy (timer2);
+ }
+}
+
+static void
+type_sizes (void)
+{
+ guint16 gu16t1 = 0x44afU, gu16t2 = 0xaf44U;
+ guint32 gu32t1 = 0x02a7f109U, gu32t2 = 0x09f1a702U;
+ guint64 gu64t1 = G_GINT64_CONSTANT(0x1d636b02300a7aa7U),
+ gu64t2 = G_GINT64_CONSTANT(0xa77a0a30026b631dU);
+ /* type sizes */
+ g_assert_cmpint (sizeof (gint8), ==, 1);
+ g_assert_cmpint (sizeof (gint16), ==, 2);
+ g_assert_cmpint (sizeof (gint32), ==, 4);
+ g_assert_cmpint (sizeof (gint64), ==, 8);
+ /* endian macros */
+ if (g_test_verbose())
+ g_print ("checking endian macros (host is %s)...\n",
+ G_BYTE_ORDER == G_BIG_ENDIAN ? "big endian" : "little endian");
+ g_assert (GUINT16_SWAP_LE_BE (gu16t1) == gu16t2);
+ g_assert (GUINT32_SWAP_LE_BE (gu32t1) == gu32t2);
+ g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2);
+}
+
+static void
+test_info (void)
+{
+ const gchar *un, *rn, *hn;
+ const gchar *tmpdir, *homedir, *userdatadir, *uconfdir, *ucachedir;
+ const gchar *uddesktop, *udddocs, *uddpubshare, *uruntimedir;
+ gchar **sv, *cwd, *sdatadirs, *sconfdirs, *langnames;
+ const gchar *charset;
+ gboolean charset_is_utf8;
+ if (g_test_verbose())
+ g_print ("TestGLib v%u.%u.%u (i:%u b:%u)\n",
+ glib_major_version,
+ glib_minor_version,
+ glib_micro_version,
+ glib_interface_age,
+ glib_binary_age);
+
+ cwd = g_get_current_dir ();
+ un = g_get_user_name();
+ rn = g_get_real_name();
+ hn = g_get_host_name();
+ if (g_test_verbose())
+ {
+ g_print ("cwd: %s\n", cwd);
+ g_print ("user: %s\n", un);
+ g_print ("real: %s\n", rn);
+ g_print ("host: %s\n", hn);
+ }
+ g_free (cwd);
+
+ /* reload, just for fun */
+ g_reload_user_special_dirs_cache ();
+ g_reload_user_special_dirs_cache ();
+
+ tmpdir = g_get_tmp_dir();
+ g_assert (tmpdir != NULL);
+ homedir = g_get_home_dir ();
+ g_assert (homedir != NULL);
+ userdatadir = g_get_user_data_dir ();
+ g_assert (userdatadir != NULL);
+ uconfdir = g_get_user_config_dir ();
+ g_assert (uconfdir != NULL);
+ ucachedir = g_get_user_cache_dir ();
+ g_assert (ucachedir != NULL);
+
+ uddesktop = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
+ g_assert (uddesktop != NULL);
+ udddocs = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ uddpubshare = g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE);
+ uruntimedir = g_get_user_runtime_dir ();
+ g_assert (uruntimedir != NULL);
+
+ sv = (gchar **) g_get_system_data_dirs ();
+ sdatadirs = g_strjoinv (G_SEARCHPATH_SEPARATOR_S, sv);
+ sv = (gchar **) g_get_system_config_dirs ();
+ sconfdirs = g_strjoinv (G_SEARCHPATH_SEPARATOR_S, sv);
+ sv = (gchar **) g_get_language_names ();
+ langnames = g_strjoinv (":", sv);
+
+ if (g_test_verbose())
+ {
+ g_print ("tmp-dir: %s\n", tmpdir);
+ g_print ("home: %s\n", homedir);
+ g_print ("user_data: %s\n", userdatadir);
+ g_print ("user_config: %s\n", uconfdir);
+ g_print ("user_cache: %s\n", ucachedir);
+ g_print ("user_runtime: %s\n", uruntimedir);
+ g_print ("system_data: %s\n", sdatadirs);
+ g_print ("system_config: %s\n", sconfdirs);
+ g_print ("languages: %s\n", langnames);
+ g_print ("user_special[DESKTOP]: %s\n", uddesktop);
+ g_print ("user_special[DOCUMENTS]: %s\n", udddocs);
+ g_print ("user_special[PUBLIC_SHARE]: %s\n", uddpubshare);
+ }
+ g_free (sdatadirs);
+ g_free (sconfdirs);
+ g_free (langnames);
+
+ charset_is_utf8 = g_get_charset ((const char**)&charset);
+
+ if (g_test_verbose())
+ {
+ if (charset_is_utf8)
+ g_print ("current charset is UTF-8: %s\n", charset);
+ else
+ g_print ("current charset is not UTF-8: %s\n", charset);
+ }
+
+ if (g_test_verbose())
+ {
+#ifdef G_PLATFORM_WIN32
+ g_print ("current locale: %s\n", g_win32_getlocale ());
+
+ g_print ("found more.com as %s\n", g_find_program_in_path ("more.com"));
+ g_print ("found regedit as %s\n", g_find_program_in_path ("regedit"));
+
+ g_print ("a Win32 error message: %s\n", g_win32_error_message (2));
+#endif
+ }
+}
+
+static void
+test_paths (void)
+{