⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strfuncs.c

📁 this is a glib for c language
💻 C
📖 第 1 页 / 共 3 页
字号:
  strv_check (g_strsplit_set (",x,y,z", ",", 2), "", "x,y,z", NULL);  strv_check (g_strsplit_set (",x,y,z,", ",", 2), "", "x,y,z,", NULL);  strv_check (g_strsplit_set (",,x,,y,,z,,", ",", 2), "", ",x,,y,,z,,", NULL);    strv_check (g_strsplit_set (",,x,.y,..z,,", ",.", 3), "", "", "x,.y,..z,,", NULL);}static voidtest_strv_length (void){  guint l;  if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR))    {      l = g_strv_length (NULL);    }  g_test_trap_assert_failed ();  l = g_strv_length (g_strsplit ("1,2,3,4", ",", -1));  g_assert_cmpuint (l, ==, 4);}static char *locales[] = {"sv_SE", "en_US", "fa_IR", "C", "ru_RU"};voidcheck_strtod_string (gchar    *number,		     double    res,		     gboolean  check_end,		     gint      correct_len){  double d;  gint l;  gchar *dummy;  /* we try a copy of number, with some free space for malloc before that.    * This is supposed to smash the some wrong pointer calculations. */  dummy = g_malloc (100000);  number = g_strdup (number);  g_free (dummy);  for (l = 0; l < G_N_ELEMENTS (locales); l++)    {      gboolean ok;      gchar *end = "(unset)";      setlocale (LC_NUMERIC, locales[l]);      d = g_ascii_strtod (number, &end);      ok = isnan (res) ? isnan (d) : (d == res);      if (!ok)	{	  g_error ("g_ascii_strtod on \"%s\" for locale %s failed\n" \                   "expected %f (nan %d) actual %f (nan %d)\n", 		   number, locales[l],		   res, isnan (res),		   d, isnan (d));	}      ok = (end - number) == (check_end ? correct_len : strlen (number));      if (!ok) {	if (end == NULL)	  g_error ("g_ascii_strtod on \"%s\" for locale %s endptr was NULL\n",		   number, locales[l]);	else if (end >= number && end <= number + strlen (number))	  g_error ("g_ascii_strtod on \"%s\" for locale %s endptr was wrong, leftover: \"%s\"\n",		   number, locales[l], end);	else	  g_error ("g_ascii_strtod on \"%s\" for locale %s endptr was REALLY wrong (number=%p, end=%p)\n",		   number, locales[l], number, end);      }    }  g_free (number);}static voidcheck_strtod_number (gdouble num, gchar *fmt, gchar *str){  int l;  gchar buf[G_ASCII_DTOSTR_BUF_SIZE];  for (l = 0; l < G_N_ELEMENTS (locales); l++)    {      g_ascii_formatd (buf, G_ASCII_DTOSTR_BUF_SIZE, fmt, num);      g_assert_cmpstr (buf, ==, str);    }}static voidtest_strtod (void){  gdouble d, our_nan, our_inf;  char buffer[G_ASCII_DTOSTR_BUF_SIZE];#ifdef NAN  our_nan = NAN;#else  /* Do this before any call to setlocale.  */  our_nan = atof ("NaN");#endif  g_assert (isnan (our_nan));#ifdef INFINITY  our_inf = INFINITY;#else  our_inf = atof ("Infinity");#endif  g_assert (our_inf > 1 && our_inf == our_inf / 2);  check_strtod_string ("123.123", 123.123, FALSE, 0);  check_strtod_string ("123.123e2", 123.123e2, FALSE, 0);  check_strtod_string ("123.123e-2", 123.123e-2, FALSE, 0);  check_strtod_string ("-123.123", -123.123, FALSE, 0);  check_strtod_string ("-123.123e2", -123.123e2, FALSE, 0);  check_strtod_string ("-123.123e-2", -123.123e-2, FALSE, 0);  check_strtod_string ("5.4", 5.4, TRUE, 3);  check_strtod_string ("5.4,5.5", 5.4, TRUE, 3);  check_strtod_string ("5,4", 5.0, TRUE, 1);  /* the following are for #156421 */  check_strtod_string ("1e1", 1e1, FALSE, 0);   check_strtod_string ("NAN", our_nan, FALSE, 0);  check_strtod_string ("-nan", -our_nan, FALSE, 0);  check_strtod_string ("INF", our_inf, FALSE, 0);  check_strtod_string ("-infinity", -our_inf, FALSE, 0);  check_strtod_string ("-.75,0", -0.75, TRUE, 4);    d = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0;  g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL));  d = -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0;  g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL));    d = pow (2.0, -1024.1);  g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL));    d = -pow (2.0, -1024.1);  g_assert (d == g_ascii_strtod (g_ascii_dtostr (buffer, sizeof (buffer), d), NULL));  /* for #343899 */  check_strtod_string (" 0.75", 0.75, FALSE, 0);  check_strtod_string (" +0.75", 0.75, FALSE, 0);  check_strtod_string (" -0.75", -0.75, FALSE, 0);  check_strtod_string ("\f0.75", 0.75, FALSE, 0);  check_strtod_string ("\n0.75", 0.75, FALSE, 0);  check_strtod_string ("\r0.75", 0.75, FALSE, 0);  check_strtod_string ("\t0.75", 0.75, FALSE, 0);#if 0  /* g_ascii_isspace() returns FALSE for vertical tab, see #59388 */  check_strtod_string ("\v0.75", 0.75, FALSE, 0);#endif  /* for #343899 */  check_strtod_number (0.75, "%0.2f", "0.75");  check_strtod_number (0.75, "%5.2f", " 0.75");  check_strtod_number (-0.75, "%0.2f", "-0.75");  check_strtod_number (-0.75, "%5.2f", "-0.75");  check_strtod_number (1e99, "%.0e", "1e+99");}static voidcheck_uint64 (const gchar *str,	      const gchar *end,	      gint         base,	      guint64      result,	      gint         error){  guint64 actual;  gchar *endptr = NULL;  gint err;  errno = 0;  actual = g_ascii_strtoull (str, &endptr, base);  err = errno;  g_assert (actual == result);  g_assert_cmpstr (end, ==, endptr);  g_assert (err == error);}static voidcheck_int64 (const gchar *str,	     const gchar *end,	     gint         base,	     gint64       result,	     gint         error){  gint64 actual;  gchar *endptr = NULL;  gint err;  errno = 0;  actual = g_ascii_strtoll (str, &endptr, base);  err = errno;  g_assert (actual == result);  g_assert_cmpstr (end, ==, endptr);  g_assert (err == error);}static voidtest_strtoll (void){  check_uint64 ("0", "", 10, 0, 0);  check_uint64 ("+0", "", 10, 0, 0);  check_uint64 ("-0", "", 10, 0, 0);  check_uint64 ("18446744073709551615", "", 10, G_MAXUINT64, 0);  check_uint64 ("18446744073709551616", "", 10, G_MAXUINT64, ERANGE);  check_uint64 ("20xyz", "xyz", 10, 20, 0);  check_uint64 ("-1", "", 10, G_MAXUINT64, 0);  check_int64 ("0", "", 10, 0, 0);  check_int64 ("9223372036854775807", "", 10, G_MAXINT64, 0);  check_int64 ("9223372036854775808", "", 10, G_MAXINT64, ERANGE);  check_int64 ("-9223372036854775808", "", 10, G_MININT64, 0);  check_int64 ("-9223372036854775809", "", 10, G_MININT64, ERANGE);  check_int64 ("32768", "", 10, 32768, 0);  check_int64 ("-32768", "", 10, -32768, 0);  check_int64 ("001", "", 10, 1, 0);  check_int64 ("-001", "", 10, -1, 0);}static voidtest_bounds (void){  GMappedFile *file, *before, *after;  char buffer[4097];  char *tmp, *tmp2;  char **array;  char *string;  /* if we allocate the file between two others and then free those   * other two, then hopefully we end up with unmapped memory on either   * side.   */  before = g_mapped_file_new ("4096-random-bytes", TRUE, NULL);  /* quick workaround until #549783 can be fixed */  if (before == NULL)    return;  file = g_mapped_file_new ("4096-random-bytes", TRUE, NULL);  after = g_mapped_file_new ("4096-random-bytes", TRUE, NULL);  g_mapped_file_free (before);  g_mapped_file_free (after);  g_assert (file != NULL);  g_assert_cmpint (g_mapped_file_get_length (file), ==, 4096);  string = g_mapped_file_get_contents (file);  /* ensure they're all non-nul */  g_assert (memchr (string, '\0', 4096) == NULL);  /* test set 1: ensure that nothing goes past its maximum length, even in   *             light of a missing nul terminator.   *   * we try to test all of the 'n' functions here.   */  tmp = g_strndup (string, 4096);  g_assert_cmpint (strlen (tmp), ==, 4096);  g_free (tmp);  /* found no bugs in gnome, i hope :) */  g_assert (g_strstr_len (string, 4096, "BUGS") == NULL);  g_strstr_len (string, 4096, "B");  g_strstr_len (string, 4096, ".");  g_strstr_len (string, 4096, "");  g_strrstr_len (string, 4096, "BUGS");  g_strrstr_len (string, 4096, "B");  g_strrstr_len (string, 4096, ".");  g_strrstr_len (string, 4096, "");  g_ascii_strdown (string, 4096);  g_ascii_strdown (string, 4096);  g_ascii_strup (string, 4096);  g_ascii_strup (string, 4096);  g_ascii_strncasecmp (string, string, 4096);  tmp = g_markup_escape_text (string, 4096);  g_free (tmp);  /* test set 2: ensure that nothing reads even one byte past a '\0'.   */  g_assert_cmpint (string[4095], ==, '\n');  string[4095] = '\0';  tmp = g_strdup (string);  g_assert_cmpint (strlen (tmp), ==, 4095);  g_free (tmp);  tmp = g_strndup (string, 10000);  g_assert_cmpint (strlen (tmp), ==, 4095);  g_free (tmp);  g_stpcpy (buffer, string);  g_assert_cmpint (strlen (buffer), ==, 4095);  g_strstr_len (string, 10000, "BUGS");  g_strstr_len (string, 10000, "B");  g_strstr_len (string, 10000, ".");  g_strstr_len (string, 10000, "");  g_strrstr (string, "BUGS");  g_strrstr (string, "B");  g_strrstr (string, ".");  g_strrstr (string, "");  g_strrstr_len (string, 10000, "BUGS");  g_strrstr_len (string, 10000, "B");  g_strrstr_len (string, 10000, ".");  g_strrstr_len (string, 10000, "");  g_str_has_prefix (string, "this won't do very much...");  g_str_has_suffix (string, "but maybe this will...");  g_str_has_suffix (string, "HMMMM.");  g_str_has_suffix (string, "MMMM.");  g_str_has_suffix (string, "M.");  g_strlcpy (buffer, string, sizeof buffer);  g_assert_cmpint (strlen (buffer), ==, 4095);  g_strlcpy (buffer, string, sizeof buffer);  buffer[0] = '\0';  g_strlcat (buffer, string, sizeof buffer);  g_assert_cmpint (strlen (buffer), ==, 4095);  tmp = g_strdup_printf ("<%s>", string);  g_assert_cmpint (strlen (tmp), ==, 4095 + 2);  g_free (tmp);  g_ascii_strdown (string, -1);  g_ascii_strdown (string, -1);  g_ascii_strup (string, -1);  g_ascii_strup (string, -1);  g_ascii_strcasecmp (string, string);  g_ascii_strncasecmp (string, string, 10000);  g_strreverse (string);  g_strreverse (string);  g_strchug (string);  g_strchomp (string);  g_strstrip (string);  g_assert_cmpint (strlen (string), ==, 4095);  g_strdelimit (string, "M", 'N');  g_strcanon (string, " N.", ':');  g_assert_cmpint (strlen (string), ==, 4095);  array = g_strsplit (string, ".", -1);  tmp = g_strjoinv (".", array);  g_strfreev (array);  g_assert_cmpint (strlen (tmp), ==, 4095);  g_assert (memcmp (tmp, string, 4095) == 0);  g_free (tmp);  tmp = g_strconcat (string, string, string, NULL);  g_assert_cmpint (strlen (tmp), ==, 4095 * 3);  g_free (tmp);  tmp = g_strjoin ("!", string, string, NULL);  g_assert_cmpint (strlen (tmp), ==, 4095 + 1 + 4095);  g_free (tmp);  tmp = g_markup_escape_text (string, -1);  g_free (tmp);  tmp = g_markup_printf_escaped ("%s", string);  g_free (tmp);  tmp = g_strescape (string, NULL);  tmp2 = g_strcompress (tmp);  g_assert_cmpstr (string, ==, tmp2);  g_free (tmp2);  g_free (tmp);  g_mapped_file_free (file);}intmain (int   argc,      char *argv[]){  g_test_init (&argc, &argv, NULL);  g_test_add_func ("/strfuncs/test-is-to-digit", test_is_to_digit);  g_test_add_func ("/strfuncs/strdup", test_strdup);  g_test_add_func ("/strfuncs/strndup", test_strndup);  g_test_add_func ("/strfuncs/strdup-printf", test_strdup_printf);  g_test_add_func ("/strfuncs/strdupv", test_strdupv);  g_test_add_func ("/strfuncs/strnfill", test_strnfill);  g_test_add_func ("/strfuncs/strconcat", test_strconcat);  g_test_add_func ("/strfuncs/strjoin", test_strjoin);  g_test_add_func ("/strfuncs/strcanon", test_strcanon);  g_test_add_func ("/strfuncs/strcompress-strescape", test_strcompress_strescape);  g_test_add_func ("/strfuncs/ascii-strcasecmp", test_ascii_strcasecmp);  g_test_add_func ("/strfuncs/strchug", test_strchug);  g_test_add_func ("/strfuncs/strchomp", test_strchomp);  g_test_add_func ("/strfuncs/strreverse", test_strreverse);  g_test_add_func ("/strfuncs/strstr", test_strstr);  g_test_add_func ("/strfuncs/has-prefix", test_has_prefix);  g_test_add_func ("/strfuncs/has-suffix", test_has_suffix);  g_test_add_func ("/strfuncs/strsplit", test_strsplit);  g_test_add_func ("/strfuncs/strsplit-set", test_strsplit_set);  g_test_add_func ("/strfuncs/strv-length", test_strv_length);  g_test_add_func ("/strfuncs/strtod", test_strtod);  g_test_add_func ("/strfuncs/strtoull-strtoll", test_strtoll);  g_test_add_func ("/strfuncs/bounds-check", test_bounds);  return g_test_run();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -