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

📄 t-constr.cc

📁 a very popular packet of cryptography tools,it encloses the most common used algorithm and protocols
💻 CC
字号:
/* Test mp*_class constructors.Copyright 2001 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 <iostream>#include <strstream>#include <string>#include <cstdlib>#include "gmp.h"#include "gmp-impl.h"#include "gmpxx.h"#include "tests.h"using namespace std;#define CHECK_MPZ(args, want)                                          \  do {                                                                 \    mpz_set_str (ref, want, 0);                                        \    if (mpz_cmp (z.get_mpz_t(), ref) != 0)                             \      {                                                                \        cout << "mpz_class constructor wrong, args: " << args << "\n"; \        cout << "  want:  " << ref << "\n";                            \        cout << "  got:   " << z.get_mpz_t() << "\n";                  \        abort ();                                                      \      }                                                                \  } while (0)#define CHECK_MPQ(args, want)                                          \  do {                                                                 \    mpq_set_str (ref, want, 0);                                        \    if (mpq_cmp (q.get_mpq_t(), ref) != 0)                             \      {                                                                \        cout << "mpq_class constructor wrong, args: " << args << "\n"; \        cout << "  want:  " << ref << "\n";                            \        cout << "  got:   " << q.get_mpq_t() << "\n";                  \        abort ();                                                      \      }                                                                \  } while (0)#define CHECK_MPF(args, want)                                          \  do {                                                                 \    mpf_set_str (ref, want, 10);                                       \    if (mpf_cmp (f.get_mpf_t(), ref) != 0)                             \      {                                                                \        cout << "mpf_class constructor wrong, args: " << args << "\n"; \        cout << "  want:  " << ref << "\n";                            \        cout << "  got:   " << f.get_mpf_t() << "\n";                  \        abort ();                                                      \      }                                                                \  } while (0)voidcheck_mpz (void){  mpz_t ref;  mpz_init (ref);  { // no arguments    mpz_class z;    CHECK_MPZ ("none", "0");  }  { // argument: mpz_class    mpz_class w;    mpz_class z (w);    CHECK_MPZ ("w [mpz_class]", "0");  }  { // argument: int    mpz_class z (0);    CHECK_MPZ ("0", "0");  }  { // argument: bool    mpz_class z (true);    CHECK_MPZ ("true", "1");  }  { // argument: unsigned short    mpz_class z ((unsigned short) 1);    CHECK_MPZ ("(unsigned short) 1", "1");  }  { // argument: long    mpz_class z (-1234567890L);    CHECK_MPZ ("-1234567890L", "-1234567890");  }  { // argument: double    mpz_class z (3.141592653589793238);    CHECK_MPZ ("3.141592653589793238", "3");  }  { // argument: char *    mpz_class z ("12345678901234567890");    CHECK_MPZ ("\"12345678901234567890\"", "12345678901234567890");  }  { // arguments: char *, int    mpz_class z ("FFFF", 16);    CHECK_MPZ ("\"FFFF\", 16", "65535");  }  { // argument: string    mpz_class z (string ("1234567890"));    CHECK_MPZ ("string (\"1234567890\")", "1234567890");  }  { // arguments: string, int    mpz_class z (string ("7777"), 8);    CHECK_MPZ ("string (\"7777\", 8)", "4095");  }  { // argument: mpz_t    mpz_class z (ref);    CHECK_MPZ ("ref [mpz_t]", "4095");  }  mpz_clear (ref);}voidcheck_mpq (void){  mpq_t ref;  mpq_init (ref);  { // no arguments    mpq_class q;    CHECK_MPQ ("none", "0");  }  { // argument: mpq_class    mpq_class r;    mpq_class q (r);    CHECK_MPQ ("r [mpq_class]", "0");  }  { // argument: int    mpq_class q (0);    CHECK_MPQ ("0", "0");  }  { // argument: bool    mpq_class q (true);    CHECK_MPQ ("true", "1");  }  { // argument: unsigned short    mpq_class q ((unsigned short) 1);    CHECK_MPQ ("(unsigned short) 1", "1");  }  { // argument: long    mpq_class q (-1234567890L);    CHECK_MPQ ("-1234567890L", "-1234567890");  }  { // argument: double    mpq_class q (1.25);    CHECK_MPQ ("1.25", "5/4");  }  { // argument: char *    mpq_class q ("12345678901234567890");    CHECK_MPQ ("\"12345678901234567890\"", "12345678901234567890");  }  { // arguments: char *, int    mpq_class q ("FFFF", 16);    CHECK_MPQ ("\"FFFF\", 16", "65535");  }  { // argument: string    mpq_class q (string ("1234567890"));    CHECK_MPQ ("string (\"1234567890\")", "1234567890");  }  { // arguments: string, int    mpq_class q (string ("7777"), 8);    CHECK_MPQ ("string (\"7777\", 8)", "4095");  }  { // argument: mpz_t    mpq_class q (ref);    CHECK_MPQ ("ref [mpq_t]", "4095");  }  { // arguments: int, int    mpq_class q (1, 2);    CHECK_MPQ ("1, 2", "1/2");  }  { // arguments: mpz_class, mpz_class    mpz_class z (3), w (4);    mpq_class q (z, w);    CHECK_MPQ ("z, w [mpz_class, mpz_class]", "3/4");  }  { // arguments: int, mpz_class    mpz_class z (5);    mpq_class q (6, z);    CHECK_MPQ ("11, z [mpz_class]", "6/5");  }  mpq_clear (ref);}voidcheck_mpf (void){  mpf_t ref;  mpf_init (ref);  { // no arguments    mpf_class f;    CHECK_MPF ("none", "0.0");  }  { // argument: mpf_class    mpf_class g;    mpf_class f (g);    CHECK_MPF ("g [mpf_class]", "0.0");  }  { // argument: int    mpf_class f (0);    CHECK_MPF ("0", "0.0");  }  { // argument: bool    mpf_class f (true);    CHECK_MPF ("true", "1.0");  }  { // argument: unsigned short    mpf_class f ((unsigned short) 1);    CHECK_MPF ("(unsigned short) 1", "1.0");  }  { // argument: long    mpf_class f (-1234567890L);    CHECK_MPF ("-1234567890L", "-1234567890.0");  }  { // argument: double    mpf_class f (3.125e+4);    CHECK_MPF ("3.125e+4", "31250.0");  }  { // argument: char *    mpf_class f ("12345678901234567890");    CHECK_MPF ("\"12345678901234567890\"", "12345678901234567890.0");  }  { // argument: string    mpf_class f (string ("1234567890"));    CHECK_MPF ("string (\"1234567890\")", "1234567890.0");  }  { // argument: mpf_t    mpf_class f (ref);    CHECK_MPF ("ref [mpf_t]", "1234567890.0");  }  { // arguments: mpf_class, int    mpf_class g;    mpf_class f (g, 64);    CHECK_MPF ("g [mpf_class], 64", "0.0");  }  { // arguments: int, int    mpf_class f (0, 128);    CHECK_MPF ("0, 128", "0.0");  }  { // arguments: bool, int    mpf_class f (true, 192);    CHECK_MPF ("true, 192", "1.0");  }  { // arguments: unsigned short, int    mpf_class f ((unsigned short) 1, 256);    CHECK_MPF ("(unsigned short) 1, 256", "1.0");  }  { // arguments: long, unsigned    mpf_class f (-1234567890L, 64u);    CHECK_MPF ("-1234567890L, 64u", "-1234567890.0");  }  { // argument: double, unsigned    mpf_class f (3.125e+4, 128u);    CHECK_MPF ("3.125e+4, 128u", "31250.0");  }  { // argument: char *, unsigned    mpf_class f ("12345678901234567890", 192u);    CHECK_MPF ("\"12345678901234567890\", 192u", "12345678901234567890.0");  }  { // argument: string, unsigned    mpf_class f (string ("1234567890", 256u));    CHECK_MPF ("string (\"1234567890\", 256u)", "1234567890.0");  }  { // argument: mpf_t, long    mpf_class f (ref, 64L);    CHECK_MPF ("ref [mpf_t], 64L", "1234567890.0");  }  mpf_clear (ref);}intmain (int argc, char *argv[]){  tests_start ();  check_mpz ();  check_mpq ();  check_mpf ();  tests_end ();  exit (0);}

⌨️ 快捷键说明

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