From 5cebfccd8647de0a4d252089acfd824db6e4ccec Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 25 Apr 2024 23:03:46 +0200 Subject: [PATCH] Add some conformance tests --- test/generic/AbsMSeries-test.jl | 9 +++++++++ test/generic/AbsSeries-test.jl | 9 +++++++++ test/generic/FunctionField-test.jl | 10 ++++++++++ test/generic/LaurentSeries-test.jl | 9 +++++++++ test/generic/PuiseuxSeries-test.jl | 9 +++++++++ test/generic/RationalFunctionField-test.jl | 9 +++++++++ test/generic/RelSeries-test.jl | 9 +++++++++ test/generic/SparsePoly-test.jl | 12 ++++++++++++ 8 files changed, 76 insertions(+) diff --git a/test/generic/AbsMSeries-test.jl b/test/generic/AbsMSeries-test.jl index ff4a2096b1..a41d49469f 100644 --- a/test/generic/AbsMSeries-test.jl +++ b/test/generic/AbsMSeries-test.jl @@ -1,3 +1,12 @@ +function test_elem(R::AbstractAlgebra.Generic.AbsMSeriesRing{BigInt}) + rand(R, 0:12, -10:10) +end + +@testset "Generic.AbsMSeries.conformance" begin + R, (x, y) = power_series_ring(ZZ, [5, 3], ["x", "y"]) + test_Ring_interface(R) +end + @testset "Generic.AbsMSeries.constructors" begin S, x = polynomial_ring(ZZ, "x") diff --git a/test/generic/AbsSeries-test.jl b/test/generic/AbsSeries-test.jl index a02a4cd474..9aaf28b605 100644 --- a/test/generic/AbsSeries-test.jl +++ b/test/generic/AbsSeries-test.jl @@ -16,6 +16,15 @@ # Note: only useful to distinguish rings and fields for 1/2, 3/4, 5/6 if the # algos differ, and 7 can often stand in for 5/6 if the algorithm supports it. +function test_elem(R::AbstractAlgebra.Generic.AbsPowerSeriesRing{BigInt}) + rand(R, 0:12, -10:10) +end + +@testset "Generic.AbsSeries.conformance" begin + R, x = power_series_ring(ZZ, 30, "x", model=:capped_absolute) + test_Ring_interface(R) +end + @testset "Generic.AbsSeries.types" begin @test abs_series_type(BigInt) == Generic.AbsSeries{BigInt} @test abs_series_type(Rational{BigInt}) == Generic.AbsSeries{Rational{BigInt}} diff --git a/test/generic/FunctionField-test.jl b/test/generic/FunctionField-test.jl index c2fab0df4b..008de4ab23 100644 --- a/test/generic/FunctionField-test.jl +++ b/test/generic/FunctionField-test.jl @@ -11,6 +11,16 @@ U2, z2 = R2["z2"] P2 = [(x2 + 1)*z2 + (x2 + 2), z2 + (x2 + 1)//(x2 + 2), z2^2 + 3z2 + 1, (x2^2 + 1)//(x2 + 1)*z2^5 + 4z2^4 + (x2 + 2)*z2^3 + x2//(x2 + 1)*z2 + 1//(x2 + 1)] +# FIXME/TODO: conformance tests run into infinite loop??? +#function test_elem(R::AbstractAlgebra.Generic.FunctionField{Rational{BigInt}}) +# rand(R, 1:10, -10:10) +#end +# +#@testset "Generic.FunctionField.conformance" begin +# S, y = function_field(P1[4], "y") +# test_Ring_interface(S) +#end + @testset "Generic.FunctionField.constructors" begin @test function_field(P1[1], "y")[1] === function_field(P1[1], "y", cached=true)[1] @test function_field(P1[1], "y", cached=true)[1] !== function_field(P1[1], "y", cached=false)[1] diff --git a/test/generic/LaurentSeries-test.jl b/test/generic/LaurentSeries-test.jl index 9ad2a8eeca..89d1c6e843 100644 --- a/test/generic/LaurentSeries-test.jl +++ b/test/generic/LaurentSeries-test.jl @@ -16,6 +16,15 @@ # Note: only useful to distinguish rings and fields for 1/2, 3/4, 5/6 if the # algos differ, and 7 can often stand in for 5/6 if the algorithm supports it. +function test_elem(R::AbstractAlgebra.Generic.LaurentSeriesRing{BigInt}) + rand(R, 0:12, -10:10) +end + +@testset "Generic.LaurentSeries.conformance" begin + R, x = laurent_series_ring(ZZ, 10, "x") + test_Ring_interface(R) +end + @testset "Generic.LaurentSeries.constructors" begin R, x = laurent_series_ring(ZZ, 30, "x") diff --git a/test/generic/PuiseuxSeries-test.jl b/test/generic/PuiseuxSeries-test.jl index 1fb88b8794..c983393f9f 100644 --- a/test/generic/PuiseuxSeries-test.jl +++ b/test/generic/PuiseuxSeries-test.jl @@ -16,6 +16,15 @@ # Note: only useful to distinguish rings and fields for 1/2, 3/4, 5/6 if the # algos differ, and 7 can often stand in for 5/6 if the algorithm supports it. +function test_elem(R::AbstractAlgebra.Generic.PuiseuxSeriesRing{BigInt}) + rand(R, -12:12, 1:6, -10:10) +end + +@testset "Generic.PuiseuxSeries.conformance" begin + R, x = puiseux_series_ring(ZZ, 10, "x") + test_Ring_interface(R) +end + @testset "Generic.PuiseuxSeries.constructors" begin R, x = puiseux_series_ring(ZZ, 30, "x") diff --git a/test/generic/RationalFunctionField-test.jl b/test/generic/RationalFunctionField-test.jl index 0ba245286e..76e31ee327 100644 --- a/test/generic/RationalFunctionField-test.jl +++ b/test/generic/RationalFunctionField-test.jl @@ -1,3 +1,12 @@ +function test_elem(R::AbstractAlgebra.Generic.RationalFunctionField{Rational{BigInt}}) + rand(R, 0:3, -3:3) +end + +@testset "Generic.FunctionField.conformance" begin + S, x = rational_function_field(QQ, "x") + test_Ring_interface(S) +end + @testset "Generic.RationalFunctionField.constructors" begin # Univariate diff --git a/test/generic/RelSeries-test.jl b/test/generic/RelSeries-test.jl index c0788880d5..14d1ff2cc2 100644 --- a/test/generic/RelSeries-test.jl +++ b/test/generic/RelSeries-test.jl @@ -16,6 +16,15 @@ # Note: only useful to distinguish rings and fields for 1/2, 3/4, 5/6 if the # algos differ, and 7 can often stand in for 5/6 if the algorithm supports it. +function test_elem(R::AbstractAlgebra.Generic.RelPowerSeriesRing{BigInt}) + rand(R, 0:12, -10:10) +end + +@testset "Generic.RelSeries.conformance" begin + R, x = power_series_ring(ZZ, 10, "x") + test_Ring_interface(R) +end + @testset "Generic.RelSeries.types" begin @test rel_series_type(BigInt) == Generic.RelSeries{BigInt} @test rel_series_type(Rational{BigInt}) == Generic.RelSeries{Rational{BigInt}} diff --git a/test/generic/SparsePoly-test.jl b/test/generic/SparsePoly-test.jl index 6227d9d5f5..9582c5bf78 100644 --- a/test/generic/SparsePoly-test.jl +++ b/test/generic/SparsePoly-test.jl @@ -1,3 +1,15 @@ +# FIXME/TODO: get these conformance tests to work and pass +#function test_elem(Rx::AbstractAlgebra.Generic.SparsePolyRing) +# R = base_ring(Rx) +# x = gen(Rx) +# return sum(x^(5*i) * test_elem(R) for i in 1:rand(0:6); init=zero(Rx)) +#end +# +#@testset "Generic.SparsePoly.conformance" begin +# R, x = SparsePolynomialRing(ZZ, "x") +# test_Ring_interface(R) +#end + @testset "Generic.SparsePoly.constructors" begin R, x = SparsePolynomialRing(ZZ, "x") S, y = SparsePolynomialRing(R, "y")