+ if (g_test_verbose())
+ g_print ("test positional printf formats (not supported):");
+ string = g_strdup_printf ("%.*s%s", 5, "a", "b");
+ tmp_string = g_strdup_printf ("%2$*1$s", 5, "c");
+ if (g_test_verbose())
+ g_print ("%s%s\n", string, tmp_string);
+ g_free (tmp_string);
+ g_free (string);
+
+#define REF_INVALID1 "Wed Dec 19 17:20:20 GMT 2007"
+#define REF_INVALID2 "1980-02-22T10:36:00Zulu"
+#define REF_SEC_UTC 320063760
+#define REF_STR_UTC "1980-02-22T10:36:00Z"
+#define REF_STR_LOCAL "1980-02-22T13:36:00"
+#define REF_STR_CEST "1980-02-22T12:36:00+02:00"
+#define REF_STR_EST "19800222T053600-0500"
+#define REF_STR_NST "1980-02-22T07:06:00-03:30"
+#define REF_USEC_UTC 50000
+#define REF_STR_USEC_UTC "1980-02-22T10:36:00.050000Z"
+#define REF_STR_USEC_CEST "19800222T123600.050000000+0200"
+#define REF_STR_USEC_EST "1980-02-22T05:36:00,05-05:00"
+#define REF_STR_USEC_NST "19800222T070600,0500-0330"
+
+ if (g_test_verbose())
+ g_print ("checking g_time_val_from_iso8601...\n");
+ ref_date.tv_sec = REF_SEC_UTC;
+ ref_date.tv_usec = 0;
+ g_assert (g_time_val_from_iso8601 (REF_INVALID1, &date) == FALSE);
+ g_assert (g_time_val_from_iso8601 (REF_INVALID2, &date) == FALSE);
+ g_assert (g_time_val_from_iso8601 (REF_STR_UTC, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> UTC stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ /* predefine time zone */
+ tz = g_getenv("TZ");
+ g_setenv("TZ", "UTC-03:00", 1);
+ tzset();
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_LOCAL, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> LOCAL stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ /* revert back user defined time zone */
+ if (tz)
+ g_setenv("TZ", tz, TRUE);
+ else
+ g_unsetenv("TZ");
+ tzset();
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_CEST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> CEST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_EST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> EST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_NST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> NST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ ref_date.tv_usec = REF_USEC_UTC;
+ g_assert (g_time_val_from_iso8601 (REF_STR_USEC_UTC, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> UTC stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_USEC_CEST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> CEST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_USEC_EST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> EST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ g_assert (g_time_val_from_iso8601 (REF_STR_USEC_NST, &date) != FALSE);
+ if (g_test_verbose())
+ g_print ("\t=> NST stamp = %ld.%06ld (should be: %ld.%06ld) (%ld.%06ld off)\n",
+ date.tv_sec, date.tv_usec, ref_date.tv_sec, ref_date.tv_usec,
+ date.tv_sec - ref_date.tv_sec, date.tv_usec - ref_date.tv_usec);
+ g_assert (date.tv_sec == ref_date.tv_sec && date.tv_usec == ref_date.tv_usec);
+
+ if (g_test_verbose())
+ g_print ("checking g_time_val_to_iso8601...\n");
+ ref_date.tv_sec = REF_SEC_UTC;
+ ref_date.tv_usec = 0;
+ date_str = g_time_val_to_iso8601 (&ref_date);
+ g_assert (date_str != NULL);
+ if (g_test_verbose())
+ g_print ("\t=> date string = %s (should be: %s)\n", date_str, REF_STR_UTC);
+ g_assert (strcmp (date_str, REF_STR_UTC) == 0);
+ g_free (date_str);
+
+ ref_date.tv_usec = REF_USEC_UTC;
+ date_str = g_time_val_to_iso8601 (&ref_date);
+ g_assert (date_str != NULL);
+ if (g_test_verbose())
+ g_print ("\t=> date string = %s (should be: %s)\n", date_str, REF_STR_USEC_UTC);
+ g_assert (strcmp (date_str, REF_STR_USEC_UTC) == 0);
+ g_free (date_str);
+
+ if (g_test_verbose())
+ g_print ("checking g_ascii_strcasecmp...");
+ g_assert (g_ascii_strcasecmp ("FroboZZ", "frobozz") == 0);
+ g_assert (g_ascii_strcasecmp ("frobozz", "frobozz") == 0);
+ g_assert (g_ascii_strcasecmp ("frobozz", "FROBOZZ") == 0);
+ g_assert (g_ascii_strcasecmp ("FROBOZZ", "froboz") > 0);
+ g_assert (g_ascii_strcasecmp ("", "") == 0);
+ g_assert (g_ascii_strcasecmp ("!#%&/()", "!#%&/()") == 0);
+ g_assert (g_ascii_strcasecmp ("a", "b") < 0);
+ g_assert (g_ascii_strcasecmp ("a", "B") < 0);
+ g_assert (g_ascii_strcasecmp ("A", "b") < 0);
+ g_assert (g_ascii_strcasecmp ("A", "B") < 0);
+ g_assert (g_ascii_strcasecmp ("b", "a") > 0);
+ g_assert (g_ascii_strcasecmp ("b", "A") > 0);
+ g_assert (g_ascii_strcasecmp ("B", "a") > 0);
+ g_assert (g_ascii_strcasecmp ("B", "A") > 0);
+
+ if (g_test_verbose())
+ g_print ("checking g_strdup...\n");
+ g_assert (g_strdup (NULL) == NULL);
+ string = g_strdup (GLIB_TEST_STRING);
+ g_assert (string != NULL);
+ g_assert (strcmp(string, GLIB_TEST_STRING) == 0);
+ g_free (string);
+
+ if (g_test_verbose())
+ g_print ("checking g_strconcat...\n");
+ string = g_strconcat (GLIB_TEST_STRING, NULL);
+ g_assert (string != NULL);
+ g_assert (strcmp (string, GLIB_TEST_STRING) == 0);
+ g_free (string);
+ string = g_strconcat (GLIB_TEST_STRING, GLIB_TEST_STRING,
+ GLIB_TEST_STRING, NULL);
+ g_assert (string != NULL);
+ g_assert (strcmp (string, GLIB_TEST_STRING GLIB_TEST_STRING
+ GLIB_TEST_STRING) == 0);
+ g_free (string);
+
+ if (g_test_verbose())
+ g_print ("checking g_strlcpy/g_strlcat...");
+ /* The following is a torture test for strlcpy/strlcat, with lots of
+ * checking; normal users wouldn't use them this way!
+ */
+ string = g_malloc (6);
+ *(string + 5) = 'Z'; /* guard value, shouldn't change during test */
+ *string = 'q';
+ g_assert (g_strlcpy(string, "" , 5) == 0);
+ g_assert ( *string == '\0' );
+ *string = 'q';
+ g_assert (g_strlcpy(string, "abc" , 5) == 3);
+ g_assert ( *(string + 3) == '\0' );
+ g_assert (g_str_equal(string, "abc"));
+ g_assert (g_strlcpy(string, "abcd" , 5) == 4);
+ g_assert ( *(string + 4) == '\0' );
+ g_assert ( *(string + 5) == 'Z' );
+ g_assert (g_str_equal(string, "abcd"));
+ g_assert (g_strlcpy(string, "abcde" , 5) == 5);
+ g_assert ( *(string + 4) == '\0' );
+ g_assert ( *(string + 5) == 'Z' );
+ g_assert (g_str_equal(string, "abcd"));
+ g_assert (g_strlcpy(string, "abcdef" , 5) == 6);
+ g_assert ( *(string + 4) == '\0' );
+ g_assert ( *(string + 5) == 'Z' );
+ g_assert (g_str_equal(string, "abcd"));
+ *string = 'Y';
+ *(string + 1)= '\0';
+ g_assert (g_strlcpy(string, "Hello" , 0) == 5);
+ g_assert (*string == 'Y');
+ *string = '\0';
+ g_assert (g_strlcat(string, "123" , 5) == 3);
+ g_assert ( *(string + 3) == '\0' );
+ g_assert (g_str_equal(string, "123"));
+ g_assert (g_strlcat(string, "" , 5) == 3);
+ g_assert ( *(string + 3) == '\0' );
+ g_assert (g_str_equal(string, "123"));
+ g_assert (g_strlcat(string, "4", 5) == 4);
+ g_assert (g_str_equal(string, "1234"));
+ g_assert (g_strlcat(string, "5", 5) == 5);
+ g_assert ( *(string + 4) == '\0' );
+ g_assert (g_str_equal(string, "1234"));
+ g_assert ( *(string + 5) == 'Z' );
+ *string = 'Y';
+ *(string + 1)= '\0';
+ g_assert (g_strlcat(string, "123" , 0) == 3);
+ g_assert (*string == 'Y');
+
+ /* A few more tests, demonstrating more "normal" use */
+ g_assert (g_strlcpy(string, "hi", 5) == 2);
+ g_assert (g_str_equal(string, "hi"));
+ g_assert (g_strlcat(string, "t", 5) == 3);
+ g_assert (g_str_equal(string, "hit"));
+ g_free(string);
+
+ if (g_test_verbose())
+ g_print ("checking g_strdup_printf...\n");
+ string = g_strdup_printf ("%05d %-5s", 21, "test");
+ g_assert (string != NULL);
+ g_assert (strcmp(string, "00021 test ") == 0);
+ g_free (string);