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

◆ testCoercions()

template<typename T>
void testCoercions ( const T & R)

Definition at line 132 of file ARingTest.hpp.

133{
134 typename T::ElementType a, b, c;
135 mpz_t m, base;
136 mpq_t n1;
137 R.init(a);
138 R.init(b);
139 R.init(c);
140 mpz_init(m);
141 mpz_init(base);
142 mpq_init(n1);
143
144 // set_from_mpz
145 mpz_set_str(base, "2131236127486324783264782364", 10);
146 R.set_from_mpz(c, base);
147 for (int i = -1000; i < 1000; i++)
148 {
149 mpz_set_si(m, i);
150 mpz_add(m, m, base); // m = base + i
151 R.set_from_mpz(a, m); // a = (base + i) mod charac
152 R.set_from_long(b, i);
153 R.add(b, c, b); // b = (base mod charac) + (i mod charac)
154 EXPECT_TRUE(R.is_equal(a, b)); // a, b should be equal
155 }
156
157 // set_from_mpq
158 for (int i = 1; i < 300; i++)
159 {
160 mpq_set_si(n1, 43999, i);
161 mpq_canonicalize(n1); // n1 = 43999/i
162
163 // check that (43999 mod charac)/(i mod charac) == n1 mod charac
164 // if (i mod charac) is not zero.
165 if (R.characteristic() == 0 or (i % R.characteristic()) == 0) continue;
166 bool ok = R.set_from_mpq(a, n1);
167 EXPECT_TRUE(ok);
168 R.set_from_long(b, 43999);
169 R.set_from_long(c, i);
170 if (!R.is_zero(c))
171 {
172 R.divide(c, b, c);
173 EXPECT_TRUE(R.is_equal(a, c));
174 }
175 }
176
177 R.clear(a);
178 R.clear(b);
179 R.clear(c);
180 mpz_clear(m);
181 mpz_clear(base);
182 mpq_clear(n1);
183}
static CanonicalForm base
Definition factory.cpp:289

References base, and T.

Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and testFiniteField().