@@ -111,223 +111,6 @@ function multi_div_test()
111
111
)) == - ((1 + 1e-10 ) - 1 )x + 1
112
112
end
113
113
114
- function test_gcd_unit (expected, p1, p2, algo)
115
- g = @inferred gcd (p1, p2, algo)
116
- # it does not make sense, in general, to speak of "the" greatest common
117
- # divisor of u and v; there is a set of greatest common divisors, each
118
- # one being a unit multiple of the others [Knu14, p. 424] so `expected` and
119
- # `-expected` are both accepted.
120
- @test g == expected || g == - expected
121
- end
122
-
123
- function test_gcdx_unit (expected, p1, p2, algo)
124
- test_gcd_unit (expected, p1, p2, algo)
125
- if ! (algo isa SubresultantAlgorithm) # FIXME not implemented yet
126
- a, b, g = @inferred gcdx (p1, p2, algo)
127
- # it does not make sense, in general, to speak of "the" greatest common
128
- # divisor of u and v; there is a set of greatest common divisors, each
129
- # one being a unit multiple of the others [Knu14, p. 424] so `expected` and
130
- # `-expected` are both accepted.
131
- @test iszero (MP. pseudo_rem (g, expected, algo))
132
- @test a * p1 + b * p2 == g
133
- end
134
- end
135
- function _test_gcdx_unit (expected, p1, p2, algo)
136
- test_gcdx_unit (expected, p1, p2, algo)
137
- return test_gcdx_unit (expected, p2, p1, algo)
138
- end
139
-
140
- function univariate_gcd_test (algo = GeneralizedEuclideanAlgorithm ())
141
- Mod. @polyvar x
142
- test_gcdx_unit (x + 1 , x^ 2 - 1 , x^ 2 + 2 x + 1 , algo)
143
- test_gcdx_unit (x + 1 , x^ 2 + 2 x + 1 , x^ 2 - 1 , algo)
144
- test_gcdx_unit (x + 1 , x^ 2 - 1 , x + 1 , algo)
145
- test_gcdx_unit (x + 1 , x + 1 , x^ 2 - 1 , algo)
146
- test_gcdx_unit (x + 1 , x - x, x + 1 , algo)
147
- test_gcdx_unit (x + 1 , x + 1 , x - x, algo)
148
- test_gcdx_unit (x - x + 1 , x + 1 , x + 2 , algo)
149
- test_gcdx_unit (x - x + 1 , x + 1 , 2 x + 1 , algo)
150
- test_gcdx_unit (x - x + 1 , x - 1 , 2 x^ 2 - 2 x - 2 , algo)
151
- @test 0 == @inferred gcd (x - x, x^ 2 - x^ 2 , algo)
152
- @test 0 == @inferred gcd (x^ 2 - x^ 2 , x - x, algo)
153
- end
154
-
155
- function _mult_test (a:: Number , b)
156
- @test iszero (maxdegree (b))
157
- end
158
- function _mult_test (a:: Number , b:: Number )
159
- @test iszero (rem (a, b))
160
- @test iszero (rem (b, a))
161
- end
162
- function _mult_test (a, b)
163
- @test iszero (rem (a, b))
164
- @test iszero (rem (b, a))
165
- end
166
-
167
- include (" independent.jl" )
168
-
169
- function _gcd_test (expected, a, b, algo, expected_type)
170
- A = deepcopy (a)
171
- B = deepcopy (b)
172
- g = @inferred MP. _simplifier (
173
- a,
174
- b,
175
- algo,
176
- MA. IsNotMutable (),
177
- MA. IsNotMutable (),
178
- )
179
- @test are_independent (g, a)
180
- @test are_independent (g, b)
181
- @test g isa expected_type
182
- return _mult_test (expected, g)
183
- end
184
-
185
- function mult_test (expected, a, b, algo)
186
- return _gcd_test (expected, a, b, algo, Base. promote_typeof (a, b))
187
- end
188
- function mult_test (expected, a:: Number , b, algo)
189
- return _gcd_test (
190
- expected,
191
- a,
192
- b,
193
- algo,
194
- promote_type (typeof (a), MP. coefficient_type (b)),
195
- )
196
- end
197
- function mult_test (expected, a, b:: Number , algo)
198
- return _gcd_test (
199
- expected,
200
- a,
201
- b,
202
- algo,
203
- promote_type (MP. coefficient_type (a), typeof (b)),
204
- )
205
- end
206
- function sym_test (a, b, g, algo)
207
- mult_test (g, a, b, algo)
208
- return mult_test (g, b, a, algo)
209
- end
210
- function triple_test (a, b, c, algo)
211
- sym_test (a * c, b * c, gcd (a, b, algo) * c, algo)
212
- sym_test (b * a, c * a, gcd (b, c, algo) * a, algo)
213
- return sym_test (c * b, a * b, gcd (c, a, algo) * b, algo)
214
- end
215
-
216
- function multivariate_gcd_test (
217
- :: Type{T} ,
218
- algo = SubresultantAlgorithm (),
219
- ) where {T}
220
- Mod. @polyvar x y z
221
- o = one (T)
222
- zr = zero (T)
223
- sym_test (o, o * x, o, algo)
224
- sym_test (o * x, zr * x, o * x, algo)
225
- sym_test (o * x + o, zr * x, o * x + o, algo)
226
- # Inspired from https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/issues/160
227
- f1 = o * x * y + o * x
228
- f2 = o * y^ 2
229
- f3 = o * x
230
- sym_test (f1, f2, 1 , algo)
231
- sym_test (f2, f3, 1 , algo)
232
- sym_test (f3, f1, x, algo)
233
- triple_test (f1, f2, f3, algo)
234
-
235
- @testset " Issue #173" begin
236
- p1 = o * x * y + x
237
- p2 = x^ 2
238
- sym_test (p1, p2, x, algo)
239
- end
240
-
241
- p1 = o * z - z
242
- p2 = z
243
- @test gcd (p1, p2, algo) == z
244
- p1 = o * y - y
245
- p2 = z
246
- @test gcd (p1, p2, algo) == z
247
- test_relatively_prime (p1, p2, algo) = test_gcd_unit (o, p1, p2, algo)
248
- test_relatively_prime (2 o * y * z - o, y - z, algo)
249
- test_relatively_prime (2 o * y^ 2 * z - y, y - z, algo)
250
- test_relatively_prime (2 o * y^ 2 * z - y, y^ 3 * z - y - z, algo)
251
- test_relatively_prime (
252
- 2 o * y^ 3 + 2 * y^ 2 * z - y,
253
- y^ 3 + y^ 3 * z - y - z,
254
- algo,
255
- )
256
- test_relatively_prime (
257
- z^ 4 + 2 o * y^ 3 + 2 * y^ 2 * z - y,
258
- y * z^ 4 + y^ 3 + y^ 3 * z - y - z,
259
- algo,
260
- )
261
- test_relatively_prime (
262
- y * z^ 3 + z^ 4 + 2 o * y^ 3 + 2 * y^ 2 * z - y,
263
- y^ 2 * z^ 3 + y * z^ 4 + y^ 3 + y^ 3 * z - y - z,
264
- algo,
265
- )
266
- if T != Int
267
- test_relatively_prime (
268
- - 3 o * y^ 2 * z^ 3 - 3 * y^ 4 + y * z^ 3 + z^ 4 + 2 * y^ 3 + 2 * y^ 2 * z -
269
- y,
270
- 3 o * y^ 3 * z^ 3 - 2 * y^ 5 + y^ 2 * z^ 3 + y * z^ 4 + y^ 3 + y^ 3 * z - y -
271
- z,
272
- algo,
273
- )
274
- end
275
- test_relatively_prime (
276
- - z^ 6 - 3 o * y^ 2 * z^ 3 - 3 * y^ 4 +
277
- y * z^ 3 +
278
- z^ 4 +
279
- 2 * y^ 3 +
280
- 2 * y^ 2 * z - y,
281
- - y * z^ 6 - 3 o * y^ 3 * z^ 3 - 2 * y^ 5 +
282
- y^ 2 * z^ 3 +
283
- y * z^ 4 +
284
- y^ 3 +
285
- y^ 3 * z - y - z,
286
- algo,
287
- )
288
- test_relatively_prime (
289
- - z^ 6 - 3 o * y^ 2 * z^ 3 - 3 * y^ 4 +
290
- y * z^ 3 +
291
- z^ 4 +
292
- 2 * y^ 3 +
293
- 2 * y^ 2 * z - y,
294
- - y^ 2 * z^ 6 - 3 o * y^ 4 * z^ 3 - 2 * y^ 6 +
295
- y^ 3 * z^ 3 +
296
- y^ 2 * z^ 4 +
297
- y^ 5 +
298
- y^ 4 * z - y^ 2 - y * z,
299
- algo,
300
- )
301
- a = (o * x + o * y^ 2 ) * (o * z^ 3 + o * y^ 2 + o * x)
302
- b = (o * x + o * y + o * z) * (o * x^ 2 + o * y)
303
- c = (o * x + o * y + o * z) * (o * z^ 3 + o * y^ 2 + o * x)
304
- # if T != Int || (
305
- # algo != GeneralizedEuclideanAlgorithm(false, false) &&
306
- # algo != GeneralizedEuclideanAlgorithm(true, false) &&
307
- # algo != GeneralizedEuclideanAlgorithm(true, true)
308
- # )
309
- # sym_test(a, b, 1, algo)
310
- # end
311
- sym_test (b, c, x + y + z, algo)
312
- sym_test (c, a, z^ 3 + y^ 2 + x, algo)
313
- # if T != Int && (
314
- # T != Float64 || (
315
- # algo != GeneralizedEuclideanAlgorithm(false, true) &&
316
- # algo != GeneralizedEuclideanAlgorithm(true, true)
317
- # )
318
- # )
319
- # triple_test(a, b, c, algo)
320
- # end
321
-
322
- # https://github.com/JuliaAlgebra/MultivariatePolynomials.jl/issues/195
323
- return sym_test (
324
- x * (y^ 2 ) + 2 x * y * z + x * (z^ 2 ) + x * y + x * z,
325
- y + z,
326
- y + z,
327
- algo,
328
- )
329
- end
330
-
331
114
function lcm_test ()
332
115
Mod. @polyvar x
333
116
l = @inferred lcm (x^ 2 - 1 , x^ 2 + 2 x + 1 )
@@ -343,56 +126,6 @@ function lcm_test()
343
126
@test 0 == @inferred lcm (x^ 2 - x^ 2 , x - x)
344
127
end
345
128
346
- function deflation_test ()
347
- Mod. @polyvar a b c
348
- function _test (p, eshift, edefl)
349
- shift, defl = MP. deflation (p)
350
- @test shift == eshift
351
- @test defl == edefl
352
- q = MP. deflate (p, shift, defl)
353
- @test p == MP. inflate (q, shift, defl)
354
- end
355
- for (x, y, z) in permutations ((a, b, c))
356
- _test (x + x^ 2 + y * x, x, x * y)
357
- p = x^ 2 + x^ 2 * y^ 3 + y^ 6 * x^ 4
358
- _test (p, x^ 2 , x^ 2 * y^ 3 )
359
- @test p == MP. deflate (p, z^ 0 , z^ 0 )
360
- _test (p, x^ 2 , x^ 2 * y^ 3 )
361
- end
362
- end
363
-
364
- function extracted_variable_test ()
365
- Mod. @polyvar x y z
366
- function _test (p1, p2, w1, w2)
367
- i1, i2, n = MP. _extracted_variable (p1, p2)
368
- v (p, i) = iszero (i) ? nothing : variables (p)[i]
369
- if string (Mod) == " DynamicPolynomials"
370
- alloc_test (() -> MP. _extracted_variable (p1, p2), 0 )
371
- end
372
- @test v (p1, i1) == w1
373
- @test v (p2, i2) == w2
374
- i2, i1, n = MP. _extracted_variable (p2, p1)
375
- if string (Mod) == " DynamicPolynomials"
376
- alloc_test (() -> MP. _extracted_variable (p2, p1), 0 )
377
- end
378
- @test v (p1, i1) == w1
379
- @test v (p2, i2) == w2
380
- end
381
- _test (x - x, y - y, nothing , nothing )
382
- _test (x + y + z, x - z, y, nothing )
383
- _test (x + y + z, x - y, z, nothing )
384
- _test (x + y + z, y - z, x, nothing )
385
- _test (x^ 4 + y^ 5 + z^ 6 , x^ 3 + y^ 2 + z, z, z)
386
- _test (x^ 6 + y^ 5 + z^ 4 , x + y^ 2 + z^ 3 , x, x)
387
- _test (x^ 6 + y + z^ 4 - y, x + y + z^ 3 - y, x, x)
388
- return _test (
389
- x * (y^ 2 ) + 2 x * y * z + x * (z^ 2 ) + x * y + x * z,
390
- y + z,
391
- y,
392
- y,
393
- )
394
- end
395
-
396
129
@testset " Division" begin
397
130
@testset " div by number" begin
398
131
div_number_test ()
412
145
@testset " Division by multiple polynomials examples" begin
413
146
multi_div_test ()
414
147
end
415
- univariate_gcd_test (SubresultantAlgorithm ())
416
- @testset " Univariate gcd primitive_rem=$primitive_rem " for primitive_rem in
417
- [false , true ]
418
- @testset " skip_last=$skip_last " for skip_last in [false , true ]
419
- univariate_gcd_test (
420
- GeneralizedEuclideanAlgorithm (primitive_rem, skip_last),
421
- )
422
- end
423
- end
424
- @testset " Multivariate gcd $T " for T in
425
- [Int, BigInt, Rational{BigInt}, Float64]
426
- if T != Rational{BigInt} || VERSION >= v " 1.6"
427
- multivariate_gcd_test (T, SubresultantAlgorithm ())
428
- # `gcd` for `Rational{BigInt}` got defined at some point between v1.0 and v1.6
429
- @testset " primitive_rem=$primitive_rem " for primitive_rem in
430
- [false , true ]
431
- @testset " skip_last=$skip_last " for skip_last in [false , true ]
432
- multivariate_gcd_test (
433
- T,
434
- GeneralizedEuclideanAlgorithm (primitive_rem, skip_last),
435
- )
436
- end
437
- end
438
- end
439
- end
440
148
@testset " lcm" begin
441
149
lcm_test ()
442
150
end
0 commit comments