Macaulay2 Engine
Loading...
Searching...
No Matches

◆ TEST() [2/9]

TEST ( RingCCC ,
axioms  )

Definition at line 128 of file RingCCCTest.cpp.

129{
130 RingCCC *R = RingCCC::create(100);
132 for (int i = 0; i < ntrials; i++)
133 {
134 ring_elem a = gen.nextElement();
135 ring_elem b = gen.nextElement();
136 ring_elem c = gen.nextElement();
137
138 // Test commutativity
139 // test: a*b = b*a
140 // test: a+b == b+a
141 ring_elem d = R->add(a, b);
142 ring_elem e = R->add(b, a);
143 EXPECT_TRUE(R->is_equal(d, e));
144 d = R->mult(a, b);
145 e = R->mult(b, a);
146 EXPECT_TRUE(almostEqual(R, 98, d, e));
147
148 // Test associativity
149 // test: a+(b+c) == (a+b)+c
150 // test: a*(b*c) == (a*b)*c
151 d = R->add(a, R->add(b, c));
152 e = R->add(R->add(a, b), c);
153 EXPECT_TRUE(almostEqual(R, 94, d, e));
154 d = R->mult(a, R->mult(b, c));
155 e = R->mult(R->mult(a, b), c);
156 EXPECT_TRUE(almostEqual(R, 94, d, e));
157
158 // Test distributivity
159 // test: a*(b+c) == a*b + a*c
160 d = R->mult(a, R->add(b, c));
161 e = R->add(R->mult(a, b), R->mult(a, c));
162#if 0
163 mpfr_printf("a=(%.20Rf,%.20Rf)\n",BIGCC_RE(a), BIGCC_IM(a));
164 mpfr_printf("b=(%.20Rf,%.20Rf)\n",BIGCC_RE(b), BIGCC_IM(b));
165 mpfr_printf("a*(b+c)=(%.20Rf,%.20Rf)\n",BIGCC_RE(d), BIGCC_IM(d));
166 mpfr_printf("a*b+a*c=(%.20Rf,%.20Rf)\n",BIGCC_RE(e), BIGCC_IM(e));
167#endif
168 EXPECT_TRUE(almostEqual(R, 92, d, e));
169 }
170}
const int ntrials
Definition ARingTest.hpp:42
M2::ConcreteRing< M2::ARingCCC > RingCCC
bool almostEqual(const RingCCC *R, int nbits, ring_elem a, ring_elem b)
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
static ConcreteRing< M2::ARingCCC > * create(std::unique_ptr< M2::ARingCCC > R)
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
#define BIGCC_RE(f)
Definition ringelem.hpp:210
#define BIGCC_IM(f)
Definition ringelem.hpp:209

References M2::ConcreteRing< RingType >::add(), almostEqual(), BIGCC_IM, BIGCC_RE, M2::ConcreteRing< M2::ARingCCC >::create(), M2::ConcreteRing< RingType >::is_equal(), M2::ConcreteRing< RingType >::mult(), RingElementGenerator< RingType >::nextElement(), and ntrials.