42 mpfr_init2(epsilon, 100);
43 mpfr_set_ui_2exp(epsilon, 1, -nbits, MPFR_RNDN);
47 bool re_is_zero = (mpfr_cmpabs(f1, epsilon) < 0);
49 bool im_is_zero = (mpfr_cmpabs(f2, epsilon) < 0);
51 bool ret = re_is_zero && im_is_zero;
59 if (index < 50)
return R.
from_long(index - 25);
67 EXPECT_TRUE(R !=
nullptr);
69 EXPECT_TRUE(
dynamic_cast<const Z_mod *
>(R) ==
nullptr);
70 EXPECT_TRUE(
dynamic_cast<const RingCCC *
>(R) !=
nullptr);
71 EXPECT_FALSE(R->
is_ZZ());
93 for (
int i = 0; i <
ntrials; i++)
113 for (
int i = 0; i <
ntrials; i++)
132 for (
int i = 0; i <
ntrials; i++)
151 d = R->
add(a, R->
add(b, c));
152 e = R->
add(R->
add(a, b), c);
178 for (
int i = 0; i <
ntrials; i++)
201 mpz_set_si(gmp1, e1);
214 for (
int i = 0; i <
ntrials; i++)
ring_elem getElement< RingCCC >(const RingCCC &R, int index)
M2::ConcreteRing< M2::ARingCCC > RingCCC
bool almostEqual(const RingCCC *R, int nbits, ring_elem a, ring_elem b)
void testRingSubtract(const T *R, int ntrials)
void testRingNegate(const T *R, int ntrials)
Shared gtest fixture for the legacy Ring-based Ring*Test.cpp suite.
Legacy Z_mod — a Ring-derived Z/p with log / exp tables.
ConcreteRing<RingType> — the templated bridge between aring and the legacy Ring API.
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
virtual bool is_zero(const ring_elem f) const
virtual ring_elem from_long(long n) const
virtual ring_elem negate(const ring_elem f) const
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
virtual void syzygy(const ring_elem f, const ring_elem g, ring_elem &x, ring_elem &y) const
static ConcreteRing< M2::ARingCCC > * create(std::unique_ptr< M2::ARingCCC > R)
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
virtual ring_elem random() const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const
virtual bool is_ZZ() const
ring_elem minus_one() const
Engine-side Z/p ring for small primes (p < 32767), using a discrete-log (Zech) representation.
void subtract(int &result, int a, int b)
VALGRIND_MAKE_MEM_DEFINED & result(result)
std::ostringstream & ones(std::ostringstream &o, int len)
int32_t rawRandomInt(int32_t max)