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

◆ TEST() [9/9]

TEST ( RingRRR ,
syzygy  )

Definition at line 188 of file RingRRRTest.cpp.

189{
190 // NOTE: RingRRR::syzygy, CCC::syzygy are not useful functions.
191 // Should we remove these tests, and the corresponding functions?
192 RingRRR *R = RingRRR::create(std::make_unique<M2::ARingRRR>(100));
193
195 for (int i = 0; i < ntrials; i++)
196 {
197 ring_elem u, v;
198 ring_elem a = gen.nextElement();
199 ring_elem b = gen.nextElement();
200 if (R->is_zero(b)) continue;
201
202 // special cases (note: b != 0 for rest of routine)
203 // syzygy(0,b) returns (1,0)
204 R->syzygy(R->zero(), b, u, v);
205 EXPECT_TRUE(R->is_equal(u, R->one()));
206 EXPECT_TRUE(R->is_equal(v, R->zero()));
207 // syzygy(a,1) returns (1,-a)
208 R->syzygy(a, R->one(), u, v);
209 EXPECT_TRUE(R->is_equal(u, R->one()));
210 EXPECT_TRUE(almostEqual(R, 98, v, R->negate(a)));
211 // syzygy(a,-1) returns (1,a)
212 R->syzygy(a, R->minus_one(), u, v);
213 EXPECT_TRUE(R->is_equal(u, R->one()));
214 EXPECT_TRUE(almostEqual(R, 98, v, a));
215 R->syzygy(a, b, u, v);
216 ring_elem result = R->add(R->mult(a, u), R->mult(b, v));
217 EXPECT_TRUE(almostEqual(R, 94, result, R->zero()));
218 }
219}
const int ntrials
Definition ARingTest.hpp:42
M2::ConcreteRing< M2::ARingRRR > RingRRR
bool almostEqual(const RingRRR *R, int nbits, ring_elem a, ring_elem b)
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 negate(const ring_elem f) const
virtual void syzygy(const ring_elem f, const ring_elem g, ring_elem &x, ring_elem &y) const
static ConcreteRing< M2::ARingRRR > * create(std::unique_ptr< M2::ARingRRR > 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
ring_elem one() const
Definition ring.hpp:357
ring_elem zero() const
Definition ring.hpp:359
ring_elem minus_one() const
Definition ring.hpp:358
VALGRIND_MAKE_MEM_DEFINED & result(result)

References M2::ConcreteRing< RingType >::add(), almostEqual(), M2::ConcreteRing< M2::ARingRRR >::create(), M2::ConcreteRing< RingType >::is_equal(), M2::ConcreteRing< RingType >::is_zero(), Ring::minus_one(), M2::ConcreteRing< RingType >::mult(), M2::ConcreteRing< RingType >::negate(), RingElementGenerator< RingType >::nextElement(), ntrials, Ring::one(), result(), M2::ConcreteRing< RingType >::syzygy(), and Ring::zero().