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

📄 t-scanf.c

📁 a very popular packet of cryptography tools,it encloses the most common used algorithm and protocols
💻 C
📖 第 1 页 / 共 4 页
字号:
            else              got_ret = (*fun) (data[i].input, fmt, got, &got_upto);            break;          case 2:          case 3:            got_d = -999L;            if (ignore)              got_ret = (*fun) (data[i].input, fmt, &got_upto, NULL);            else              got_ret = (*fun) (data[i].input, fmt, &got_d, &got_upto);            mpf_set_d (got, got_d);            break;          default:            ASSERT_ALWAYS (0);            break;          }          MPF_CHECK_FORMAT (got);          if (got_ret != want_ret)            {              printf ("%s wrong return value\n", name);              error = 1;            }          if (want_ret == 1 && mpf_cmp (want, got) != 0)            {              printf ("%s wrong result\n", name);              error = 1;            }          if (got_upto != want_upto)            {              printf ("%s wrong upto\n", name);              error = 1;            }          if (got_ftell != -1 && want_ftell != -1 && got_ftell != want_ftell)            {              printf ("%s wrong ftell\n", name);              error = 1;            }          if (error)            {              printf    ("  fmt   \"%s\"\n", data[i].fmt);              printf    ("  input \"%s\"\n", data[i].input);              printf    ("  ret   want=%d\n", want_ret);              printf    ("        got =%d\n", got_ret);              mpf_trace ("  value want", want);              mpf_trace ("        got ", got);              printf    ("  upto  want=%d\n", want_upto);              printf    ("        got =%d\n", got_upto);              if (got_ftell != -1)                {                  printf    ("  ftell want =%ld\n", want_ftell);                  printf    ("        got  =%ld\n", got_ftell);                }              abort ();            }        }    }  mpf_clear (got);  mpf_clear (want);}voidcheck_n (void){  int    ret;  /* %n suppressed */  {    int n = 123;    gmp_sscanf ("   ", " %*n", &n);    ASSERT_ALWAYS (n == 123);  }  {    int n = 123;    fromstring_gmp_fscanf ("   ", " %*n", &n);    ASSERT_ALWAYS (n == 123);  }#define CHECK_N(type, string)                           \  do {                                                  \    type  x[2];                                         \    char  fmt[128];                                     \    int   ret;                                          \                                                        \    x[0] = ~ (type) 0;                                  \    x[1] = ~ (type) 0;                                  \    sprintf (fmt, "abc%%%sn", string);                  \    ret = gmp_sscanf ("abc", fmt, &x[0]);               \                                                        \    ASSERT_ALWAYS (ret == 0);                           \                                                        \    /* should write whole of x[0] and none of x[1] */   \    ASSERT_ALWAYS (x[0] == 3);                          \    ASSERT_ALWAYS (x[1] == (type) ~ (type) 0);		\                                                        \  } while (0)  CHECK_N (char,      "hh");  CHECK_N (long,      "l");#if HAVE_LONG_LONG  CHECK_N (long long, "L");#endif#if HAVE_INTMAX_T  CHECK_N (intmax_t,  "j");#endif#if HAVE_PTRDIFF_T  CHECK_N (ptrdiff_t, "t");#endif  CHECK_N (short,     "h");  CHECK_N (size_t,    "z");  /* %Zn */  {    mpz_t  x[2];    mpz_init_set_si (x[0], -987L);    mpz_init_set_si (x[1],  654L);    ret = gmp_sscanf ("xyz   ", "xyz%Zn", x[0]);    MPZ_CHECK_FORMAT (x[0]);    MPZ_CHECK_FORMAT (x[1]);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpz_cmp_ui (x[0], 3L) == 0);    ASSERT_ALWAYS (mpz_cmp_ui (x[1], 654L) == 0);    mpz_clear (x[0]);    mpz_clear (x[1]);  }  {    mpz_t  x;    mpz_init (x);    ret = fromstring_gmp_fscanf ("xyz   ", "xyz%Zn", x);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpz_cmp_ui (x, 3L) == 0);    mpz_clear (x);  }  /* %Qn */  {    mpq_t  x[2];    mpq_init (x[0]);    mpq_init (x[1]);    mpq_set_ui (x[0], -987L, 654L);    mpq_set_ui (x[1], 4115L, 226L);    ret = gmp_sscanf ("xyz   ", "xyz%Qn", x[0]);    MPQ_CHECK_FORMAT (x[0]);    MPQ_CHECK_FORMAT (x[1]);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpq_cmp_ui (x[0], 3L, 1L) == 0);    ASSERT_ALWAYS (mpq_cmp_ui (x[1], 4115L, 226L) == 0);    mpq_clear (x[0]);    mpq_clear (x[1]);  }  {    mpq_t  x;    mpq_init (x);    ret = fromstring_gmp_fscanf ("xyz   ", "xyz%Qn", x);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpq_cmp_ui (x, 3L, 1L) == 0);    mpq_clear (x);  }  /* %Fn */  {    mpf_t  x[2];    mpf_init (x[0]);    mpf_init (x[1]);    mpf_set_ui (x[0], -987L);    mpf_set_ui (x[1],  654L);    ret = gmp_sscanf ("xyz   ", "xyz%Fn", x[0]);    MPF_CHECK_FORMAT (x[0]);    MPF_CHECK_FORMAT (x[1]);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpf_cmp_ui (x[0], 3L) == 0);    ASSERT_ALWAYS (mpf_cmp_ui (x[1], 654L) == 0);    mpf_clear (x[0]);    mpf_clear (x[1]);  }  {    mpf_t  x;    mpf_init (x);    ret = fromstring_gmp_fscanf ("xyz   ", "xyz%Fn", x);    ASSERT_ALWAYS (ret == 0);    ASSERT_ALWAYS (mpf_cmp_ui (x, 3L) == 0);    mpf_clear (x);  }}voidcheck_misc (void){  int  ret, cmp;  {    int  a=9, b=8, c=7, n=66;    mpz_t  z;    mpz_init (z);    ret = gmp_sscanf ("1 2 3 4", "%d %d %d %Zd%n",                      &a, &b, &c, z, &n);    ASSERT_ALWAYS (ret == 4);    ASSERT_ALWAYS (a == 1);    ASSERT_ALWAYS (b == 2);    ASSERT_ALWAYS (c == 3);    ASSERT_ALWAYS (n == 7);    ASSERT_ALWAYS (mpz_cmp_ui (z, 4L) == 0);    mpz_clear (z);  }  {    int  a=9, b=8, c=7, n=66;    mpz_t  z;    mpz_init (z);    ret = fromstring_gmp_fscanf ("1 2 3 4", "%d %d %d %Zd%n",                                 &a, &b, &c, z, &n);    ASSERT_ALWAYS (ret == 4);    ASSERT_ALWAYS (a == 1);    ASSERT_ALWAYS (b == 2);    ASSERT_ALWAYS (c == 3);    ASSERT_ALWAYS (mpz_cmp_ui (z, 4L) == 0);    ASSERT_ALWAYS (n == 7);    ASSERT_ALWAYS (got_ftell == 7);    mpz_clear (z);  }  {    int  a=9, n=8;    mpz_t  z;    mpz_init (z);    ret = gmp_sscanf ("1 2 3 4", "%d %*d %*d %Zd%n", &a, z, &n);    ASSERT_ALWAYS (ret == 2);    ASSERT_ALWAYS (a == 1);    ASSERT_ALWAYS (mpz_cmp_ui (z, 4L) == 0);    ASSERT_ALWAYS (n == 7);    mpz_clear (z);  }  {    int  a=9, n=8;    mpz_t  z;    mpz_init (z);    ret = fromstring_gmp_fscanf ("1 2 3 4", "%d %*d %*d %Zd%n",                                 &a, z, &n);    ASSERT_ALWAYS (ret == 2);    ASSERT_ALWAYS (a == 1);    ASSERT_ALWAYS (mpz_cmp_ui (z, 4L) == 0);    ASSERT_ALWAYS (n == 7);    ASSERT_ALWAYS (got_ftell == 7);    mpz_clear (z);  }  /* EOF for no matching */  {    char buf[128];    ret = gmp_sscanf ("   ", "%s", buf);    ASSERT_ALWAYS (ret == EOF);    ret = fromstring_gmp_fscanf ("   ", "%s", buf);    ASSERT_ALWAYS (ret == EOF);    if (option_libc_scanf)      {        ret = sscanf ("   ", "%s", buf);        ASSERT_ALWAYS (ret == EOF);        ret = fun_fscanf ("   ", "%s", buf, NULL);        ASSERT_ALWAYS (ret == EOF);      }  }  /* suppressed field, then eof */  {    int  x;    if (test_sscanf_eof_ok ())      {        ret = gmp_sscanf ("123", "%*d%d", &x);        ASSERT_ALWAYS (ret == EOF);      }    ret = fromstring_gmp_fscanf ("123", "%*d%d", &x);    ASSERT_ALWAYS (ret == EOF);    if (option_libc_scanf)      {        ret = sscanf ("123", "%*d%d", &x);        ASSERT_ALWAYS (ret == EOF);        ret = fun_fscanf ("123", "%*d%d", &x, NULL);        ASSERT_ALWAYS (ret == EOF);      }  }  {    mpz_t  x;    mpz_init (x);    ret = gmp_sscanf ("123", "%*Zd%Zd", x);    ASSERT_ALWAYS (ret == EOF);    ret = fromstring_gmp_fscanf ("123", "%*Zd%Zd", x);    ASSERT_ALWAYS (ret == EOF);    mpz_clear (x);  }  /* %[...], glibc only */#ifdef __GLIBC__  {    char  buf[128];    int   n = -1;    buf[0] = '\0';    ret = gmp_sscanf ("abcdefgh", "%[a-d]ef%n", buf, &n);    ASSERT_ALWAYS (ret == 1);    cmp = strcmp (buf, "abcd");    ASSERT_ALWAYS (cmp == 0);    ASSERT_ALWAYS (n == 6);  }  {    char  buf[128];    int   n = -1;    buf[0] = '\0';    ret = gmp_sscanf ("xyza", "%[^a]a%n", buf, &n);    ASSERT_ALWAYS (ret == 1);    cmp = strcmp (buf, "xyz");    ASSERT_ALWAYS (cmp == 0);    ASSERT_ALWAYS (n == 4);  }  {    char  buf[128];    int   n = -1;    buf[0] = '\0';    ret = gmp_sscanf ("ab]ab]", "%[]ab]%n", buf, &n);    ASSERT_ALWAYS (ret == 1);    cmp = strcmp (buf, "ab]ab]");    ASSERT_ALWAYS (cmp == 0);    ASSERT_ALWAYS (n == 6);  }  {    char  buf[128];    int   n = -1;    buf[0] = '\0';    ret = gmp_sscanf ("xyzb", "%[^]ab]b%n", buf, &n);    ASSERT_ALWAYS (ret == 1);    cmp = strcmp (buf, "xyz");    ASSERT_ALWAYS (cmp == 0);    ASSERT_ALWAYS (n == 4);  }#endif  /* %zd etc won't be accepted by sscanf on old systems, and running     something to see if they work might be bad, so only try it on glibc,     and only on a new enough version (glibc 2.0 doesn't have %zd) */#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 0)  {    mpz_t   z;    size_t  s = -1;    mpz_init (z);    ret = gmp_sscanf ("456 789", "%zd %Zd", &s, z);    ASSERT_ALWAYS (ret == 2);    ASSERT_ALWAYS (s == 456);    ASSERT_ALWAYS (mpz_cmp_ui (z, 789L) == 0);    mpz_clear (z);  }  {    mpz_t      z;    ptrdiff_t  d = -1;    mpz_init (z);    ret = gmp_sscanf ("456 789", "%td %Zd", &d, z);    ASSERT_ALWAYS (ret == 2);    ASSERT_ALWAYS (d == 456);    ASSERT_ALWAYS (mpz_cmp_ui (z, 789L) == 0);    mpz_clear (z);  }  {    mpz_t      z;    long long  ll = -1;    mpz_init (z);    ret = gmp_sscanf ("456 789", "%Ld %Zd", &ll, z);    ASSERT_ALWAYS (ret == 2);    ASSERT_ALWAYS (ll == 456);    ASSERT_ALWAYS (mpz_cmp_ui (z, 789L) == 0);    mpz_clear (z);  }#endif}intmain (int argc, char *argv[]){  if (argc > 1 && strcmp (argv[1], "-s") == 0)    option_libc_scanf = 1;  tests_start ();  check_z ();  check_q ();  check_f ();  check_n ();  check_misc ();  unlink (TEMPFILE);  tests_end ();  exit (0);}

⌨️ 快捷键说明

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