From beb0d58f01f2e94bccc7844130f69359520cfdbc Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 3 Sep 2020 16:58:04 +0200 Subject: [PATCH] Avoid calling ImmutableVector(0, v) The code for algebraic extensions passed fam!.rchar to ImmutableVector; but that value was 0 if the characteristic exceeded 256. --- hpcgap/lib/vecmat.gi | 2 ++ lib/algfld.gi | 2 +- lib/vecmat.gi | 2 ++ tst/teststandard/algext.tst | 9 ++++++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hpcgap/lib/vecmat.gi b/hpcgap/lib/vecmat.gi index 645ab8232b..fbd16028c1 100644 --- a/hpcgap/lib/vecmat.gi +++ b/hpcgap/lib/vecmat.gi @@ -1705,6 +1705,7 @@ end); InstallMethod( ImmutableVector,"general,2",[IsObject,IsRowVector],0, function(f,v) local v2; + Assert(1, IsField(f) or IsPrimePowerInt(f)); if not IsInt(f) then f := Size(f); fi; if f <= 256 then v2 := CopyToVectorRep(v,f); @@ -1716,6 +1717,7 @@ end); InstallOtherMethod( ImmutableVector,"general,3",[IsObject,IsRowVector,IsBool],0, function(f,v,change) local v2; + Assert(1, IsField(f) or IsPrimePowerInt(f)); if not IsInt(f) then f := Size(f); fi; if f <= 256 then v2 := CopyToVectorRep(v,f); diff --git a/lib/algfld.gi b/lib/algfld.gi index 9356eb1553..12b356f533 100644 --- a/lib/algfld.gi +++ b/lib/algfld.gi @@ -94,7 +94,7 @@ local fam,i,cof,red,rchar,impattr,deg,tmp; else rchar:=0; fi; - fam!.rchar:=rchar; + fam!.rchar:=Size(f); fam!.poly:=p; fam!.polCoeffs:=CoefficientsOfUnivariatePolynomial(p); diff --git a/lib/vecmat.gi b/lib/vecmat.gi index 5934ba1725..3cdb688aa1 100644 --- a/lib/vecmat.gi +++ b/lib/vecmat.gi @@ -1521,12 +1521,14 @@ end); ## InstallMethod( ImmutableVector,"general,2",[IsObject,IsRowVector],0, function(f,v) + Assert(1, IsField(f) or IsPrimePowerInt(f)); ConvertToVectorRepNC(v,f); return Immutable(v); end); InstallOtherMethod( ImmutableVector,"general,3",[IsObject,IsRowVector,IsBool],0, function(f,v,change) + Assert(1, IsField(f) or IsPrimePowerInt(f)); ConvertToVectorRepNC(v,f); if change then MakeImmutable(v); diff --git a/tst/teststandard/algext.tst b/tst/teststandard/algext.tst index 29160e264f..9b48f78f2c 100644 --- a/tst/teststandard/algext.tst +++ b/tst/teststandard/algext.tst @@ -2,7 +2,7 @@ ## ## Test of algebraic extensions. ## -#@local t, f0, p1, f1, p2, f2, p3, f3, p4, f4, x, l, a, ll, b +#@local t, f0, p1, f1, p2, f2, p3, f3, p4, f4, x, l, a, ll, b, pol, K, xinv, c gap> START_TEST("algext.tst"); gap> t := Runtime();; gap> f0 := GF(3);; @@ -25,5 +25,12 @@ gap> b := RootOfDefiningPolynomial(ll);; gap> (a+b)^5-(a-b)^5; 20*alpha^2*beta^3+(10*alpha^2-10)*beta+!4 +# +gap> pol := UnivariatePolynomial(GF(293), Z(293)^0 * ConwayPol(293,8));; +gap> K := AlgebraicExtension(GF(293), pol);; +gap> xinv := 1/PrimitiveElement(K); +Z(293)^145*a^7+Z(293)^274*a^3+Z(293)^120*a^2+Z(293)^134*a+Z(293)^179 +gap> c := Random(K);; + # gap> STOP_TEST("algext.tst",1);