From 11da511c784eca003deb90c23570f0873954e0de Mon Sep 17 00:00:00 2001 From: Duncan Wilkie Date: Sat, 18 Nov 2023 06:11:09 -0600 Subject: Initial commit. --- gmp-6.3.0/tests/cxx/t-ops3.cc | 132 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 gmp-6.3.0/tests/cxx/t-ops3.cc (limited to 'gmp-6.3.0/tests/cxx/t-ops3.cc') diff --git a/gmp-6.3.0/tests/cxx/t-ops3.cc b/gmp-6.3.0/tests/cxx/t-ops3.cc new file mode 100644 index 0000000..baf49e1 --- /dev/null +++ b/gmp-6.3.0/tests/cxx/t-ops3.cc @@ -0,0 +1,132 @@ +/* Test mp*_class assignment operators (+=, -=, etc) + +Copyright 2011 Free Software Foundation, Inc. + +This file is part of the GNU MP Library test suite. + +The GNU MP Library test suite is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 3 of the License, +or (at your option) any later version. + +The GNU MP Library test suite is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +Public License for more details. + +You should have received a copy of the GNU General Public License along with +the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ + +#include "config.h" + +#include "gmpxx.h" +#include "gmp-impl.h" +#include "tests.h" + +using namespace std; + +#define FOR_ALL_SIGNED_BUILTIN(F) \ + F(signed char) \ + F(signed short) \ + F(signed int) \ + F(signed long) \ + F(float) \ + F(double) + +#define FOR_ALL_BUILTIN(F) \ + FOR_ALL_SIGNED_BUILTIN(F) \ + F(char) \ + F(unsigned char) \ + F(unsigned short) \ + F(unsigned int) \ + F(unsigned long) + +#define FOR_ALL_GMPXX(F) \ + F(mpz_class) \ + F(mpq_class) \ + F(mpf_class) + +template void f(T t, U u){ + T a=t; + ASSERT_ALWAYS((a+=u)==(t+u)); ASSERT_ALWAYS(a==(t+u)); + ASSERT_ALWAYS((a-=u)==t); ASSERT_ALWAYS(a==t); + ASSERT_ALWAYS((a*=u)==(t*u)); ASSERT_ALWAYS(a==(t*u)); + ASSERT_ALWAYS((a/=u)==t); ASSERT_ALWAYS(a==t); + ASSERT_ALWAYS((a<<=5)==(t<<5)); ASSERT_ALWAYS(a==(t<<5)); + ASSERT_ALWAYS((a>>=5)==t); ASSERT_ALWAYS(a==t); +} + +template void g(T t, U u){ + T a=t; + ASSERT_ALWAYS((a%=u)==(t%u)); ASSERT_ALWAYS(a==(t%u)); + a=t; + ASSERT_ALWAYS((a&=u)==(t&u)); ASSERT_ALWAYS(a==(t&u)); + a=t; + ASSERT_ALWAYS((a|=u)==(t|u)); ASSERT_ALWAYS(a==(t|u)); + a=t; + ASSERT_ALWAYS((a^=u)==(t^u)); ASSERT_ALWAYS(a==(t^u)); +} + +template void h(T t){ + T a=t; + ASSERT_ALWAYS((a<<=5)==(t<<5)); ASSERT_ALWAYS(a==(t<<5)); + ASSERT_ALWAYS((a>>=5)==t); ASSERT_ALWAYS(a==t); +} + +template void ffs(T t, U u){ +#define F(V) f(t,(V)u); + FOR_ALL_SIGNED_BUILTIN(F) + FOR_ALL_GMPXX(F) +#undef F +#define F(V) f(t,-(V)u); + FOR_ALL_GMPXX(F) +#undef F +} + +template void ff(T t, U u){ +#define F(V) f(t,(V)u); + FOR_ALL_BUILTIN(F) + FOR_ALL_GMPXX(F) +#undef F +#define F(V) f(t,-(V)u); + FOR_ALL_GMPXX(F) +#undef F +} + +template void ggs(mpz_class t, U u){ +#define F(V) g(t,(V)u); + FOR_ALL_SIGNED_BUILTIN(F) +#undef F + g(t,(mpz_class)u); + g(t,-(mpz_class)u); +} + +template void gg(mpz_class t, U u){ +#define F(V) g(t,(V)u); + FOR_ALL_BUILTIN(F) +#undef F + g(t,(mpz_class)u); + g(t,-(mpz_class)u); +} + +void check(){ + mpz_class z=18; + mpq_class q(7,2); + mpf_class d=3.375; + h(z); h(q); h(d); + ff(z,13); ff(q,13); ff(d,13); + ffs(z,-42); ffs(q,-42); ffs(d,-42); + gg(z,33); ggs(z,-22); +} + + +int +main (void) +{ + tests_start(); + + check(); + + tests_end(); + return 0; +} -- cgit v1.2.3