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

📄 t-inp_str.c

📁 a very popular packet of cryptography tools,it encloses the most common used algorithm and protocols
💻 C
字号:
/* Test mpz_inp_str.Copyright 2001, 2002 Free Software Foundation, Inc.This file is part of the GNU MP Library.The GNU MP Library is free software; you can redistribute it and/or modifyit under the terms of the GNU Lesser General Public License as published bythe Free Software Foundation; either version 2.1 of the License, or (at youroption) any later version.The GNU MP Library is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General PublicLicense for more details.You should have received a copy of the GNU Lesser General Public Licensealong with the GNU MP Library; see the file COPYING.LIB.  If not, write tothe Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,MA 02111-1307, USA. */#include "config.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#if HAVE_UNISTD_H#include <unistd.h>		/* for unlink */#endif#include "gmp.h"#include "gmp-impl.h"#include "tests.h"#define FILENAME  "t-inp_str.tmp"voidcheck_data (void){  static const struct {    const char  *inp;    int         base;    const char  *want;    int         want_nread;  } data[] = {    { "0",   10, "0", 1 },    { "abc", 10, "0", 0 },    { "ghi", 16, "0", 0 },    {  "ff", 16,  "255", 2 },    { "-ff", 16, "-255", 3 },    {  "FF", 16,  "255", 2 },    { "-FF", 16, "-255", 3 },    { "z", 36, "35", 1 },    { "Z", 36, "35", 1 },    {  "0x0",    0,   "0", 3 },    {  "0x10",   0,  "16", 4 },    { "-0x0",    0,   "0", 4 },    { "-0x10",   0, "-16", 5 },    {  "00",   0,  "0", 2 },    {  "010",  0,  "8", 3 },    { "-00",   0,  "0", 3 },    { "-010",  0, "-8", 4 },    {  "0x",     0,   "0", 2 },    {  "0",      0,   "0", 1 },  };  mpz_t  got, want;  long   ftell_nread;  int    i, pre, post, j, got_nread, want_nread;  FILE   *fp;  mpz_init (got);  mpz_init (want);  for (i = 0; i < numberof (data); i++)    {      for (pre = 0; pre <= 3; pre++)        {          for (post = 0; post <= 2; post++)            {              mpz_set_str_or_abort (want, data[i].want, 0);              MPZ_CHECK_FORMAT (want);              /* create the file new each time to ensure its length is what                 we want */              fp = fopen (FILENAME, "w+");              ASSERT_ALWAYS (fp != NULL);              for (j = 0; j < pre; j++)                putc (' ', fp);              fputs (data[i].inp, fp);              for (j = 0; j < post; j++)                putc (' ', fp);              fflush (fp);              ASSERT_ALWAYS (! ferror(fp));              rewind (fp);              got_nread = mpz_inp_str (got, fp, data[i].base);              if (got_nread != 0)                {                  ftell_nread = ftell (fp);                  if (got_nread != ftell_nread)                    {                      printf ("mpz_inp_str nread wrong\n");                      printf ("  inp          \"%s\"\n", data[i].inp);                      printf ("  base         %d\n", data[i].base);                      printf ("  pre          %d\n", pre);                      printf ("  post         %d\n", post);                      printf ("  got_nread    %d\n", got_nread);                      printf ("  ftell_nread  %ld\n", ftell_nread);                      abort ();                    }                }              /* if data[i].inp is a whole string to read and there's no post                 whitespace then expect to have EOF */              if (post == 0 && data[i].want_nread == strlen(data[i].inp))                {                  int  c = getc(fp);                  if (c != EOF)                    {                      printf ("mpz_inp_str didn't read to EOF\n");                      printf ("  inp   \"%s\"\n", data[i].inp);                      printf ("  base  %d\n", data[i].base);                      printf ("  pre   %d\n", pre);                      printf ("  post  %d\n", post);                      printf ("  c     '%c' %#x\n", c, c);                      abort ();                    }                }              /* only expect "pre" included in the count when non-zero */              want_nread = data[i].want_nread;              if (want_nread != 0)                want_nread += pre;              if (got_nread != want_nread)                {                  printf ("mpz_inp_str nread wrong\n");                  printf ("  inp         \"%s\"\n", data[i].inp);                  printf ("  base        %d\n", data[i].base);                  printf ("  pre         %d\n", pre);                  printf ("  post        %d\n", post);                  printf ("  got_nread   %d\n", got_nread);                  printf ("  want_nread  %d\n", want_nread);                  abort ();                }              MPZ_CHECK_FORMAT (got);                    if (mpz_cmp (got, want) != 0)                {                  printf ("mpz_inp_str wrong result\n");                  printf ("  inp   \"%s\"\n", data[i].inp);                  printf ("  base  %d\n", data[i].base);                  mpz_trace ("  got ",  got);                  mpz_trace ("  want", want);                  abort ();                }              ASSERT_ALWAYS (fclose (fp) == 0);            }        }    }  mpz_clear (got);  mpz_clear (want);}intmain (void){  tests_start ();  check_data ();  unlink (FILENAME);  tests_end ();  exit (0);}

⌨️ 快捷键说明

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