CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418346
#############################################################################
##
#W  bugfix.tst
##
##
##  Exclude from testinstall.g: why?
##
gap> START_TEST("bugfixes test");
gap> DeclareGlobalVariable("foo73");
gap> InstallValue(foo73,true);
Error, InstallValue: value cannot be immediate, boolean or character

##  Check if ConvertToMatrixRepNC works properly. BH
##
gap> mat := [[1,0,1,1],[0,1,1,1]]*One(GF(2));
[ [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ] ]
gap> ConvertToMatrixRepNC( mat, GF(2) );
2
gap> DimensionsMat(mat);
[ 2, 4 ]
gap> mat := [[1,0,1,1],[0,1,1,1]]*One(GF(3));
[ [ Z(3)^0, 0*Z(3), Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0, Z(3)^0, Z(3)^0 ] ]
gap> ConvertToMatrixRepNC( mat, GF(3) );
3
gap> DimensionsMat(mat);
[ 2, 4 ]

##  Check that a new SpecialPcgs is created for which 
##    LGWeights can be set properly
##    see my mail of 2011/02/22 to gap-dev for details. BH
##
gap> G := PcGroupCode(640919430184532635765016241891519311\
> 98104010779278323886032740084599, 192200);;
gap> ind := InducedPcgsByPcSequence(FamilyPcgs (G), 
> [ G.1*G.2*G.3*G.4^2*G.5^2, G.4^2*G.5^3, G.6, G.7 ]);;
gap> H := GroupOfPcgs (ind);;
gap> pcgs := SpecialPcgs (H);;
gap> syl31 := SylowSystem( H )[3];;
gap> w := LGWeights( SpecialPcgs( syl31 ) );
[ [ 1, 1, 31 ], [ 1, 1, 31 ] ]

##  Check to see if the strongly connected component (Error 3) fix has been
##     installed
##
gap> M := Monoid([Transformation( [ 2, 3, 4, 5, 5 ] ),
> Transformation( [ 3, 1, 4, 5, 5 ] ),
> Transformation( [ 2, 1, 4, 3, 5 ] ) ]);;
gap> Size(GreensLClasses(M)[2])=2;
true

##  Check the fix in OrbitStabilizerAlgorithm (Error 4) for infinite groups.
##
gap> N:=GroupByGenerators(
>   [ [ [ 0, -1, 0, 0 ], [ 1, 0, 0, 0 ], [ 0, 0, 0, -1 ], [ 0, 0, 1, 0 ] ], 
>     [ [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ], [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ] ], 
>     [ [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ], [ -1, 0, 1, 0 ], [ 0, -1, 0, 1 ] ], 
>     [ [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ], [ -1, 0, 0, -1 ], [ 0, -1, 1, 0 ] ], 
>     [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 0, -1 ], [ 0, 0, 1, 0 ] ], 
>     [ [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ], [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ] ] ] );
<matrix group with 6 generators>
gap> IsFinite(N);
false
gap> G:=GroupByGenerators( [ [ [ 0, -1, 0, 0 ], [ 1, 0, 0, 0 ],
>   [ 0, 0, 0, -1 ], [ 0, 0, 1, 0 ] ] ] );
Group([ [ [ 0, -1, 0, 0 ], [ 1, 0, 0, 0 ], [ 0, 0, 0, -1 ], [ 0, 0, 1, 0 ] ] 
 ])
gap> Centralizer(N,G);
<matrix group of size infinity with 6 generators>

## iterated autgp (5)
gap> g:=Group((1,2,3),(4,5,6),(2,3)(5,6));;
gap> aut:=AutomorphismGroup(g);;
gap> ccu:=ConjugacyClasses(aut);;
gap> aut2:=AutomorphismGroup(aut);;

## field conversion (6)
gap> v := [];;
gap> ConvertToVectorRep(v,3);;
gap> ConvertToVectorRep(v,9);;

## EulerianFunction (10)
gap> EulerianFunction( DihedralGroup(8), 2);
24
gap> EulerianFunction( CyclicGroup(6), 1 );
2
gap> EulerianFunction( CyclicGroup(5), 1 );
4
gap> g:=SmallGroup(1,1);;
gap> ConjugacyClassesSubgroups(g);;
gap> g:=Group([ (3,5), (1,3,5) ]);;
gap> MaximalSubgroups(g);;

## GQuotients
gap> s := SymmetricGroup(4);;
gap> g := SmallGroup(48,1);;
gap> GQuotients(g,s);
[  ]

## Costantini bug, in inverting lists of compressed vectors
gap> p := 3;; e := 16;;
gap> g := ElementaryAbelianGroup(p^e);;
gap> l := PCentralLieAlgebra(g);;
gap> b := Basis(l);;
gap> b2 := b;;
gap> RelativeBasis(b,b2);;

## Testing if an element is in a Green's D equivalence class (fix 2 no. 12)
gap> s := Semigroup(Transformation([1,1,3,4]),Transformation([1,2,2,4]));;
gap> dc := GreensDClasses(s);;
gap> ForAll(dc, c->Transformation([1,1,3,4]) in c);
false

## Testing if Green's D classes can be compared for finite semigroups
gap> s := Transformation([1,1,3,4,5]);;
gap> c := Transformation([2,3,4,5,1]);;
gap> op5 := Semigroup(s,c);;
gap> dcl := GreensDClasses(op5);;
gap> ForAny(Cartesian(dcl,dcl), x->IsGreensLessThanOrEqual(x[1],x[2]));
true

## Testing that GroupHClassOfGreensDClass is implemented
gap> h := GroupHClassOfGreensDClass(dcl[4]);;

## Testing AssociatedReesMatrixSemigroupOfDClass.
##         IsZeroSimpleSemigroup, IsomorphismReesMatrixSemigroup,
##         and MatrixOfReesZeroMatrixSemigroup
##         create Greens D classes correctly.
gap> rms := AssociatedReesMatrixSemigroupOfDClass(dcl[5]);;
gap> s := Transformation([1,1,2]);;
gap> c := Transformation([2,3,1]);;
gap> op3 := Semigroup(s,c);;
gap> IsRegularSemigroup(op3);;
gap> dcl := GreensDClasses(op3);;
gap> dcl := SortedList(ShallowCopy(dcl));;
gap> d2 := dcl[2];; d1:= dcl[1];;
gap> i2 := SemigroupIdealByGenerators(op3,[Representative(d2)]);;
gap> GeneratorsOfSemigroup(i2);;
gap> i1 := SemigroupIdealByGenerators(i2,[Representative(d1)]);;
gap> GeneratorsOfSemigroup(i1);;
gap> c1 := ReesCongruenceOfSemigroupIdeal(i1);;
gap> q := i2/c1;;
gap> IsZeroSimpleSemigroup(q);;
gap> irms := IsomorphismReesZeroMatrixSemigroup(q);;
gap> MatrixOfReesZeroMatrixSemigroup(Range(irms));;
gap> g := Group( (1,2),(1,2,3) );;
gap> i := TrivialSubgroup( g );;
gap> CentralizerModulo( g, i, (1,2) );
Group([ (1,2) ])

##  bugs 2, 3, 6, 7, 20 for fix 2.
gap> x:= Sum( GeneratorsOfAlgebra( QuaternionAlgebra( Rationals, -2, -2 ) ) );;
gap> x * Inverse( x ) = One( x );
true
gap> LargestMovedPoint(ProjectiveSymplecticGroup(6,2)) = 63;
true
gap> t1:= CharacterTable( CyclicGroup( 2 ) );;  SetIdentifier( t1, "C2" );
gap> t2:= CharacterTable( CyclicGroup( 3 ) );;  SetIdentifier( t2, "C3" );
gap> t1 * t1;  ( t1 mod 2 ) * ( t1 mod 2 );
CharacterTable( "C2xC2" )
BrauerTable( "C2xC2", 2 )
gap> ( t1 mod 2 ) * t2;  t2 * ( t1 mod 2 );
BrauerTable( "C2xC3", 2 )
BrauerTable( "C3xC2", 2 )
gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
gap> chi:= TrivialCharacter( t );;
gap> IntScalarProducts( t, [ chi ], chi );
true
gap> NonnegIntScalarProducts( t, [ chi ], chi );
true
gap> Representative( TrivialSubgroup( Group( (1,2) ) ) );
()
gap> Representative( TrivialSubspace( GF(2)^2 ) );
[ 0*Z(2), 0*Z(2) ]
gap> g:=SmallGroup(70,3);;
gap> g:=GroupByPcgs(Pcgs(g));;
gap> IdGroup(g);
[ 70, 3 ]
gap> G := Group(());;F := FreeGroup( 1, "f" );;
gap> hom := GroupHomomorphismByImages(F,G,GeneratorsOfGroup(F),
> GeneratorsOfGroup(G));;
gap> PreImagesRepresentative(hom,());
<identity ...>

##  bug 2 for fix 4.
gap> 1 * One( Integers mod NextPrimeInt( 2^16 ) );
ZmodpZObj( 1, 65537 )
gap> f:=FreeGroup("a","b");;g:=f/[Comm(f.1,f.2),f.1^5,f.2^7];;Pcgs(g);;
gap> n:=Subgroup(g,[g.2]);; m:=ModuloPcgs(g,n);;
gap> ExponentsOfPcElement(m,m[1]);
[ 1 ]

##  bug 11 for fix 4.
gap> x:= Indeterminate( Rationals );;
gap> f:= x^4 + 3*x^2 + 1;;
gap> F:= AlgebraicExtension( Rationals, f );;
gap> Basis( F )[1];;

# bug in ReducedSCTable:
gap> T:= EmptySCTable( 1, 0, "antisymmetric" );
[ [ [ [  ], [  ] ] ], -1, 0 ]
gap> ReducedSCTable( T, Z(3)^0 );
[ [ [ [  ], [  ] ] ], -1, 0*Z(3) ]

## Rees Matrix bug fix 4
gap> s := Semigroup(Transformation([2,3,1]));;
gap> IsSimpleSemigroup(s);;
gap> irms := IsomorphismReesMatrixSemigroup(s);;
gap> Size(Source(irms));
3

## Semigroup/Monoid rewriting system bug for fix 4
gap> f := FreeSemigroup("a","b");;
gap> a := f.1;; b := f.2;;
gap> s := f/[[a*b,b],[b*a,a]];;
gap> rws := KnuthBendixRewritingSystem(s);
Knuth Bendix Rewriting System for Semigroup( [ a, b ] ) with rules 
[ [ a*b, b ], [ b*a, a ] ]
gap> MakeConfluent(rws);
gap> rws;
Knuth Bendix Rewriting System for Semigroup( [ a, b ] ) with rules 
[ [ a*b, b ], [ b*a, a ], [ a^2, a ], [ b^2, b ] ]
gap> HasReducedConfluentRewritingSystem(s);
true
gap> x:= Indeterminate( Rationals );;
gap> a:= 1/(1+x);;
gap> b:= 1/(x+x^2);;
gap> a=b;
false

##  bugs 12 and 14 for fix 4
gap> IsRowVector( [ [ 1 ] ] );
false
gap> IsRowModule( TrivialSubmodule( GF(2)^[2,2] ) );
false
gap> g:=SL(2,5);;c:=Irr(g)[6];;
gap> hom:=IrreducibleRepresentationsDixon(g,c);;
gap> Size(Image(hom));
60

##  bug 16 for fix 4
gap> Difference( [ 1, 1 ], [] );
[ 1 ]

## bug 17 for fix 4
gap> f := FreeGroup( 2 );;
gap> g := f/[f.1^4,f.2^4,Comm(f.1,f.2)];;
gap> Length(Elements(g));
16
gap> NrPrimitiveGroups(441);
24

##  bug 2 for fix 5
gap> IsSubset( GF(2)^[2,2], GF(4)^[2,2] );
false
gap> G:=Group((8,12)(10,14),(8,10)(12,14),(4,6)(12,14),(2,4)(10,12),
> (4,8)(6,10), (9,13)(11,15),(9,11)(13,15),(5,7)(13,15),(3,5)(11,13),
> (5,9)(7,11));;
gap> x:=Group((1,8)(2,7)(3,6)(4,5)(9,16)(10,15)(11,14)(12,13),
> (1,9)(2,10)(3,11)(4,12)(5,13)(6,14)(7,15)(8,16),
> (1,4)(2,3)(5,8)(6,7)(9,12)(10,11)(13,16)(14,15),
> (1,10)(2,9)(3,12)(4,11)(5,14)(6,13)(7,16)(8,15));;
gap> y:=Group((1,8)(2,7)(3,6)(4,5)(9,14)(10,13)(11,16)(12,15),
> (1,11)(2,10)(3,9)(4,12)(5,15)(6,14)(7,13)(8,16),
> (1,4)(2,3)(5,8)(6,7)(9,10)(11,12)(13,14)(15,16),
> (1,10)(2,11)(3,12)(4,9)(5,14)(6,15)(7,16)(8,13));;
gap> RepresentativeAction(G,x,y)<>fail;
true

##  bug 5 for fix 5
gap> BaseOrthogonalSpaceMat( [ [ 1, 0 ] ] );
[ [ 0, 1 ] ]

##  bug 7 for fix 5
gap> tbl:= CharacterTable( SL(2,3) );;  irr:= Irr( tbl );;
gap> lin:= Filtered( LinearCharacters( tbl ), x -> Order(x) = 3 );;
gap> deg3:= First( irr, x -> DegreeOfCharacter( x ) = 3 );;
gap> MolienSeries( tbl, lin[1] + deg3, lin[2] );
( 2*z^2+z^3-z^4+z^6 ) / ( (1-z^3)^2*(1-z^2)^2 )

##  bug 8 for fix 5
gap> l:= [ 1, 2 ];;  i:= Intersection( [ l ] );;
gap> IsIdenticalObj( l, i );
false

## bug 9 for fix 5
gap> A:=FullMatrixLieAlgebra(Rationals,2);
<Lie algebra over Rationals, with 3 generators>
gap> B:=LieDerivedSubalgebra(A);
<Lie algebra of dimension 3 over Rationals>
gap> D:=Derivations(Basis(B));
<Lie algebra of dimension 3 over Rationals>

##  bug 10 for fix 5
gap> k:=AbelianGroup([5,5,5]);
<pc group of size 125 with 3 generators>
gap> h:=SylowSubgroup(AutomorphismGroup(k),2);
<group>
gap> g:=SemidirectProduct(h,k);
<pc group with 10 generators>
gap> Centre(g);
Group([  ])

## bug 11 for fix 5
gap> m1:=[[0,1],[0,0]];;
gap> m2:=[[0,0],[1,0]];;
gap> m3:=[[1,0],[0,-1]];;
gap> M1:=MatrixByBlockMatrix(BlockMatrix([[1,1,m1]],2,2));;
gap> M2:=MatrixByBlockMatrix(BlockMatrix([[1,1,m2]],2,2));;
gap> M3:=MatrixByBlockMatrix(BlockMatrix([[1,1,m3]],2,2));;
gap> M4:=MatrixByBlockMatrix(BlockMatrix([[2,2,m1]],2,2));;
gap> M5:=MatrixByBlockMatrix(BlockMatrix([[2,2,m2]],2,2));;
gap> M6:=MatrixByBlockMatrix(BlockMatrix([[2,2,m3]],2,2));;
gap> L:=LieAlgebra(Rationals,[M1,M2,M3,M4,M5,M6]);
<Lie algebra over Rationals, with 6 generators>
gap> DirectSumDecomposition(L);
[ <two-sided ideal in <Lie algebra of dimension 6 over Rationals>, 
      (dimension 3)>, 
  <two-sided ideal in <Lie algebra of dimension 6 over Rationals>, 
      (dimension 3)> ]

##  bug 16 for fix 5
gap> IrrBaumClausen( Group(()));;

##  bug 17 for fix 5 (example taken from `vspcmat.tst')
gap> w:= LeftModuleByGenerators( GF(9),
> [ [ [ Z(27), Z(3) ], [ Z(3), Z(3) ] ],
> [ [ Z(27), Z(3) ], [ Z(3), Z(3) ] ],
> [ [ 0*Z(3), Z(3) ], [ Z(3), Z(3) ] ] ] );;
gap> w = AsVectorSpace( GF(3), w );
true

##  bug 18 for fix 5
gap> List( Irr( AlternatingGroup( 5 ) ), TestMonomial );;

##  bug 3 for fix 6
gap> Order( ZmodnZObj( 2, 7 ) );;  Inverse( ZmodnZObj( 2, 7 ) );;

##  bug 4 for fix 6
gap> tbl:= CharacterTable( SL(2,3) );;  irr:= Irr( tbl );;
gap> z := Indeterminate( Rationals : old );
x_1
gap> lin := Filtered( LinearCharacters( tbl ), x -> Order(x) = 3 );;
gap> deg3 := First( irr, x -> DegreeOfCharacter( x ) = 3 );;
gap> ser := MolienSeries( tbl, lin[1] + deg3, lin[2] );;
gap> MolienSeriesWithGivenDenominator( ser, [ 6,6,4,4 ] );
( 2*z^2+z^3+3*z^4+6*z^5+3*z^6+7*z^7+7*z^8+3*z^9+6*z^10+4*z^11+z^12+3*z^13+z^14\
+z^16 ) / ( (1-z^6)^2*(1-z^4)^2 )

#############################################################################
##
##  Fixes for GAP 4.4
##

##  bug 8 for fix 1
gap> q:= QuaternionAlgebra( Rationals );;
gap> t:= TrivialSubspace( q );;
gap> tt:= Subspace( q, [] );;
gap> Intersection2( t, tt );;
gap> g:=SmallGroup(6,2);;
gap> f:=FreeGroup(3);;
gap> f:=f/[f.2*f.3];;
gap> q:=GQuotients(f,g);;
gap> k:=List(q,Kernel);;
gap> k:=Intersection(k);;
gap> hom:=IsomorphismFpGroup(TrivialSubgroup(g));;
gap> IsFpGroup(Range(hom));
true

## bug 3 for fix 2
gap> Order([[-E(7),0,0,0],[0,-E(7)^6,0,0],[0,0,E(21),0],[0,0,0,E(21)^20]]);
42
gap> Order(-E(7)*IdentityMat(14));
14

## bug 5 for fix 2
gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
gap> PowerMap( t, -1 );;  PowerMap( t, -1, 2 );;
gap> m:= t mod 2;;
gap> PowerMap( m, -1 );;  PowerMap( m, -1, 2 );;

## bug 9 for fix 2
gap> IsSimple(Ree(3));
false

## bug 10 for fix 2
gap> g:= GU(3,4);;  g.1 in g;
true
gap> ForAll( GeneratorsOfGroup( Sp(4,4) ), x -> x in SP(4,2) );
false

## bug 12 for fix 2
gap> IsMatrix( Basis( VectorSpace( GF(2), Basis( GF(2)^2 ) ) ) );
true

## bug 13 for fix 2
gap> -1 in [1..2];
false

## bug 16-18 for fix 4
gap> AbelianInvariantsMultiplier(SL(3,2));
[ 2 ]
gap> AllPrimitiveGroups(Size,60,NrMovedPoints,[2..2499]);
[ A(5), PSL(2,5), A(5) ]
gap> ix18:=X(GF(5),1);;f:=ix18^5-1;;
gap> Discriminant(f);
0*Z(5)

## bug 3 for fix 5
gap> One( DirectProduct( Group( [], () ), Group( [], () ) ) );;

## bug 4 for fix 5
gap> emb:= Embedding( DirectProduct( Group( (1,2) ), Group( (1,2) ) ), 1 );;
gap> PreImagesRepresentative( emb, (1,2)(3,4) );
fail

## bug 6 for fix 5
gap> v:= VectorSpace( Rationals, [ [ 1 ] ] );;
gap> x:= LeftModuleHomomorphismByImages( v, v, Basis( v ), Basis( v ) );;
gap> x + 0*x;;

## bug 7 for fix 5
gap> a:= GroupRing( GF(2), Group( (1,2) ) );;
gap> 1/3 * a.1;;  a.1 * (1/3);;

## bug 10 for fix 5
gap> R:= Integers mod 6;;
gap> Size( Ideal( R, [ Zero( R ) ] ) + Ideal( R, [ 2 * One( R ) ] ) );
3

## for changes 4.4.4 -> 4.4.5  (extracted from corresponding dev/Update)

# For fixes:

# 2005/01/06 (TB)
gap> One( DirectProduct( Group( [], () ), Group( [], () ) ) );;

# 2005/01/06 (TB)
gap> emb:= Embedding( DirectProduct( Group( (1,2) ), Group( (1,2) ) ), 1 );;
gap> PreImagesRepresentative( emb, (1,2)(3,4) );
fail

# 2005/02/21 (TB)
gap> v:= VectorSpace( Rationals, [ [ 1 ] ] );;
gap> x:= LeftModuleHomomorphismByImages( v, v, Basis( v ), Basis( v ) );;
gap> x + 0*x;;

# 2005/02/21 (TB)
# 2006/03/13 (JJM) - removed this duplicate of 'bug 7 for fix 5' test
#gap> a:= GroupRing( GF(2), Group( (1,2) ) );;
#gap> 1/3 * a.1;;  a.1 * (1/3);;

# 2005/02/26 (AH)
gap> Random(GF(26831423036065352611));;

# 2005/03/05 (AH)
gap> x:=X(Rationals);;
gap> PowerMod(x,3,x^2);
0
gap> PowerMod(x,1,x);
0

# 2005/03/08 (AH)
gap> p:=[0,1];
[ 0, 1 ]
gap> UnivariatePolynomial(Rationals,p);
x_1
gap> p;
[ 0, 1 ]

# 2005/03/31 (TB)
gap> R:= Integers mod 6;;
gap> Size( Ideal( R, [ Zero( R ) ] ) + Ideal( R, [ 2 * One( R ) ] ) );
3

# 2005/04/12 (FL (includes a fix in dev-version by Burkhard))
## the less memory GAP has, the earlier the following crashed GAP
#out := OutputTextFile("/dev/null",false);
#g := SymmetricGroup(1000000);
#for i in [1..100] do
#    Print(i, " \c");
#    r := PseudoRandom(g);
#    PrintTo(out, "Coset representative is ", r, "\n");
#od;

# 2005/04/12 (FL)
gap> IntHexString(['a','1']);
161

# 2005/04/12 (AH)
gap> f:=FreeGroup(IsSyllableWordsFamily,8);;
gap> g:=GeneratorsOfGroup(f);;
gap> g1:=g[1];;
gap> g2:=g[2];;
gap> g3:=g[3];;
gap> g4:=g[4];;
gap> g5:=g[5];;
gap> g6:=g[6];;
gap> g7:=g[7];;
gap> g8:=g[8];;
gap> rws:=SingleCollector(f,[ 2, 3, 2, 3, 2, 3, 2, 3 ]);;
gap> r:=[
>   [1,g4*g6],
>   [3,g4],
>   [5,g6*g8^2],
>   [7,g8],
> ];;
gap> for x in r do SetPower(rws,x[1],x[2]);od;
gap> G:= GroupByRwsNC(rws);;
gap> f1:=G.1;;
gap> f2:=G.2;;
gap> f3:=G.3;;
gap> f4:=G.4;;
gap> f5:=G.5;;
gap> f6:=G.6;;
gap> f7:=G.7;;
gap> f8:=G.8;;
gap> a:=Subgroup(G,[f3*f6*f8^2, f5*f6*f8^2, f7*f8, f4*f6^2*f8 ]);;
gap> b:=Subgroup(G,[f2^2*f4^2*f6*f7*f8^2, f2*f4*f6^2*f8^2, f5*f6^2*f8,
>                   f2^2*f6^2*f8, f2*f3*f4, f2^2]);;
gap> Size(Intersection(a,b))=Number(a,i->i in b);
true

# 2005/04/15 (TB)
gap> CompareVersionNumbers( "1.0", ">=9.9" );
false

# 2005/04/26 (SL)

# too complicated to construct

# 2005/04/27 (TB)
gap> Iterator( Subspaces( VectorSpace( GF(2), [ X( GF(2) ) ] ) ) );;

# 2005/04/27 (TB)
gap> String( [ [ '1' ] ] );  String( rec( a:= [ '1' ] ) );
"[ \"1\" ]"
"rec( a := \"1\" )"

# 2005/05/03 (BE)
gap> SmallGroupsInformation(512);

  There are 10494213 groups of order 512.
     1 is cyclic. 
     2 - 10 have rank 2 and p-class 3.
     11 - 386 have rank 2 and p-class 4.
     387 - 1698 have rank 2 and p-class 5.
     1699 - 2008 have rank 2 and p-class 6.
     2009 - 2039 have rank 2 and p-class 7.
     2040 - 2044 have rank 2 and p-class 8.
     2045 has rank 3 and p-class 2.
     2046 - 29398 have rank 3 and p-class 3.
     29399 - 30617 have rank 3 and p-class 4.
     30618 - 31239 have rank 3 and p-class 3.
     31240 - 56685 have rank 3 and p-class 4.
     56686 - 60615 have rank 3 and p-class 5.
     60616 - 60894 have rank 3 and p-class 6.
     60895 - 60903 have rank 3 and p-class 7.
     60904 - 67612 have rank 4 and p-class 2.
     67613 - 387088 have rank 4 and p-class 3.
     387089 - 419734 have rank 4 and p-class 4.
     419735 - 420500 have rank 4 and p-class 5.
     420501 - 420514 have rank 4 and p-class 6.
     420515 - 6249623 have rank 5 and p-class 2.
     6249624 - 7529606 have rank 5 and p-class 3.
     7529607 - 7532374 have rank 5 and p-class 4.
     7532375 - 7532392 have rank 5 and p-class 5.
     7532393 - 10481221 have rank 6 and p-class 2.
     10481222 - 10493038 have rank 6 and p-class 3.
     10493039 - 10493061 have rank 6 and p-class 4.
     10493062 - 10494173 have rank 7 and p-class 2.
     10494174 - 10494200 have rank 7 and p-class 3.
     10494201 - 10494212 have rank 8 and p-class 2.
     10494213 is elementary abelian.

  This size belongs to layer 7 of the SmallGroups library. 
  IdSmallGroup is not available for this size. 
 

# 2005/05/04 (SL)
gap> c := [1,1,0,1]*Z(2);
[ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ]
gap> m := [1,1]*Z(2);
[ Z(2)^0, Z(2)^0 ]
gap> PowerModCoeffs(c, 1, m);
[ Z(2)^0 ]
gap> ConvertToVectorRep(c, 2);
2
gap> ConvertToVectorRep(m, 2);
2
gap> Print(PowerModCoeffs(c, 1, m), "\n");
[ Z(2)^0 ]

# 2005/05/06 (SL)
gap> A:=[[Z(2)]];; ConvertToMatrixRep(A,2);;
gap> Sort(A); A;
<a 1x1 matrix over GF2>

# 2005/05/09 (TB)
# call: gap -A
# gap> SaveWorkspace( "wsp" );;
# call: gap -A -L wsp

# 2005/05/09 (Colva, FL (for 4R4))
gap> L:=AllPrimitiveGroups(NrMovedPoints,26,Size,[1..2^28-1]);
[ PSL(2, 25), PGL(2, 25), PSigmaL(2, 25), PSL(2, 25).2_3, PGammaL(2, 25) ]

# For new features:

# 2005/04/13 (FL)
gap> IsCheapConwayPolynomial(5,96);
false

# 2005/04/21 (FL)
gap> NormalBase( GF(3^6) );
[ Z(3^6)^2, Z(3^6)^6, Z(3^6)^18, Z(3^6)^54, Z(3^6)^162, Z(3^6)^486 ]
gap>  NormalBase( GF( GF(8), 2 ) );
[ Z(2^6), Z(2^6)^8 ]

# 2005/04/26 (SL, FL)
gap> AClosestVectorCombinationsMatFFEVecFFECoords;
<Operation "AClosestVectorCombinationsMatFFEVecFFECoords">
gap> ConstituentsPolynomial;
function( p ) ... end

# 2005/04/27 (TB)
gap> IsBound( CycList );
true

# 2005/05/03 (SK)
gap> x := Indeterminate(Integers);;
gap> ContinuedFractionExpansionOfRoot(x^2-7,20);
[ 2, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1, 4, 1, 1, 1 ]
gap> ContinuedFractionExpansionOfRoot(x^2-7,0);
[ 2, 1, 1, 1, 4 ]
gap> ContinuedFractionExpansionOfRoot(x^3-2,20);
[ 1, 3, 1, 5, 1, 1, 4, 1, 1, 8, 1, 14, 1, 10, 2, 1, 4, 12, 2, 3 ]
gap> ContinuedFractionExpansionOfRoot(x^5-x-1,50);
[ 1, 5, 1, 42, 1, 3, 24, 2, 2, 1, 16, 1, 11, 1, 1, 2, 31, 1, 12, 5, 1, 7, 11, 
  1, 4, 1, 4, 2, 2, 3, 4, 2, 1, 1, 11, 1, 41, 12, 1, 8, 1, 1, 1, 1, 1, 9, 2, 
  1, 5, 4 ]
gap> ContinuedFractionApproximationOfRoot(x^2-2,10);
3363/2378
gap> 3363^2-2*2378^2;
1
gap> z := ContinuedFractionApproximationOfRoot(x^5-x-1,20);
499898783527/428250732317
gap> z^5-z-1;
486192462527432755459620441970617283/
14404247382319842421697357558805709031116987826242631261357

# 2005/05/03 (SK)
gap> l := AllSmallGroups(12);;
gap> List(l,StructureDescription);; l;
[ C3 : C4, C12, A4, D12, C6 x C2 ]
gap> List(AllSmallGroups(40),G->StructureDescription(G:short));
[ "5:8", "40", "5:8", "5:Q8", "4xD10", "D40", "2x(5:4)", "(10x2):2", "20x2", 
  "5xD8", "5xQ8", "2x(5:4)", "2^2xD10", "10x2^2" ]
gap> List(AllTransitiveGroups(DegreeAction,6),G->StructureDescription(G:short));
[ "6", "S3", "D12", "A4", "3xS3", "2xA4", "S4", "S4", "S3xS3", "(3^2):4", 
  "2xS4", "A5", "(S3xS3):2", "S5", "A6", "S6" ]
gap> StructureDescription(PSL(4,2));
"A8"

# 2005/05/03 (BE)
gap> NumberSmallGroups(5^6);
684
gap> NumberSmallGroups(5*7*9*11*13);
22

# 2005/05/05 (TB)
gap> IsBound( ShowPackageVariables );
true

# 2005/05/05 (TB)
gap> IsReadableFile( Filename( DirectoriesLibrary( "tst" ), "testutil.g" ) );
true

# 2005/05/06 (TB)
gap> IsBound( HasMultiplicationTable );
true

#############################################################################
##
##  for changes 4.4.5 -> 4.4.6  (extracted from corresponding dev/Update)

# For fixes:

# 2005/05/17 (AH)
gap> IsConjugate(TransitiveGroup(9,19),Group([ (2,8,9,3)(4,6,7,5),
> (2,9)(3,8)(4,7)(5 ,6), (1,2,9)(3,4,5)(6,7,8), (1,4,7)(2,5,8)(3,6,9) ]),
> Group([ (3,7)(4,8)(5,6), (2,9)(3,8)(4,7)(5,6),(1,7,4)(2,8,5)(3,9,6),
> (1,6,5)(2,7,3)(4,9,8) ]));;

# 2005/05/18 (TB)
gap> t:= Runtime();;
gap> CayleyGraphSemigroup( Monoid( Transformation([2,3,4,5,6,1,7]),
>      Transformation([6,5,4,3,2,1,7]), Transformation([1,2,3,4,6,7,7]) ) );;
gap> if Runtime() - t > 5000 then
>      Print( "#E  efficiency problem with enumerators of semigroups!\n" );
> fi;

# 2005/06/06 (AH)
gap> Irr(SmallGroup(516,11));;

# 2005/06/13 (AH)
gap> IsSimple(AlternatingGroup(3));
true

# 2005/06/17 (SL)
gap> l := [1,2,3,4];
[ 1, 2, 3, 4 ]
gap> COPY_LIST_ENTRIES(l,2,1,l,3,1,3);
gap> l;
[ 1, 2, 2, 3, 4 ]

# 2005/07/09 (AH)
gap> CompositionSeries(PerfectGroup(IsPermGroup,262440,1));;

# 2005/07/13 (JS)
gap> PerfectGroup(7800,1);; # load perf2.grp
gap> PerfectGroup(7680,1);; # should load perf1.grp, gives error in 4.4.5

# 2005/07/13 (JS)
gap> NrPerfectLibraryGroups(1);
0

# 2005/07/18 (FL)
gap> TypeObj(IMPLICATIONS);;

# 2005/07/20 (TB)
gap> T:= EmptySCTable( 2, 0 );;
gap> SetEntrySCTable( T, 1, 1, [ 1/2, 1, 2/3, 2 ] );
gap> A:= AlgebraByStructureConstants( Rationals, T, "A." );;
gap> GeneratorsOfAlgebra( A );
[ A.1, A.2 ]

# 2005/07/20 (TB)
gap> F:= FreeAssociativeAlgebra( Rationals, 2 );;
gap> IsAssociativeElement( F.1 );
true
gap> F:= FreeAlgebra( Rationals, 2 );;
gap> IsAssociativeElement( F.1 );
false

# 2005/07/21 (JS)
gap> G:=PerfectGroup(IsPermGroup,734832,1);;
gap> H:=PerfectGroup(IsPermGroup,734832,2);;
gap> K:=PerfectGroup(IsPermGroup,734832,3);;
gap> Assert(0,H<>K); # Fails in 4.4.5
gap> Assert(0,Size(G)=734832 and IsPerfectGroup(G)); # Sanity check
gap> Assert(0,Size(H)=734832 and IsPerfectGroup(H)); # Sanity check
gap> Assert(0,Size(K)=734832 and IsPerfectGroup(K)); # Sanity check
gap> Assert(0,Size(ComplementClassesRepresentatives(G,SylowSubgroup(FittingSubgroup(G),3)))=1); # Iso check
gap> Assert(0,Size(ComplementClassesRepresentatives(H,SylowSubgroup(FittingSubgroup(H),3)))=3); # Iso check
gap> Assert(0,Size(ComplementClassesRepresentatives(K,SylowSubgroup(FittingSubgroup(K),3)))=0); # Iso check

# 2005/08/10 (TB)
gap> ApplicableMethod( \in, [ 1, Rationals ] );
function( x, Rationals ) ... end

# 2005/08/11 (JS)
gap> List([1,2,3],k->IdGroup(SylowSubgroup(PerfectGroup(IsPermGroup,864000,k),2)));
[ [ 256, 55700 ], [ 256, 55970 ], [ 256, 56028 ] ]

# 2005/08/11 (TB)
# gap> fam:= NewFamily( "fam" );;
# gap> DeclareGlobalVariable( "TestFam" );
# gap> InstallValue( TestFam, CollectionsFamily( fam ) );
# #I  please use `BindGlobal' for the family object CollectionsFamily(...), not \
# `InstallValue'
# gap> IsIdenticalObj( TestFam, CollectionsFamily( fam ) );
# false
# gap> MakeReadWriteGlobal( "TestFam" );  UnbindGlobal( "TestFam" );

# 2005/08/15 (AH)
gap> Centre( MagmaByMultiplicationTable( [ [ 2, 2 ], [ 2, 1 ] ] ) );
[  ]

# 2005/08/17 (Max)
# Test code is not possible to provide because the error condition
# cannot be tested in a platform independent way.

# 2005/08/19 (JS)
gap> PermutationCycle((1,2,3,4,5,6)^2,[1..6],1); # returns fail in 4.4.5
(1,3,5)

# 2005/08/19 (JS)
gap> f:=function() Assert(0,false); end;; g:=function() f(); end;;
gap> ##  The following should just trigger a normal error, but in 4.4.5
gap> ##  it will send a few hundred lines before crashing:
gap> # g();

# 2005/08/19 (JS)
gap> g:= SmallGroup( 48, 30 );;
gap> AbelianInvariantsMultiplier( g ); # returned [ 2, 2 ] in 4.4.5
[ 2 ]

# 2005/08/19 (SL)
gap> Inverse(0*Z(2));
fail
gap> Inverse(0*Z(3));
fail

# 2005/08/22 (JS+AH)
gap> ##  The mailing lists contain more specific test code that is longer.
gap> ##  The following should never terminate, but does in 4.4.5
gap> # repeat G:=PerfectGroup(IsPermGroup,79200,3); P:=SylowSubgroup(G,11);
gap> # N:=Normalizer(G,P); Q:=N/P; until Size(DerivedSubgroup(Q)) <> 120;

# 2005/08/23 (TB)
gap> g:= SymmetricGroup( 4 );; IsSolvable( g );; Irr( g );;
gap> meth:= ApplicableMethod( CharacterDegrees, [ g, 0 ] );;
gap> meth( g, 0 );
"TRY_NEXT_METHOD"

# 2005/08/23 (TB)
gap> RereadLib( "debug.g" );
gap> Debug( Size );
Usage: Debug( <func>[, <name>] );
       where <func> is a function but not an operation,
       and   <name> is a string.

# 2005/08/23 (FL)
# commented out the test and the error message,
# since a different message is printed on 32 bit systems and 64 bit systems
gap> a := 2^(8*GAPInfo.BytesPerVariable-4)-1;;
gap> Unbind( x );
gap> # x := [-a..a];;

# Range: the length of a range must be less than 2^28
gap> IsBound(x);
false

# 2005/08/25 (JS)
gap> G := Group((1,2));; PrimePGroup(G);
2
gap> PrimePGroup(Subgroup(G,[])); # returns 2 in 4.4.5
fail

# 2005/08/25 (JS)
gap> HasIsPGroup( SylowSubgroup( SymmetricGroup( 5 ), 5 ) ); # false in 4.4.5
true

# 2005/08/26 (Max)
gap> IsOperation(MutableCopyMat);
true

# For new features:

# 2005/06/08 (SL)
gap> gamma := [[2,5],[3],[4,5],[1],[]];
[ [ 2, 5 ], [ 3 ], [ 4, 5 ], [ 1 ], [  ] ]
gap> STRONGLY_CONNECTED_COMPONENTS_DIGRAPH(gamma);
[ [ 5 ], [ 1, 2, 3, 4 ] ]

# 2005/07/18 (FL)
# takes too long in repeatedly running  tests
# IsProbablyPrimeInt(2^9689-1);

# 2005/07/20 (SK), 2009/09/28 (AK)
gap> Float("355")/Float("113");
3.14159
gap> Rat(last);
355/113
gap> 1/4*last2;
0.785398

# 2005/07/20 (SK)
gap> PadicValuation(288/17,2);
5

# 2005/07/20 (TB)
gap> T:= EmptySCTable( 2, 0 );;
gap> SetEntrySCTable( T, 1, 1, [ 1/2, 1, 2/3, 2 ] );
gap> A:= AlgebraByStructureConstants( Rationals, T );;  A.1;
v.1

# 2005/07/21 (FL)
gap> IsCheapConwayPolynomial(5, 55);
true
gap> IsCheapConwayPolynomial(2, 108);
true

# 2005/07/22 (SK)
gap> EpimorphismFromFreeGroup(SymmetricGroup(4));
[ x1, x2 ] -> [ (1,2,3,4), (1,2) ]

# 2005/07/22 (SK)
gap> ForAll([Lambda,Phi,Sigma,Tau],IsOperation);
true

# 2005/08/08 (CMRD)
gap> AllPrimitiveGroups( Size, 60 );;

#W  AllPrimitiveGroups: Degree restricted to [ 1 .. 2499 ]

# 2005/08/11 (TB)
gap> DeclareGlobalVariable( "TestVariable" );
gap> InstallFlushableValue( TestVariable, rec() );
gap> MakeReadWriteGlobal( "TestVariable" );  UnbindGlobal( "TestVariable" );

# 2005/08/11 (TB)
gap> DeclareOperation( "TestOperation", [ IsGroup, IsGroup ] );
gap> InstallMethod( TestOperation, [ "IsGroup and IsAbelian", "IsGroup" ],
>        function( G, H ) return true; end );
gap> MakeReadWriteGlobal( "TestOperation" );  UnbindGlobal( "TestOperation" );

# 2005/08/15 (SK)
gap> List([0..5],i->PartialFactorization(7^64-1,i));
[ [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 
      1868505648951954197516197706132003401892793036353 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 
      5293217135841230021292344776577913319809612001 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 134818753, 47072139617, 
      531968664833, 1567903802863297 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649, 
      134818753, 47072139617, 531968664833 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649, 
      134818753, 47072139617, 531968664833 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649, 
      134818753, 47072139617, 531968664833 ] ]

# 2005/08/24 (SL, FL)
gap> l:=[1,2];;
gap> Remove(l,1); l;
1
[ 2 ]
gap> Add(l, 100, 1); l;
[ 100, 2 ]

#############################################################################
##
##  for changes 4.4.6 -> 4.4.7  (extracted from corresponding dev/Update)

# For fixes:

# 2005/09/07 (TB)
gap> Is8BitMatrixRep( InvariantQuadraticForm( SO( 7, 3 ) ).matrix );
true
gap> Is8BitMatrixRep( InvariantBilinearForm( Sp( 4, 4 ) ).matrix );
true
gap> Is8BitMatrixRep( InvariantSesquilinearForm( SU( 4, 2 ) ).matrix );
true

# 2005/09/13 (AH)
gap> r:=PolynomialRing(Rationals,3);; eo:=EliminationOrdering([2],[3,1]);;

# 2005/09/20 (SK)
gap> # None as the library methods for `NormalSubgroups' apparently obey
gap> # the `rule' that the trivial subgroup appears in the first and the
gap> # whole group appears in the last position.

# 2005/10/05 (SL and MN)
gap> p := PermList(Concatenation([2..10000],[1]));;
gap> for i in [1..1000000] do a := p^0; od; time1 := time;;
gap> for i in [1..1000000] do a := OneOp(p); od; time2 := time;;
gap> if time1 <= 3 * time2 then Print("Fix worked\n"); fi;
Fix worked

# 2005/10/14 (BH)
gap> IsBoundGlobal ("ComputedInducedPcgses");
true

# 2005/10/26 (JS)
gap> PolynomialByExtRep(FamilyObj(X(Rationals)),[[1,1],1,[2,1],1]); # x_2+x_1 in 4.4.6
x_1+x_2

# 2005/10/28 (TB)
gap> fail in List( Irr( SymmetricGroup( 3 ) ), Inverse );
true

# 2005/10/28 (TB)
gap> Order( ClassFunction( CyclicGroup( 1 ), [ (1-EI(5))/ER(6) ] ) );
infinity

# 2005/10/28 (TB)
gap> rg:= GroupRing( GF(2), SymmetricGroup( 3 ) );;
gap> i:= Ideal( rg, [ Sum( GeneratorsOfAlgebra( rg ){ [ 1, 2 ] } ) ] );;
gap> Dimension( rg / i );;

# 2005/11/22 (TB)
gap> Z(4) in Group( Z(2) );;

# 2005/11/25 (JS)
gap> NrPerfectLibraryGroups(450000);
3
gap> NrPerfectLibraryGroups(962280);
1
gap> NrMovedPoints(PerfectGroup(IsPermGroup,129024,2));
288
gap> NrMovedPoints(PerfectGroup(IsPermGroup,258048,2));
576
gap> NrMovedPoints(PerfectGroup(IsPermGroup,516096,1));
400

# 2005/11/28 (FL)
gap> ConjugacyClasses(SL(2,3))[1];
[ [ Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3)^0 ] ]^G

# 2005/11/28 (TB)
gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
gap> SetIdentifier( t, "Sym(4)" );
gap> Display( t, rec( classes:= [ 4 ] ) );
Sym(4)

     2  .
     3  1

       3a
    2P 3a
    3P 1a

X.1     1
X.2     .
X.3    -1
X.4     .
X.5     1

# 2005/11/29 (TB)
gap> l:= [ [ 1, 2 ] ];;  CheckFixedPoints( [ 1 ], l, [ 1, 1 ] );;  l;
[ 1 ]

# 2005/11/29 (TB)
gap> IsIdenticalObj( VectorSpace, FreeLeftModule );
false

# 2005/11/29 (TB)
gap> AsGroup( [ 1, -1 ] );
#I  no groups of cyclotomics allowed because of incompatible ^
fail

# 2005/12/21 (BH)
gap> ApplicableMethod (CharacteristicPolynomial, [GF(2), GF(4), [[Z(2)]], 1])=fail;
false

# 2005/12/22 (Robert F. Morse)
# 2011/09/13 (Updated by AK as suggested by JM)
# 2013/09/04 (Updated by JM)
gap> t:=Transformation([1,2,3,3]);;
gap> s:=FullTransformationSemigroup(4);;
gap> ld:=GreensDClassOfElement(FullTransformationSemigroup(4),
> Transformation([1,2,3,3]));;
gap> rs:=AssociatedReesMatrixSemigroupOfDClass(ld);;
gap> mat:=MatrixOfReesZeroMatrixSemigroup(rs);;
gap> Length(mat);
4
gap> t:=UnderlyingSemigroupOfReesMatrixSemigroup(rs);;
gap> List(mat, x-> [Size(x), Number(x, y-> y=0)]);
[ [ 6, 3 ], [ 6, 3 ], [ 6, 3 ], [ 6, 3 ] ]
gap> Size(UnderlyingSemigroupOfReesZeroMatrixSemigroup(rs));
6

# 2006/01/11 (MC)
gap> d := DirectoryCurrent();;
gap> f := Filename(DirectoriesSystemPrograms(), "rev");;
gap> if f <> fail then
>      s := InputOutputLocalProcess(d,f,[]);;
>      if PrintFormattingStatus(s) <> false then
>        Print( "unexpected PrintFormattingStatus value\n" );
>      fi;
>      SetPrintFormattingStatus(s,false);
>      AppendTo(s,"The cat sat on the mat\n");
>      if ReadLine(s) <> "tam eht no tas tac ehT\n" then
>        Print( "There is a problem concerning a cat on a mat.\n" );
>      fi;
>      CloseStream(s);
>    fi;

# 2006/01/18 (AH)
gap> G:=WreathProduct(CyclicGroup(3),Group((1,2,3),(4,5,6)));;
gap> Assert(0,Size(Group(GeneratorsOfGroup(G)))=6561);

# 2006/01/25 (TB)
gap> Basis( Rationals );;

# 2006/02/14 (SK)
gap> testG :=
>    function ( a, b )
>      local  M1;
>       M1 := [ [ [      0, -E(a)^-1 ], [ -E(a),       0 ] ],
>               [ [      0,       -1 ], [     1,       0 ] ],
>               [ [ E(4*b),        0 ], [     0, -E(4*b) ] ],
>               [ [     -1,        0 ], [     0,      -1 ] ]];
>       return (Group(M1));
>    end;;
gap> StructureDescription(testG(8,2));
"(C8 x C4) : C2"
gap> StructureDescription(testG(8,3));
"C3 x QD16"
gap> StructureDescription(testG(8,4));
"(C16 x C4) : C2"

# 2006/02/27 (AH)
gap> RepresentativeAction(Group(()), [1], [2], OnSets);;

# 2006/03/02 (AH)
gap> x_1:=X(Rationals,"x_1":old);;
gap> x_2:=X(Rationals,"x_2":old);;
gap> x_3:=X(Rationals,"x_3":old);;
gap> x_4:=X(Rationals,"x_4":old);;
gap> x_5:=X(Rationals,"x_5":old);;
gap> L:=[(x_3+x_4)*x_5-x_1,(x_3+x_4)*x_4-x_2,x_5^2+x_4^2-1];;
gap> ReducedGroebnerBasis(L,MonomialLexOrdering([x_1,x_2,x_3,x_4,x_5]));
[ x_4^2+x_5^2-1, -x_3*x_4+x_5^2+x_2-1, -x_3*x_5-x_4*x_5+x_1 ]
gap> ReducedGroebnerBasis(L,MonomialLexOrdering([x_4,x_5,x_1,x_2,x_3]));
[ x_1^4+2*x_1^2*x_2^2-x_1^2*x_3^2+x_2^4-x_2^2*x_3^2-2*x_1^2*x_2-2*x_2^3+x_2^2,
  -x_1^3-x_1*x_2^2+x_1*x_3^2+x_2*x_3*x_5+x_1*x_2, 
  x_1^2*x_2+x_1*x_3*x_5+x_2^3-x_2*x_3^2-x_1^2-2*x_2^2+x_2, 
  x_1^2*x_5+x_2^2*x_5-x_1*x_3-x_2*x_5, -x_1^2-x_2^2+x_3^2+x_5^2+2*x_2-1, 
  -x_1^2-x_2^2+x_3^2+x_3*x_4+x_2, x_1*x_5+x_2*x_4-x_3-x_4, x_1*x_4-x_2*x_5, 
  x_3*x_5+x_4*x_5-x_1, x_1^2+x_2^2-x_3^2+x_4^2-2*x_2 ]

# 2006/03/03 (FL)
gap> s := "";; str := OutputTextString(s, false);;
gap> for i in [0..255] do WriteByte(str, i); od;
gap> CloseStream(str);
gap> s = List([0..255], CHAR_INT);
true

# 2006/2/20 (AH)
gap> group1 := Group([ (1,3)(2,5)(4,7)(6,8), (1,4)(2,6)(3,7)(5,8),
> (1,5)(2,3)(4,8)(6,7), (2,3,4,5,7,8,6), (3,4,7)(5,6,8) ]);;
gap> group2 := Group([ (1,3,4,7,2,6,8), (1,8,7,5,3,6,2) ]);;
gap> group3 := SymmetricGroup([1..8]);;
gap> RepresentativeAction(group3,group1,group2);
fail

# 2006/03/08 (SL)
gap> Z(3,30);
z

# For new features:

# 2005/12/08 (TB, Michael Hartley (implementation of a prototype))
gap> LowIndexSubgroupsFpGroupIterator;;

# 2005/12/22 (Robert F. Morse)
gap> g := Image(IsomorphismFpGroup(SmallGroup(8,3)));;
gap> h := Image(IsomorphismFpGroup(SmallGroup(120,5)));;
gap> fp := FreeProduct(g,h);;
gap> IsFpGroup(fp);
true
gap> emb := Embedding(fp,1);;
gap> IsMapping(emb);
true
gap> dp := DirectProduct(g,h);;
gap> IsFpGroup(dp);
true
gap> IdGroup(dp);
[ 960, 5746 ]
gap> IdGroup(Image(Projection(dp,2)));
[ 120, 5 ]
gap> IdGroup(Image(Embedding(dp,1)));
[ 8, 3 ]

# 2005/12/28 (FL)
gap> IsCheapConwayPolynomial(2,114);
true

#############################################################################
##
##  for changes 4.4.7 -> 4.4.8  (extracted from corresponding dev/Update)

# For fixes:

# 2006/04/07 (TB)
gap> G:= SymmetricGroup(3);;
gap> m:= InnerAutomorphism( G, (1,2) );;
gap> n:= TransformationRepresentation( InnerAutomorphism( G, (1,2,3) ) );;
gap> m * n;;  n * m;;

# 2006/04/18 (SK)
gap> gp := FreeGroup(1);; Size(gp);;
gap> DirectProduct(gp,gp);
<fp group of size infinity on the generators [ f1, f2 ]>

# 2006/04/18 (TB)
gap> Decomposition( [ [1,1], [E(3),E(3)^2] ], [ [1,-1] ], 1 );
[ fail ]

# 2006/05/12 (TB)
gap> Center( OctaveAlgebra( GF(13) ) );;

# 2006/07/25 (AH)
gap> g:=TransitiveGroup(10,8);;
gap> ConjugatorOfConjugatorIsomorphism(ConjugatorAutomorphism(g,(4,9)));
(1,6)(2,7)(3,8)(5,10)

# 2006/07/27 (SK)
gap> IsPolycyclicGroup(SymmetricGroup(4));
true
gap> IsPolycyclicGroup(SymmetricGroup(5));
false
gap> IsPolycyclicGroup(Group([[1,1],[0,1]]));
true

## 2006/09/20 (JJM)
## comment out this test, since it will not complete without Polenta.
#gap> IsPolycyclicGroup(Group([[1,1],[0,1]],[[0,1],[1,0]]));
#false

# 2006/07/28 (RFM)
gap> g := CyclicGroup(1);;
gap> SchurCover(g);;
gap> sc := SchurCover(g);;
gap> IdGroup(sc);
[ 1, 1 ]
gap> epi := EpimorphismSchurCover(g);;
gap> Image(epi)=g;
true
gap> IdGroup(Source(epi));
[ 1, 1 ]
gap> G := SmallGroup(27,3);;
gap> IsCentralFactor(G);
true
gap> AbelianInvariantsMultiplier(G);
[ 3, 3 ]
gap> AbelianInvariants(Kernel(EpimorphismNonabelianExteriorSquare(G)));
[ 3, 3 ]
gap> ec := Epicentre(DirectProduct(CyclicGroup(25),CyclicGroup(5)));;
gap> IsTrivial(ec);
false
gap> ec := Epicentre(DirectProduct(CyclicGroup(3),CyclicGroup(3)));;
gap> IsTrivial(ec);
true

# 2006/08/19 (Max)
gap> m := [[1]];;
gap> IsMutable(m^1);
true

# 2006/08/19 (Max)
gap> IsOperation(StripMemory);
true

# 2006/08/22 (Max)
gap> "IsBlistRep" in NamesFilter(TypeObj(BlistList([1,2],[2]))![2]);
true

# 2006/08/28 (FL)
gap> time1 := 0;;
gap> for j in [1..10] do
> l:=List([1..100000],i->[i]);
> t1:=Runtime(); for i in [1..100000] do a := PositionSorted(l,[i]); od; t2:=Runtime();
> time1 := time1 + (t2-t1);
> od;
gap> time2 := 0;;
gap> for j in [1..10] do
> l := Immutable( List([1..100000],i->[i]) );
> t1:=Runtime(); for i in [1..100000] do a := PositionSorted(l,[i]); od; t2:=Runtime();
> time2 := time2 + (t2-t1);
> od;
gap> if time1 >= 2*time2 then
> Print("Bad timings for bugfix 2006/08/28 (FL): ", time1, " >= 2*", time2, "\n"); 
> fi; # time1 and time2 should be about the same

# 2006/08/29 (FL (and AH))
gap> IsBound(ITER_POLY_WARN);
true

# 2006/08/28 (SL)
gap> a := -70170876888665790351719387465587751111897440176;;
gap> b := -24507694029460834590427275534096897425026491796;;
gap> GcdInt(a,b);
4

# 2006/04/02 (AH)
gap> F:=FreeGroup("x","y","z");;
gap> x:=F.1;;y:=F.2;;z:=F.3;;
gap> rels:=[x^2,y^2,z^4,Comm(z^-2,x),(z*x)^4,Comm(z^-1,y)^2,
> (y*x)^4,(Comm(z,y)*x)^2,(Comm(y,z^-1)*x)^2,(y*z)^6,
> z^-1*y*z^-1*x*z*y*z^-1*x*z*y*z^-1*x*z*y*z*x,y*z*x*z*y*x*y*z^-1*x*y*z^-1*x*y*z*x*y*z^-1*x];;
gap> G:=F/rels;;
gap> x:=G.1;;y:=G.2;;z:=G.3;;
gap> s3:=Subgroup(G,[ z*y*z*y^-1, z^-1*y*z^-1*y^-1, y*z*x*z^-1*y^-1*x^-1,
> z*x*y*z*x^-1*y^-1 ]);;
gap> L:=LowIndexSubgroupsFpGroup(G,s3,4);;
gap> Assert(0,Length(L)=27);

# For new features:

# 2006/06/19 (SK)
gap> Positions([1,2,1,2,3,2,2],2);
[ 2, 4, 6, 7 ]
gap> Positions([1,2,1,2,3,2,2],4);
[  ]

# 2006/07/06 (SL)
gap> z := Z(3,10);;
gap> LogFFE(z,z^2);
fail
gap> z := Z(3,11);;
gap> LogFFE(z,z^2);
fail

# 2006/08/16 (FL)
gap> EvalString("1234\\\r\n567");
1234567

# 2006/08/16 (FL)
gap> IsBound(GAPInfo.SystemEnvironment);
true

# 2006/08/28 (FL)
gap> Length(IDENTS_BOUND_GVARS());;
gap> Length(ALL_RNAMES());;

# 2006/08/28 (FL)
gap> IsCheapConwayPolynomial(2,100);
true

# 2006/08/28 (FL)
gap> Random(GlobalMersenneTwister,[1..6]);;

#############################################################################
##
##  for changes 4.4.8 -> 4.4.9  (extracted from corresponding dev/Update)

# 2006/10/04 (TB)
gap> PseudoRandom( AutomorphismGroup( AlternatingGroup( 5 ) ) );;

# 2006/10/23 (FL)
gap> s := "";; for i in [0..255] do Add(s, CHAR_INT(i)); od;
gap> fnam := Filename(DirectoryTemporary(), "guck");;
gap> FileString(fnam, s);;
gap> f := InputTextFile(fnam);;
gap> a := [0..255];; if ARCH_IS_WINDOWS() then a[14]:=10; fi;
gap> List([0..255], i-> ReadByte(f)) = a;
true
gap> RemoveFile(fnam);
true

# 2006/10/31 (FL)
gap> Positions("abcdeca", 'c');
[ 3, 6 ]

# 2006/10/4 (AH)
gap> g:=SmallGroup(1800,646);;c:=CharacterTable(g);;Irr(c);;

#############################################################################
##
##  for changes 4.4.9 -> 4.4.10  (extracted from corresponding dev/Update)

# For fixes:

# 2006/11/13 (AH)
gap> Socle (Group ([[1]]));;

# 2006/11/14 (FL)
gap> DirectoryContents( Filename( DirectoriesLibrary( "" ), "lib" ) );;

# 2007/01/17 (AH)
gap> R := PolynomialRing(GF(4),1);; x := Z(4) * One(R);;
gap> x in DefaultRing(x);
true

# 2007/01/22 (SL)
gap> F := GF(7,3);;
gap> F1 := GF(F,2);;
gap> a := PrimitiveRoot(F1);;
gap> B := Basis(F1);;
gap> Coefficients(B,a^0);
[ z0, 0z ]

# 2007/02/14 (SL)
gap> m:= [ [ Z(2,18)^0, 0*Z(2,18) ], 
>     [ Z(2)^0+Z(2,18)+Z(2,18)^2+Z(2,18)^7+Z(2,18)^8+Z(2,18)^10+Z(2,18)^12
>       +Z(2,18)^14+Z(2,18)^15, Z(2,18)^0 ] ];;
gap> KroneckerProduct( [[Z(2)]], m );  
[ <a GF2 vector of length 2>, [ 1+z+z2+z7+z8+z10+z12+z14+z15, z0 ] ]

# 2007/02/21 (TB)
gap> v:= GF(2)^2;;  bv:= BasisVectors( Basis( v ) );;
gap> IsInjective( LeftModuleGeneralMappingByImages( v, v, bv, 0 * bv ) );
false
gap> map:= LeftModuleGeneralMappingByImages( v, v, 0 * bv, bv );;
gap> Print( ImagesRepresentative( map, Zero( v ) ), "\n" );
[ 0*Z(2), 0*Z(2) ]

# 2007/02/23 (Max)
gap> Enumerator(GF(74761));
<enumerator of GF(74761)>

# 2007/03/12 (SL)
gap> z := Z(3,12)-Z(3,12);
0z
gap> DegreeFFE(z);
1
gap> FFECONWAY.TryToWriteInSmallerField(z,2);
0*Z(3)

# 2007/03/19 (SL)
gap> GF(GF(7^3),2);
AsField( GF(7^3), GF(7^6) )

# 2007/03/20 (SL)
gap> x := Z(2,18)^((2^18-1)/511);;
gap> b := Basis(GF(512));;
gap> Coefficients(b,x);
[ 0z, z0, 0z, 0z, 0z, 0z, 0z, 0z, 0z ]

# 2007/03/26 (AH)
gap> s:=ConjugacyClassSubgroups(
> Group([
>  (2,3)(6,7)(10,11)(14,15),
>  (5,9)(6,10)(7,11)(8,12),
>  (3,5)(4,6)(11,13)(12,14),
>  (1,2)(3,4)(5,6)(7,8)(9,10)(11,12)(13,14)(15,16),
>  (17,18)
> ]),
> Group([
>  (1,16)(2,15)(3,14)(4,13)(5,12)(6,11)(7,10)(8,9),
>  (1,13,16,4)(2,5,15,12)(3,9,14,8)(6,7,11,10)(17,18),
>  (5,9)(6,10)(7,11)(8,12),
>  (2,3)(5,9)(6,11)(7,10)(8,12)(14,15)
> ]))[1];;
gap> IdGroup(s);;
gap> ConjugacyClassesSubgroups(s);;

# 2007/03/30 (TB)
gap> IsSubset( [ [], [1] ], [ [] ] );
true

# 2007/04/02 (FL)
gap> Print(x -> 100000000000, "\n");
function ( x )
    return 100000000000;
end

# 2007/06/14 (FL)
gap> BlistList([1..10],[4234623462462464234242]);
[ false, false, false, false, false, false, false, false, false, false ]

# 2007/07/02 (SK)
gap> GeneratorsOfRing(Rationals);
Error, cannot compute elements list of infinite domain <V>
gap> GeneratorsOfRingWithOne(Rationals);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
Error, no 2nd choice method found for `GeneratorsOfRingWithOne' on 1 arguments

# 2007/07/06 (JS)
gap> PrimitiveGroup(50,4);
PGL(2, 49)
gap> Name(PrimitiveGroup(50,6)) = "PGL(2, 49)";
false

# 2007/07/07 (FL)
gap> OnTuples([,1],());
Error, OnTuples for perm: list must not contain holes

# 2007/07/27 (AH)
gap> H:=GroupByPcgs(Pcgs(AbelianGroup([6,6])));;
gap> K:=SmallGroup(IdGroup(H));;
gap> 1H:=TrivialGModule(H,GF(3));;
gap> 1K:=TrivialGModule(K,GF(3));;
gap> Assert(1,Rank(TwoCohomologySQ(CollectorSQ(H,1H,true),H,1H))=
> Rank(TwoCohomologySQ(CollectorSQ(K,1K,true),K,1K)));

# 2007/08/08 (SL)
gap> l := [1,2,3];;
gap> for i in [2] do Print(IsBound(l[10^20]),"\n"); od;
false

# 2007/08/15 (MN)
gap> Print(ZmodpZObj(2,65537),"\n");
ZmodpZObj( 2, 65537 )

# For new features:

# 2007/03/21 (TB)
gap> IrreducibleModules( DihedralGroup(38), GF(2), 0 );;

# 2007/06/14 (FL)
gap> PositionSublist([1,2,3,4,5,6,7],[4,5,6]);
4

# 2007/08/15 (MN)
gap> l := [1,2,3];
[ 1, 2, 3 ]
gap> MakeImmutable(l);
[ 1, 2, 3 ]

# 2007/08/22 (AD)
gap> f := UnivariatePolynomial( Rationals, [-4,0,0,1] );;
gap> L := AlgebraicExtension( Rationals, f );
<algebraic extension over the Rationals of degree 3>

# 2007/08/29 (TB)
gap> x:= TrivialCharacter( CharacterTable( SymmetricGroup(4) ) mod 2 );;
gap> ScalarProduct( x, x );;

# 2007/08/29 (TB)
gap> a:= QuaternionAlgebra( [ EB(5) ] );
<algebra-with-one of dimension 4 over NF(5,[ 1, 4 ])>
gap> IsSubset( a, QuaternionAlgebra( Rationals ) );
true

# 2007/08/31 (FL)
gap> # Quotient to yield the same on 32- and 64-bit systems
gap> SHALLOW_SIZE([1])/GAPInfo.BytesPerVariable;
2
gap> SHALLOW_SIZE(List([1..160],i->i^2))/GAPInfo.BytesPerVariable;
161
gap> [ShrinkAllocationPlist, ShrinkAllocationString];;
gap> [EmptyPlist, EmptyString];;                                               

# 2007/08/31 (FL)
gap> IsCheapConwayPolynomial(2,150);
true
gap> IsCheapConwayPolynomial(3,52); 
true

#############################################################################
##
##  for changes 4.4.10 -> 4.4.11  (extracted from corresponding dev/Update)

# For fixes:

# 2007/10/10 (TB)
gap> IsomorphismTypeInfoFiniteSimpleGroup( 1 );;

# 2007/10/15 (FL)
gap> d:=NewDictionary(3213,true);;
gap> LookupDictionary(d,4);
fail

# 2007/12/14 (MN)
gap> a := [1..100];;
gap> MemoryUsage(a)=MemoryUsage(a);
true

# 2008/01/02 (AH)
gap> G:=SmallGroup(1308,1);
<pc group of size 1308 with 4 generators>
gap> Length(Irr(G));
48

# 2008/02/13 (TB)

# 2008/03/19 (TB)
gap> DefiningPolynomial( AsField( GF(9), GF(3^6) ) );
x_1^3+Z(3^2)^6*x_1^2+Z(3^2)*x_1+Z(3^2)^5

# 2008/04/03 (JS), updated on 2010/10/01 (AK)
gap> g:=Group( (1,33)(2,12)(3,96)(4,37)(5,95)(6,11)(7,51)(8,42)(9,32)(10,80)
> (13,17)(14,59)(15,62)(16,85)(18,22)(19,29)(20,24)(21,90)(23,72)(25,26)
> (27,30)(28,70)(31,92)(34,100)(35,75)(36,82)(38,86)(39,77)(40,46)(41,44)
> (43,61)(45,52)(47,78)(48,88)(49,57)(50,55)(53,97)(54,67)(56,91)(58,81)
> (60,93)(63,71)(64,73)(65,89)(66,79)(68,98)(69,83)(74,87)(76,99)(84,94), 
> (1,10)(2,7,52,98)(3,68,75,12)(4,51,49,27)(5,18,29,91)(6,41,54,72)
> (8,78,25,99)(9,95,67,55)(11,86,39,38)(13,17)(14,61,82,79)(15,97,28,46)
> (16,56,74,83)(20,94,90,47)(21,65,66,58)(22,50,87,71)(23,93,31,85)(24,53)
> (26,76,36,73)(30,37,44,69)(32,34)(33,70)(40,43)(42,88,64,80)(45,60,92,57)
> (48,81)(59,62,84,89)(77,96) );;
gap> c:=ConjugacyClassesMaximalSubgroups( g );;
gap> Collected(List(c,x->[Size(Representative(x)),Size(x)]));
[ [ [ 120, 336 ], 1 ], [ [ 144, 280 ], 1 ], [ [ 336, 120 ], 3 ], 
  [ [ 384, 105 ], 1 ], [ [ 720, 56 ], 3 ], [ [ 20160, 1 ], 1 ] ]

# 2008/04/23 (TB)
gap> GeneratorsOfAlgebra( QuaternionAlgebra( GF(17) ) );
[ e, i, j, k ]
gap> GeneratorsOfAlgebra( QuaternionAlgebra( GF(17) ) );
[ e, i, j, k ]

# 2008/06/24 (FL)
# none, we hope that the changed code is never needed!

# 2008/07/20 (Laurent Bartholdi)
gap> Intersection( [ -1 .. 1 ], [ -1 .. 1 ] ); # previously was empty
[ -1 .. 1 ]
gap> Intersection( [ 2, 4 .. 10 ], [ 3 .. 5 ] ); # previously was [ 4, 6 ]
[ 4 ]

# 2008/08/13 (SL)
gap> Z(3,20) + Z(3,20)^0;
1+z
gap> AA := Z(3^10)^30683;
Z(3^10)^30683
gap> BB := Z(3)^0+Z(3^15)^3+Z(3^15)^4+2*Z(3^15)^5+2*Z(3^15)^8+2*Z(3^15)^10+2*Z(3^15)^11+Z(3^15)^13;
1+z3+z4+2z5+2z8+2z10+2z11+z13
gap> AA=BB;
false
gap> RT := Z(3^6);
Z(3^6)
gap> DD := Z(3^12)+Z(3^12)^2+2*Z(3^12)^3+2*Z(3^12)^4+Z(3^12)^5+Z(3^12)^6+Z(3^12)^7+Z(3^12)^8+2*Z(3^12)^9;
z+z2+2z3+2z4+z5+z6+z7+z8+2z9
gap> LogFFE(DD,RT);            
340

# 2008/09/02 (FL)
gap> SmithNormalFormIntegerMatTransforms(
> [ [ 2, 0, 0, 0, 0 ], [ 2, 2, 0, -2, 0 ], [ 0, -2, -2, -2, 0 ],
>   [ 3, 1, -1, 0, -1 ], [ 4, -2, 0, 2, 0 ], [ 3, -1, -1, 2, -1 ],
>   [ 0, 4, -2, 0, 2 ], [ 2, 2, 0, 2, 2 ], [ 0, 0, 0, 0, 0 ],
>   [ 2, 0, -4, -2, 0 ], [ 0, -2, 4, 2, -2 ], [ 2, -2, 0, -2, -1 ],
>   [ 3, -3, -1, 1, 0 ] ]).normal;
[ [ 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], [ 0, 0, 0, 2, 0 ], 
  [ 0, 0, 0, 0, 2 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], 
  [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], 
  [ 0, 0, 0, 0, 0 ] ]

# 2008/09/10 (TB)
gap> g:= AlternatingGroup( 10 );;                                   
gap> gens:= GeneratorsOfGroup( g );;                                 
gap> hom:= GroupHomomorphismByImagesNC( g, g, gens, gens );;         
gap> IsOne( hom ); # This took (almost) forever before the change ...
true

# 2008/09/10 (TB)
gap> Display( StraightLineProgram( "a(ab)", [ "a", "b" ] ) );
# input:
r:= [ g1, g2 ];
# program:
r[3]:= r[1];
r[4]:= r[1]*r[2];
r[5]:= r[3]*r[4];
# return value:
r[5]

# 2008/09/11 (AH)
gap> x:=Indeterminate(CF(7));;
gap> K:=AlgebraicExtension(CF(7),x^2-3);;
gap> a:=GeneratorsOfField(K)[1];;
gap> x2 := E(7)+a*(E(7)^2+E(7)^3);
(E(7)^2+E(7)^3)*a+E(7)

# 2008/09/18 (AH)
gap> g:=Group((14,15)(16,17), (12,13), (9,10,11), (4,8)(16,17),
> (1,8)(2,3)(4,5)(6,7)(16,17), (1,3)(2,8)(4,6)(5,7)(16,17));;
gap> IsNilpotent(g);
true

# For new features:

# 2008/02/29 (TB)
gap> f:= GF(2);; x:= Indeterminate( f );; p:= x^2+x+1;;
gap> e:= AlgebraicExtension( f, p );;
gap> GeneratorsOfLeftModule( e );;  Basis( e );;  Iterator( e );;

# 2008/03/26 (TB)
gap> FrobeniusCharacterValue( E(55), 2 );
z+z2+z3+z4+z5+z6+z8+z10+z12+z13+z14+z16+z17+z19

# 2008/04/14 (SK)
gap> [[4,5],[5,6]] in GL(2,Integers);
true
gap> [[4,5],[5,6]] in SL(2,Integers);
false

# 2008/04/14 (SK)
gap> String(Integers^3);
"( Integers^3 )"
gap> ViewString(GF(16)^3);
"( GF(2^4)^3 )"
gap> IsRowModule(1);
false

# 2008/04/14 (SK)
gap> G := Group((1,2));;
gap> SetName(G,"C2");
gap> ViewString(G);
"C2"

# 2008/04/15 (SK)
gap> PolynomialRing(GF(2),1);
GF(2)[x_1]
gap> String(PolynomialRing(GF(8),4));
"PolynomialRing( GF(2^3), [ x_1, x_2, x_3, x_4 ] )"
gap> ViewString(PolynomialRing(GF(2),1));
"GF(2)[x_1]"

# 2008/06/05 (FL)
gap> Binomial(2^80,3);
294474510796397388263882186039667753853121547637256443485296081974067200

# 2008/10/01 (TB)
gap> QuaternionAlgebra( Field( [ EB(5) ] ) );;
gap> IsDivisionRing( QuaternionAlgebra( Field( [ EB(5) ] ) ) );
true

# 2008/11/16 (TB)
gap> t:= [ [ 1, 2, 3, 4, 5 ], [ 2, 1, 4, 5, 3 ], [ 3, 5, 1, 2, 4 ],
>          [ 4, 3, 5, 1, 2 ], [ 5, 4, 2, 3, 1 ] ];;
gap> m:= MagmaByMultiplicationTable( t );;
gap> IsAssociative( m );
false
gap> AsGroup( m );
fail

# 2008/11/16 (TB)
gap> att:= NewAttribute( "att", IsObject );
<Attribute "att">
gap> prop1:= NewProperty( "prop1", IsObject );
<Property "prop1">
gap> prop2:= NewProperty( "prop2", IsObject );
<Property "prop2">
gap> InstallTrueMethod( prop2, prop1 );
gap> InstallImmediateMethod( att, Tester( prop2 ), 0, G -> 1 );
gap> # The intended behaviour is that `prop1' implies `prop2',
gap> # and that a known value of `prop2' triggers a method call
gap> # that yields the value for the attribute `att'.
gap> g:= Group( (1,2,3,4), (1,2) );;
gap> Tester( att )( g ); Tester( prop1 )( g ); Tester( prop2 )( g );
false
false
false
gap> Setter( prop1 )( g, true );
gap> # Now `prop1' is `true',
gap> # the logical implication sets also `prop2' to `true',
gap> # thus the condition for the immediate method is satisfied.
gap> Tester( prop1 )( g ); Tester( prop2 )( g );
true
true
gap> Tester( att )( g );  # Here we got `false' before the fix.
true

#############################################################################
##
## Changes 4.4.12 -> 4.5.4

# 2008/12/15 (TB)
gap> 0*Z(5) in Group( Z(5) );
false

# 2009/02/04 (FL)
gap> Intersection([1..3],[4..5],[6,7]);
[  ]

# 2009/02/23 (AH)
gap> chi:=Irr(CyclicGroup(3))[2];;
gap> IrreducibleRepresentationsDixon(UnderlyingGroup(chi),[chi]);;

# 2009/02/25 (TB)
gap> IndexNC( GL(30,17), SL(30,17) );
16

# 2009/03/13 (FL)
gap> b:=BlistList([1..4],[1,2]);
[ true, true, false, false ]
gap> b{[1,2]} := [false,false];
[ false, false ]
gap> IsBlistRep(b);
true

# 2009/05/28 (BH)
gap> G:=AlternatingGroup(4);;
gap> N:=Subgroup(G,[(1,2)(3,4),(1,3)(2,4)]);;
gap> H:=DirectProduct(CyclicGroup(2),CyclicGroup(2));;
gap> A:=AutomorphismGroup(H);;
gap> P:=SylowSubgroup(A,3);;
gap> epi:=NaturalHomomorphismByNormalSubgroup(G,N);;
gap> iso:=IsomorphismGroups(FactorGroup(G,N),P);;
gap> f:=CompositionMapping(IsomorphismGroups(FactorGroup(G,N),P),epi);;
gap> SemidirectProduct(G,f,H);
<pc group of size 48 with 5 generators>

# 2009/09/23 (AH)
gap> g:=DirectProduct(DihedralGroup(14),SmallGroup(1440,120));;
gap> PositionSublist(StructureDescription(g),"PSL");
fail

# 2009/09/25 (TB)
gap> lin:= LinearCharacters( CyclicGroup( 3 ) );;
gap> lin[2] ^ One( GaloisGroup( CF(3) ) );;

# 2009/09/30 (TB)
gap> v:= GF(2)^1;;
gap> Subspace( v, [] ) < Subspace( v, [] );
false
gap> v:= GF(2)^[1,1];;
gap> Subspace( v, [] ) < Subspace( v, [] );
false

# 2010/09/06 (TB)
gap> G:= SL( 2, 3 );;
gap> x:= [ [ Z(9), 0*Z(3) ], [ 0*Z(3), Z(3)^0 ] ];;
gap> y:= [ [ Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(9) ] ];;
gap> IsConjugate( G, x, y );
true

# Reported by Sohail Iqbal on 2008/10/15, added by AK on 2010/10/03
gap> f:=FreeGroup("s","t");; s:=f.1;; t:=f.2;;
gap> g:=f/[s^4,t^4,(s*t)^2,(s*t^3)^2];;
gap> CharacterTable(g);
CharacterTable( <fp group of size 16 on the generators [ s, t ]> )
gap> Length(Irr(g));
10

# 2010/10/06 (TB)
gap> EU(7,2);
-1

# Reported by Laurent Bartholdi on 2008/11/14, added by AK on 2010/10/15
gap> f := FreeGroup(0);; g := FreeGroup(1);;
gap> phi := GroupHomomorphismByImages(f,g,[],[]);;
gap> One(f)^phi = One(g);
true
gap> One(f)^phi=One(f);
false

# 2010/10/20 (TB)
gap> NormalizersTom( TableOfMarks( CyclicGroup( 3 ) ) );
[ 2, 2 ]

# 2010/10/27 (TB)
gap> PermChars( CharacterTable( SymmetricGroup( 3 ) ), 3 );
[ Character( CharacterTable( Sym( [ 1 .. 3 ] ) ), [ 3, 1, 0 ] ) ]

# 2010/11/11 (AH)
gap> x:=X(Rationals);;IsIrreducible(x^3-7381125*x^2-5*x+36905625);
false

# Reported by FL on 2010/05/05, added by AK on 2011/01/16
gap> Size(Set(List([1..10],i->Random(1,2^60-1))))=10;
true
gap> Size(Set(List([1..10],i->Random(1,2^60))))=10;  
true

# Reported by MN on 2009/10/06, added by AK on 2011/01/16
gap> (Z(65536)^2)^LogFFE(Z(65536)^16386,Z(65536)^2) = Z(65536)^16386;
true

# Reported by TB on 2009/11/09, added by AK on 2011/01/20
# Log2Int(2^60) bug (a 64bit/GMP issue)
gap> Log2Int( 2^60 );
60

# Reported by Chris Jefferson on 20151008 in github issue #282
gap> Log2Int( -2^60 );
60

# Reported by WDeMeo on 2011/02/19, added by JS on 2011/03/09
# IntermediateSubgroups(G,normal) included non-maximal inclusions
gap> g:=CyclicGroup(2^6);; IntermediateSubgroups( g, TrivialSubgroup(g) ).inclusions;
[ [ 0, 1 ], [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 4, 5 ], [ 5, 6 ] ]

# Problem with printing when GAP is compiled with GMP 5.0.1 under Mac OS X 
# in 32-bit mode. Does not occur with GMP 4.3.2 or in 64-bit mode.
# Reported by BH on 2011/02/06, added by AK on 2011/03/24
gap> 2*10^201*10;
200000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000

# 2011/04/29 (TB)
gap> t:= CharacterTable( SmallGroup( 72, 26 ) );;
gap> Set( List( Irr( t ), x -> Size( CentreOfCharacter( x ) ) ) );
[ 6, 12, 18, 72 ]

# 2011/06/01 (TB)
gap> F2:= GF( 2 );;
gap> x:= Indeterminate( F2 );;
gap> F:= AlgebraicExtension( F2, x^2+x+1 );;
gap> Trace( RootOfDefiningPolynomial( F ) );
Z(2)^0

# Reported by Radoslav Kirov on 2011/06/11, added by MH on 2011/09/29
gap> H := [
> [ Z(5)^3, Z(5)^0, Z(5)^0, 0*Z(5), 0*Z(5), 0*Z(5) ],
> [ Z(5)^0, Z(5)^0, 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5) ],
> [ Z(5)^2, Z(5), 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5) ],
> [ Z(5)^3, Z(5), 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0 ]] ;;
gap> cl:=CosetLeadersMatFFE(H, GF(5));; Size(cl);
625
gap> [0,0,3,0,0,2]*Z(5)^0 in cl;
true
gap> [4,0,1,1,4,0]*Z(5)^0 in cl;
false

# 2011/09/29 (FL)
gap> List([1,,3],x->x^2);
[ 1,, 9 ]

# Reported by Izumi Miyamoto on 2011/12/17, added by MH on 2011/12/18
# Computing normalizers inside the trivial group could error out.
gap> Normalizer(Group(()),Group((1,2,3)));
Group(())
gap> Normalizer(Group(()),TransitiveGroup(3,1));
Group(())

# Reported by Ilko Brauch on 2011/12/16, added by MH on 2011/12/18
gap> G := CyclicGroup(IsFpGroup,3);
<fp group of size 3 on the generators [ a ]>
gap> Elements(G);
[ <identity ...>, a, a^2 ]

# 2011/12/20 (FL)
gap> 2^1000000;
<integer 990...376 (301030 digits)>

# Reported by Burkhard Hoefling on 2012/3/14, added by SL on 2012/3/16
# SHIFT_LEFT_VEC8BIT can fail to clean space to its right, which can then
# be picked up by a subsequent add to a longer vector
gap> v := [0*Z(4), 0*Z(4), 0*Z(4), 0*Z(4), Z(4)];
[ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2) ]
gap> ConvertToVectorRep (v, 4);
4
gap> SHIFT_VEC8BIT_LEFT(v,1);
gap> w := [0*Z(4), 0*Z(4), 0*Z(4), 0*Z(4),0*Z(4), 0*Z(4), Z(4)];
[ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2) ]
gap> ConvertToVectorRep (w, 4);
4
gap> v+w; 
[ 0*Z(2), 0*Z(2), 0*Z(2), Z(2^2), 0*Z(2), 0*Z(2), Z(2^2) ]

# Reported by Burkhard Hoefling on 2012/3/17, added by SL on 2012/3/17
# Converting a compressed vector of length 0 to a bigger field failed.
gap> v := [0*Z(3)];
[ 0*Z(3) ]
gap> ConvertToVectorRep(v);
3
gap> Unbind(v[1]);
gap> ConvertToVectorRep(v,9);
9

# Bug with non-square matrices in ElementaryDivisorsMat, added by MH on 2012/4/3.
# Since ElementaryDivisorsMat just calls SmithNormalFormIntegerMat when
# the base ring R equals Integers, we use GaussianIntegers instead to
# ensure the generic ElementaryDivisorsMat method is tested.
gap> ElementaryDivisorsMat(GaussianIntegers, [ [ 20, -25, 5 ] ]);
[ 5, 0, 0 ]

# 2012/04/13 (MN)
gap> Characteristic(Z(2));
2
gap> Characteristic(0*Z(2));
2
gap> Characteristic(0*Z(5));
5
gap> Characteristic(Z(5));
5
gap> Characteristic(Z(257));
257
gap> Characteristic(Z(2^60));
2
gap> Characteristic(Z(3^20));
3
gap> Characteristic(0);
0
gap> Characteristic(12);
0
gap> Characteristic(12123123123);
0
gap> Characteristic(E(4));
0
gap> Characteristic([Z(2),Z(4)]);
2
gap> v := [Z(2),Z(4)];
[ Z(2)^0, Z(2^2) ]
gap> ConvertToVectorRep(v,4);
4
gap> Characteristic(v);
2
gap> Characteristic([Z(257),Z(257)^47]);
257
gap> Characteristic([[Z(257),Z(257)^47]]);
257
gap> Characteristic(ZmodnZObj(2,6));
6
gap> Characteristic(ZmodnZObj(2,5));
5
gap> Characteristic(ZmodnZObj(2,5123123123));
5123123123
gap> Characteristic(ZmodnZObj(0,5123123123));
5123123123
gap> Characteristic(GF(2,3));
2
gap> Characteristic(GF(2));
2
gap> Characteristic(GF(3,7));
3
gap> Characteristic(GF(1031));
1031
gap> Characteristic(Cyclotomics);
0
gap> Characteristic(Integers);
0
gap> T:= EmptySCTable( 2, 0 );;
gap> SetEntrySCTable( T, 1, 1, [ 1/2, 1, 2/3, 2 ] );
gap> a := AlgebraByStructureConstants(Rationals,T);
<algebra of dimension 2 over Rationals>
gap> Characteristic(a);
0
gap> a := AlgebraByStructureConstants(Cyclotomics,T);
<algebra of dimension 2 over Cyclotomics>
gap> Characteristic(a);
0
gap> a := AlgebraByStructureConstants(GF(7),T);
<algebra of dimension 2 over GF(7)>
gap> Characteristic(a);
7
gap> T:= EmptySCTable( 2, 0 );;
gap> SetEntrySCTable( T, 1, 1, [ 1, 1, 2, 2 ] );
gap> r := RingByStructureConstants([7,7],T);
<ring with 2 generators>
gap> Characteristic(r);
7
gap> r := RingByStructureConstants([7,5],T);
<ring with 2 generators>
gap> Characteristic(r);
35

#############################################################################
##
## Changes 4.5.4 -> 4.5.5

# Bug with commutator subgroups of fp groups, was causing infinite recursion,
# also when computing automorphism groups
# Fix and test case added by MH on 2012-06-05.
gap> F:=FreeGroup(3);;
gap> G:=F/[F.1^2,F.2^2,F.3^2,(F.1*F.2)^3, (F.2*F.3)^3, (F.1*F.3)^2];;
gap> U:=Subgroup(G, [G.3*G.1*G.3*G.2*G.1*G.3*G.2*G.3*G.1*G.3*G.1*G.3]);;
gap> StructureDescription(CommutatorSubgroup(G, U));
"C2 x C2"
gap> StructureDescription(AutomorphismGroup(G));
"S4"

# 2012/06/15 (AH)
gap> gens:=[[[1,1],[0,1]], [[1,0],[1,1]]] * ZmodnZObj(1,7);
[ [ [ Z(7)^0, Z(7)^0 ], [ 0*Z(7), Z(7)^0 ] ], 
  [ [ Z(7)^0, 0*Z(7) ], [ Z(7)^0, Z(7)^0 ] ] ]
gap> gens:=List(Immutable(gens),i->ImmutableMatrix(GF(7),i));;

# 2012/06/15 (AH)
gap> rng := PolynomialRing(Rationals,2);
Rationals[x_1,x_2]
gap> ind := IndeterminatesOfPolynomialRing(rng);
[ x_1, x_2 ]
gap> x := ind[1];
x_1
gap> y := ind[2];
x_2
gap> pol:=5*(x_1+1)^2;
5*x_1^2+10*x_1+5
gap> factors := Factors(pol);
[ 5*x_1+5, x_1+1 ]
gap> factors[2] := x_2;
x_2
gap> factors[1] := [];
[  ]
gap> Factors( pol );
[ 5*x_1+5, x_1+1 ]

# 2012/07/13 (TB)
gap> IsDocumentedWord( "d" );
false
gap> # "d_N" is documented

#############################################################################
##
## Changes 4.5.5 -> 4.5.6

## For bugfixes

# The GL and SL constructors did not correctly handle GL(filter,dim,ring).
# Reported and fixed by JS on 2012-06-24
gap> GL(IsMatrixGroup,3,GF(2));;
gap> SL(IsMatrixGroup,3,GF(2));;

# The names of two primitive groups of degree 64 were incorrect.
# Reported and fixed by JS on 2012-08-12
gap> PrimitiveGroup(64,53);
2^6:(S3 x GL(3, 2))
gap> PrimitiveGroup(64,64);
2^6:PGL(2, 7)
gap> 

# Fix of very large (more than 1024 digit) integers not being coded 
# correctly in function bodies unless the integer limb size was 16 bits. 
# Reported by Stefan Kohl, fixed by SL on 2012-08-12
gap> f := function() return
> 100000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000000000000000000\
> 00000000; end;
function(  ) ... end
gap> f();
100000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
000000000000000000000000000000000000000000000000000000000000000000000000000000\
00000000

# Fix of Crash in garbage collection following call to AClosVec for a GF(2) code
# Reported by Volker Brown, fixed by SL on 2012-08-31
gap> x:=
> [ [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], 
>   [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ], 
>   [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 
>     Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 
>     0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 
>     0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 
>     Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], 
>   [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 
>     0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ] ];;
gap> P:=AClosestVectorDriver(x, GF(2), Z(2)*[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],11,0, true);; 
gap> GASMAN("collect");;

# Crash when reading certain pieces of syntactically invalid code
# Fix and test case added by MH on 2012-09-06.
gap> str := Concatenation("function()\n",
> "local e, v;\n",
> "for e in [] do\n",
> "    v := rec(a := [];);\n",
> "od;\n"
> );
"function()\nlocal e, v;\nfor e in [] do\n    v := rec(a := [];);\nod;\n"
gap> s:=InputTextString(str);
InputTextString(0,66)
gap> Read(s);
Syntax error: ) expected in stream line 4
    v := rec(a := [];);
                    ^
Syntax error: end expected in stream line 5
od;
 ^

# Check that \in method works for groups handled by a nice monomorphism
# created with a custom SeedFaithfulAction.
# Fix and test case added by MH on 2012-09-07.
gap> m1:=PermutationMat( (1,2), 5, GF(5) );;
gap> m2:=PermutationMat( (3,4), 5, GF(5) );;
gap> n:=PermutationMat( (1,4,5), 5, GF(5) );;
gap> G:=Group(m1, m2);;
gap> SetSeedFaithfulAction(G,rec(points:=[m1[1],m1[3]], ops:=[OnPoints,OnPoints]));
gap> n in G;
false

# Check that overloading of a loaded help book by another one works. This 
# makes sense if a book of a not loaded package is loaded in a workspace 
# and GAP is started with a root path that contains a newer version. 
# Reported by Sebastian Gutsche, fixed by FL on 2012-09-11
gap> old := ShallowCopy(HELP_KNOWN_BOOKS[2][1]);;
gap> HELP_KNOWN_BOOKS[2][1][3] := 
> Concatenation(HELP_KNOWN_BOOKS[2][1][3], "blabla");;
gap> CallFuncList(HELP_ADD_BOOK, old);
#I  Overwriting already installed help book 'tutorial'.

# Check of the membership test after fixing a method for coefficients 
# to check after Gaussian elimination that the coefficients actually 
# lie in the left-acting-domain of the vector space. 
# Reported by Kevin Watkins, fixed by TB (via AK) on 2012-09-13
gap> Sqrt(5)*IdentityMat(2) in VectorSpace(Rationals,[IdentityMat(2)]);
false

# Check that removing wrong PrintObj method fixes delegations accordingly
# to documented behaviour for PrintObj/ViewObj/Display.
# Reported by TB, fixed by MN on 2012-08-20.
gap> if IsBound(IsXYZ) then MakeReadWriteGlobal("IsXYZ"); Unbind(IsXYZ); fi;
gap> fam := NewFamily("XYZsFamily");;
gap> DeclareCategory("IsXYZ",IsObject);
gap> type := NewType(fam,IsXYZ and IsPositionalObjectRep);;
gap> o := Objectify(type,[]);;
gap> InstallMethod(String,[IsXYZ],function(o) return "XYZ"; end);
gap> o;
XYZ
gap> Print(o,"\n");
XYZ
gap> String(o);
"XYZ"

## For new features

# 2012/08/13 (AK)
gap> First(PositiveIntegers,IsPrime);
2

#############################################################################
##
## Changes 4.5.6 -> 4.5.7

## For bugfixes

# 2012/11/02 (FL)
# Fix a crash on 32-bit systems when Log2Int(n) is not an immediate integer. 
gap> a:=(2^(2^15))^(2^14);;
gap> Log2Int(a);
536870912

# 2012/09/26 (AH)
gap> p:=7;;
gap> F:=FreeGroup("a","b","c","d","e","f");;
gap> G:=F/[ F.1^p, F.2^p, F.3^p, F.4^p, F.5^p, F.6^p,
> Comm(F.2,F.1)*F.3^-1, Comm(F.3,F.1)*F.4^-1,
> Comm(F.4,F.1)*F.5^-1, Comm(F.4,F.2)*F.6^-1,
> Comm(F.5,F.2)*F.6^-1, Comm(F.4,F.3)*F.6,
> Comm(F.1,F.5), Comm(F.1,F.6), Comm(F.2,F.3),
> Comm(F.2,F.6), Comm(F.3,F.5), Comm(F.3,F.6),
> Comm(F.4,F.5), Comm(F.4,F.6), Comm(F.5,F.6)];;
gap> G:=Image(IsomorphismPermGroup(G));;
gap> DerivedSubgroup(G)=FrattiniSubgroup(G);
true
gap> sd1:=StructureDescription(DerivedSubgroup(G));;
gap> sd2:=StructureDescription(FrattiniSubgroup(G));;
gap> sd1=sd2;
true

# 2012/10/05 (AH)
gap> G:=DirectProduct(CyclicGroup(2),PSL(3,4));; 
gap> NaturalHomomorphismByNormalSubgroup(G,TrivialSubgroup(G));;

# 2012/10/26 (SL) 
# Fix a crash when a logfile opened with LogTo() is closed with LogInputTo()  
gap> LogTo( Filename( DirectoryTemporary(), "foo" ) );
gap> LogInputTo();
Error, InputLogTo: can not close the logfile
gap> LogTo();

# 2012/11/15 (SL)
gap> x := ZmodnZObj(2,10);
ZmodnZObj( 2, 10 )
gap> y := ZmodnZObj(0,10);
ZmodnZObj( 0, 10 )
gap> x/y;
fail
gap> y/x;
fail
gap> x/0;
fail
gap> 3/y;
fail

# 2012/11/21 (SL)
gap> s := FreeSemigroup("a","b");
<free semigroup on the generators [ a, b ]>
gap> t := Subsemigroup(s,[s.1]);
<infinite commutative semigroup with 1 generator>
gap> t := Subsemigroup(s,[s.1]);
<infinite commutative semigroup with 1 generator>
gap> HasSize(t);
true
gap> Size(t);
infinity
gap> t := Subsemigroup(s, []);
<semigroup of size 0, with 0 generators>
gap> HasSize(t);
true
gap> Size(t);
0

# 2012/11/25 (AK)
# Fix of a bug that was reproducible in GAP 4.5.6 with FGA 1.1.1
gap> f := FreeGroup(2);
<free group on the generators [ f1, f2 ]>
gap> iso:=GroupHomomorphismByImagesNC(f,f,[f.1*f.2,f.1*f.2^2],[f.2^2*f.1,f.2*f.1]); 
[ f1*f2, f1*f2^2 ] -> [ f2^2*f1, f2*f1 ]
gap> SetIsSurjective(iso,true);
gap> Image(iso,PreImagesRepresentative(iso,f.1));
f1

# 2012/11/26 (MN)
gap> 10^20000+12345;
<integer 100...345 (20001 digits)>
gap> -(10^20000+12345);
<integer -100...345 (20001 digits)>

# 2012/12/06 (AK)
gap> x := Indeterminate(Rationals);
x_1
gap> InverseSM(Zero(x));
fail
gap> Inverse(Zero(x));
fail
gap> InverseOp(Zero(x));
fail

#############################################################################
##
## Changes 4.5.7 -> 4.6.2

## For bugfixes

# 2012/10/26 (SL)
gap> r := rec(1 := rec(x := true));;
gap> r.1.x;
true

# 2012/11/01 (SL)
gap> m := IdentityMat(10,GF(7));;
gap> m[3][3] := 0*Z(7,6);;
gap> Display(m);
 1 . . . . . . . . .
 . 1 . . . . . . . .
 . . . . . . . . . .
 . . . 1 . . . . . .
 . . . . 1 . . . . .
 . . . . . 1 . . . .
 . . . . . . 1 . . .
 . . . . . . . 1 . .
 . . . . . . . . 1 .
 . . . . . . . . . 1

# 2012/12/17 (SL)
gap> l := [1,2,3];;
gap> Unbind(l,1);
Syntax error: 'Unbind': argument should be followed by ')' in stream line 1
Unbind(l,1);
        ^
gap> l;
[ 1, 2, 3 ]

# 2013/01/07 (MH)
gap> m:=IdentityMat(8,GF(3));;
gap> m2:=m + List([1..8],i->List([1..8], j->Zero(GF(3))));;
gap> DefaultScalarDomainOfMatrixList([m,m2]);
GF(3)
gap> DefaultScalarDomainOfMatrixList([m2,m]);
GF(3)

## For new features

# 2012/08/14 (AK)
gap> R:=PolynomialRing(GF(5),"mu");;
gap> mu:=Indeterminate(GF(5));;
gap> T:=AlgebraicExtension(GF(5),mu^5-mu+1);;
gap> A:=PolynomialRing(T,"x");
<field of size 3125>[x]

# 2012/09/14 (SL)
gap> a := BlistList([1,2,3],[1]);;
gap> b := BlistList([1,2,3],[2]);;
gap> c := BlistList([1,2,3],[2,3]);;
gap> MEET_BLIST(a,b);
false
gap> MEET_BLIST(a,c); 
false
gap> MEET_BLIST(b,c);
true
gap> MEET_BLIST(a,a);
true

# 2012/11/10 (SL)
gap> l :=  [ 2, 3, 4, 1, 5, 10, 9, 7, 8, 6, 11 ];;
gap> SortBy(l,AINV);
gap> l;
[ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]

# 2012/11/20 (BH)
gap> G := WreathProduct (CyclicGroup (IsPermGroup, 7), SymmetricGroup (5));
<permutation group of size 2016840 with 7 generators>
gap> IsPSolvable (G, 2);
false
gap> IsPSolvable (G, 3);
false
gap> IsPSolvable (G, 5);
false
gap> IsPSolvable (G, 7);
true
gap> IsPNilpotent(GL(3,2),2);
false

# 2012/12/17 (SL)
gap> DeclareOperation("MyOp",[IsObject, IsObject]);
gap> DeclareAttribute("MyOp",IsObject);

# 2013/01/17 (AK)
gap> lo:= LieObject( [ [ 1, 0 ], [ 0, 1 ] ] );
LieObject( [ [ 1, 0 ], [ 0, 1 ] ] )
gap> m:=UnderlyingRingElement(lo);
[ [ 1, 0 ], [ 0, 1 ] ]
gap> lo*lo;
LieObject( [ [ 0, 0 ], [ 0, 0 ] ] )
gap> m*m;
[ [ 1, 0 ], [ 0, 1 ] ]

# 2013/01/20 (SL)
gap> DistancePerms((1,2,3,4,5,6),(1,2,3));
4

#############################################################################
##
## Changes 4.6.2 -> 4.6.3

## For bugfixes

# 2013/02/07 (AK)
gap> PowerModInt(3,0,1);
0

# 2013/02/27 (SL)
gap>  m:= [[Z(3^16),0],[1,Z(3)]] * One( Z(3) );
[ [ z, 0*Z(3) ], [ Z(3)^0, Z(3) ] ]
gap> Display(m);
z = Z( 3, 16); z2 = z^2, etc.
z . 
1 2 
gap> m[1][1]:= m[1][1] + 1;
1+z
gap> Display( m );
z = Z( 3, 16); z2 = z^2, etc.
1+z .   
1   2   

# 2013/02/27 (AK)
gap> G:=SymmetricGroup(8);
Sym( [ 1 .. 8 ] )
gap> H:=SylowSubgroup(G,3);;
gap> HasIsPGroup(H);
true
gap> HasPrimePGroup(H);
true

# 2013/02/28 (BH). More tests added by AK
gap> Length( AbsolutIrreducibleModules( AlternatingGroup(5), GF(4), 120) );
2
gap> Length( IrreducibleRepresentations( DihedralGroup(10), GF(2^2) ) );
3
gap> Length( AbsoluteIrreducibleModules( CyclicGroup(3), GF(4), 1) );
2
gap> G:=DihedralGroup(20);; b:=G.1*G.2;; Order(b);
2
gap> ForAll( IrreducibleRepresentations(G,GF(8)), phi -> IsOne(Image(phi,b)^2));
true

# 2013/03/06 (MH)
gap> PermutationMat((1,2),2,GF(3^6));
[ [ 0*Z(3), Z(3)^0 ], [ Z(3)^0, 0*Z(3) ] ]

# 2013/03/07 (MH)
gap> s:="cba";
"cba"
gap> IsSSortedList(s);
false
gap> IsInt(RNamObj(s));
true
gap> r:=rec(cba := 1);;
gap> IsBound(r.(s));
true

# 2013/03/08 (MH)
gap> v:=[ Z(2^4)^3, Z(2^4)^6, Z(2)^0 ];
[ Z(2^4)^3, Z(2^4)^6, Z(2)^0 ]
gap> ConvertToVectorRepNC(v,256);
256
gap> RepresentationsOfObject(v);
[ "IsDataObjectRep", "Is8BitVectorRep" ]
gap> R:=PolynomialRing( GF(2^8) );
GF(2^8)[x_1]
gap> x := Indeterminate(GF(2^8));
x_1
gap> f := x^2+Z(2^4)^6*x+Z(2^4)^3;
x_1^2+Z(2^4)^6*x_1+Z(2^4)^3
gap> Length( FactorsSquarefree( R, f, rec() ) );
2

# 2013/03/12 (MH)
gap> v:=IdentityMat(28,GF(2))[1];
<a GF2 vector of length 28>
gap> v{[1..Length(v)]}{[1..5]};
Error, List Elements: <lists> must be a list (not a object (data))

## For new features

# 2013/02/27 (AK)
gap> F := FreeGroup("a","b");;
gap> G := F/[F.1*F.2*F.1*F.2*F.1];;
gap> IsAbelian(G);
true
gap> DerivedSubgroup(G);
Group([  ])

# 2013/02/28 (MH)
gap> NullMat(2,1,ZmodnZObj(1,15));
[ [ ZmodnZObj( 0, 15 ) ], [ ZmodnZObj( 0, 15 ) ] ]
gap> IdentityMat(10,Z(4));
[ [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2),
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0,
       0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2),
       Z(2)^0 ] ]

#############################################################################
##
## Changes 4.6.3 -> 4.6.4

## For bugfixes

# 2013/03/27 (AK)
gap> im := [ [ [E(3)^2,0], [0,E(3)] ], [ [0,E(3)], [E(3)^2,0] ] ];;
gap> hom := GroupHomomorphismByImages( SymmetricGroup(3), Group(im), im );;
gap> NaturalCharacter(hom);
Character( CharacterTable( Sym( [ 1 .. 3 ] ) ), [ 2, 0, -1 ] )

# 2013/04/01 (MN)
gap> slp := StraightLineProgram(
> [ [ 1, -1 ], [ 2, -1 ], [ 3, -1 ], [ 4, -1 ], [ 5, -1 ], [ 4, 1, 10, 1 ], 
> [ 11, -1 ], [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], 
> [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], [ 8, 0, 10, 1, 8, 0, 5, 1 ], 
> [ 22, 1, 1, 1, 7, 1, 6, 1, 22, -1 ], [ 1, 0 ], [ 1, 0 ], [ 1, 0 ], 
> [ 23, 1 ], [ 27, 4 ], [ 28, 1, 13, 1 ], [ 27, 1 ] ],5);;
gap> SlotUsagePattern(slp);;

#############################################################################
##
## Changes 4.6.4 -> 4.6.5

## For bugfixes

# 2013/05/02 (BH)
gap> a := IntHexString("0000000000000000000000");
0
gap> a = 0;
true
gap> IsSmallIntRep(a);
true
gap> a := IntHexString("0000000000000000000001");
1
gap> a = 1;
true
gap> IsSmallIntRep(a);
true

# 2013/05/16 (AH)
gap>  TransitiveIdentification(TransitiveGroup(30,4064)^(1,4,5,2)
> (6,20,15,21,7,16,12,24)(8,18,14,22,10,17,13,23,9,19,11,25)(26,30,29,28));
4064

#############################################################################
##
## Changes 4.6.5 -> 4.7.1

## For bugfixes

# 2013/02/20 (AK)
gap> QuotientMod(4, 2, 6);
fail
gap> QuotientMod(2, 4, 6);
fail
gap> a := ZmodnZObj(2, 6);; b := ZmodnZObj(4, 6);;
gap> a/b;
fail
gap> b/a;
fail

# 2013/08/20 (MH)
gap> G:=SmallGroup(2^7*9,33);;
gap> H:=DirectProduct(G, ElementaryAbelianGroup(2^10));;
gap> Exponent(H); # should take at most a few milliseconds
72
gap> K := PerfectGroup(2688,3);;
gap> Exponent(K); # should take at most a few seconds
168

# 2013/08/21 (MH)
gap> IsStringRep("");
true
gap> RepresentationsOfObject("");
[ "IsStringRep", "IsInternalRep" ]
gap> DeclareOperation("TestOp",[IsStringRep]);
gap> InstallMethod(TestOp,[IsStringRep], function(x) Print("Your string: '",x,"'\n"); end);
gap> TestOp("");
Your string: ''
gap> PositionSublist("xyz", "");
1

# 2013/08/21 (MH)
gap> . . . .
Syntax error: Badly formed number, need a digit before or after the decimal po\
int in stream line 1
. . . .
^

# 2013/08/29 (MH)
gap> record := rec( foo := "bar" );
rec( foo := "bar" )
gap> fooo := "fooo";
"fooo"
gap> Unbind( fooo[4] );
gap> record.(fooo);
"bar"

# 2013/09/25 (AK, CJ)
gap> L := List(Shuffle([1..1000]), x -> Set([x]));;

# 2013/11/02 (AH)
gap> f:=FreeGroup(2);; id:=Group(Identity(f));; Id:=TrivialSubgroup(f);;
gap> LowIndexSubgroupsFpGroup(f,Id,2)=LowIndexSubgroupsFpGroup(f,id,2);
true

# 2013/11/19 (AK)
gap> rel := BinaryRelationOnPoints([[2,3],[4,5],[4,5],[6],[6],[]]);
Binary Relation on 6 points
gap> rel := ReflexiveClosureBinaryRelation(TransitiveClosureBinaryRelation(rel));
Binary Relation on 6 points
gap> IsLatticeOrderBinaryRelation(rel);
false
gap> rel := BinaryRelationOnPoints([[2,3],[4,5],[4],[6],[6],[]]);
Binary Relation on 6 points
gap> rel := ReflexiveClosureBinaryRelation(TransitiveClosureBinaryRelation(rel));
Binary Relation on 6 points
gap> IsLatticeOrderBinaryRelation(rel);
true

## For new features

# 2013/06/14 (AK, MH)
gap> foo:=function() return 42; end;
function(  ) ... end
gap> DeclareObsoleteSynonym("bar","foo","4.8");
gap> SetInfoLevel(InfoObsolete,1);
gap> bar();
#I  'bar' is obsolete.
#I  It may be removed in the future release of GAP 4.8
#I  Use foo instead.
42
gap> SetInfoLevel(InfoObsolete,0);

# 2013/08/08 (AH)
gap> free:=FreeGroup("a","b");
<free group on the generators [ a, b ]>
gap> product:=free/ParseRelators(free,"a2,b3");;
gap> SetIsFinite(product,false);
gap> GrowthFunctionOfGroup(product,12);
[ 1, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128 ]
gap> GrowthFunctionOfGroup(MathieuGroup(12));
[ 1, 5, 19, 70, 255, 903, 3134, 9870, 25511, 38532, 16358, 382 ]

# 2013/08/11 (MH)
gap> F:=FreeAbelianGroup(3);
<fp group on the generators [ f1, f2, f3 ]>
gap> IsAbelian(F);
true
gap> Size(F);
infinity

#############################################################################
##
## Changes 4.7.5 -> 4.7.6

## For bugfixes

# 2014/08/11 (AH)
gap> eij:=function(i,j)
> local I;
> I:=Z(2)*IdentityMat(5);
> I[i][j]:=Z(2);
> return I;
> end;;
gap> G2:=Group([eij(1,2),eij(2,3),eij(3,4),eij(4,5),eij(2,1),eij(4,3)]);;
gap> Length(NormalSubgroups(G2));
16

# 2014/08/13 (TB, AK). A bug that may cause ShortestVectors 
# to return an incomplete list (reported by Florian Beye).
gap> M:=[[4,-1,-2,1,2,-1,0,0,0,0,1,-1,2,-2,0,0,0,-2,2,-3,3,0],
> [-1,4,1,0,-1,2,0,3,3,-1,1,1,1,1,-1,1,3,1,-3,2,1,0],
> [-2,1,4,-1,-2,1,0,1,1,0,1,0,0,2,0,0,0,2,-2,4,-2,0],
> [1,0,-1,2,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
> [2,-1,-2,-1,6,-2,0,0,0,1,0,0,2,-2,0,0,0,-3,4,-4,4,-1],
> [-1,2,1,0,-2,4,0,2,2,0,0,0,1,2,-1,2,4,0,-1,2,-2,1],
> [0,0,0,0,0,0,2,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0],
> [0,3,1,0,0,2,0,6,4,-1,2,0,3,1,-1,2,4,0,-2,2,2,-1],
> [0,3,1,0,0,2,-1,4,6,-1,2,0,3,1,-1,2,4,0,-2,2,2,-1],
> [0,-1,0,0,1,0,0,-1,-1,2,-1,0,1,0,0,0,0,-1,3,0,-1,0],
> [1,1,1,0,0,0,0,2,2,-1,4,-1,1,1,0,0,0,1,-2,2,2,-1],
> [-1,1,0,0,0,0,0,0,0,0,-1,2,-1,0,0,0,0,0,0,0,0,0],
> [2,1,0,0,2,1,0,3,3,1,1,-1,6,-1,-1,2,4,-2,2,0,2,-1],
> [-2,1,2,0,-2,2,0,1,1,0,1,0,-1,4,0,0,0,2,-2,4,-2,0],
> [0,-1,0,0,0,-1,0,-1,-1,0,0,0,-1,0,2,-1,-2,0,0,0,0,0],
> [0,1,0,0,0,2,0,2,2,0,0,0,2,0,-1,4,4,-2,0,0,0,0],
> [0,3,0,0,0,4,0,4,4,0,0,0,4,0,-2,4,8,-2,0,0,0,0],
> [-2,1,2,0,-3,0,0,0,0,-1,1,0,-2,2,0,-2,-2,4,-4,4,-2,0],
> [2,-3,-2,0,4,-1,0,-2,-2,3,-2,0,2,-2,0,0,0,-4,8,-4,0,0],
> [-3,2,4,0,-4,2,0,2,2,0,2,0,0,4,0,0,0,4,-4,8,-4,0],
> [3,1,-2,0,4,-2,0,2,2,-1,2,0,2,-2,0,0,0,-2,0,-4,8,-2],
> [0,0,0,0,-1,1,0,-1,-1,0,-1,0,-1,0,0,0,0,0,0,0,-2,2]];;
gap> IsZero(M - TransposedMat(M));
true
gap> sv := ShortestVectors(M, 2).vectors;;
gap> s2 := Set(Concatenation(sv, -sv));;
gap> v := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,1,0,1,1];;
gap> v * M * v - 2 = 0;
true
gap> v in s2;
true

# 2014/08/21 (AK, CJ)
gap> (13*10^18) + (-3*10^18) = (10^19);
true

# 2014/09/05 (TB, reported by Benjamin Sambale)
gap> OrthogonalEmbeddings([[4]]);
rec( norms := [ 1, 1/4 ], solutions := [ [ 1 ], [ 2, 2, 2, 2 ] ], 
  vectors := [ [ 2 ], [ 1 ] ] )

# 2014/10/22 (CJ)
gap> Stabilizer(SymmetricGroup(5), [1,2,1,2,1], OnTuples) = Group([(3,5),(4,5)]);
true

#############################################################################
##
## Changes 4.7.6 -> 4.7.7

## For bugfixes
# 2014/12/05 (CJ, reported by Matt Fayers; see also tst/union.tst)
gap> Union([2],[3],[5,1..1]);
[ 1, 2, 3, 5 ]

# 2014/12/31 (AH, reported by Daniel Błażewicz)
gap> x := Indeterminate( Rationals, "x" );;
gap> ProbabilityShapes(x^5+5*x^2+3);
[ 2 ]
gap> GaloisType(x^12+63*x-450); # this was causing an infinite loop
301

# 2015/01/11 (CJ, reported by TB)
gap> x:= rec( qq:= "unused", r:= rec() );;
gap> y:= x.r;;
gap> y.entries:= rec( parent:= y );;
gap> x;
rec( qq := "unused", r := rec( entries := rec( parent := ~.r ) ) )

# 2015/01/08 (JM, reported by Nick Loughlin)
gap> FreeMonoid( infinity, "m", [  ] );
<free monoid with infinity generators>

# 2015/02/01 (MP, reported by WdG and HD )
gap> a:= 1494186269970473680896;
1494186269970473680896
gap> b:= 72057594037927936;
72057594037927936
gap> RemInt(a,b);
0

# 2015/02/02 (AH, reported by Petr Savicky)
gap> it := SimpleGroupsIterator(17971200);
<iterator>
gap> G := NextIterator(it); # 2F(4,2)'
2F(4,2)'
gap> ClassicalIsomorphismTypeFiniteSimpleGroup(G);
rec( parameter := [ "T" ], series := "Spor" )

# 2015/02/16 (CJ, Reported by TB)
gap> a:= rec();; a.( "" ):= 1;; a; Print( a,"\n" );
rec( ("") := 1 )
rec(
  ("") := 1 )

#2015/02/16 (CJ, reported by TB)
gap> f1:= function( x, l ) return ( not x ) in l; end;;
gap> f2:= function( x, l ) return not ( x in l ); end;;
gap> f3:= function( x, l ) return not x in l;     end;;
gap> [f1(true,[]), f2(true,[]), f3(true,[])];
[ false, true, true ]
gap> Print([f1,f2,f3],"\n");
[ function ( x, l )
        return (not x) in l;
    end, function ( x, l )
        return not x in l;
    end, function ( x, l )
        return not x in l;
    end ]

#############################################################################
##
## Changes 4.7.7 -> 4.7.8

#2015/05/12 (WdG, reported by Istvan Szollosi)
gap> L:= SimpleLieAlgebra("A",1,Rationals);
<Lie algebra of dimension 3 over Rationals>
gap> V:= HighestWeightModule(L,[2]);
<3-dimensional left-module over <Lie algebra of dimension 3 over Rationals>>
gap> v:= Basis(V)[1];
1*v0
gap> z:= Zero(V);
0*v0
gap> IsZero(z);
true
gap> w:= z+v;
1*v0
gap> -w+w;
0*v0

#############################################################################
#
#  Changes 4.7.8 -> 4.7.9

#2015/10/20 (Chris Jefferson)
gap> extS := ExternalSet(SymmetricGroup(4), [1..4],
>                   GeneratorsOfGroup(SymmetricGroup(4)),
>                   GeneratorsOfGroup(SymmetricGroup(4)),
>                   OnRight);
<xset:[ 1 .. 4 ]>
gap> ExternalSubset(extS);
[  ]^G

#############################################################################
#
#  Changes 4.8.3 -> 4.8.4

#2016/04/14 (Chris Jefferson)
gap> a := "abc";
"abc"
gap> b := "def";
"def"
gap> IsSortedList(a);
true
gap> IsSortedList(b);
true
gap> c := Concatenation(b,a);
"defabc"
gap> HasIsSortedList(c);
false
gap> IsSortedList(c);
false

#############################################################################
#
# Tests requiring loading some packages must be performed at the end.
# Do not put tests that do not need any packages below this line.
#
#############################################################################
#
# Tests requiring TomLib

##  bug 2 for fix 6
gap> if LoadPackage("tomlib", false) <> fail then
>      DerivedSubgroupsTom( TableOfMarks( "A10" ) );
>    fi;

#############################################################################
#
# Tests requiring CTblLib

# 2005/08/29 (TB)
gap> LoadPackage("ctbllib", "=0.0",false);
fail

##  Bug 18 for fix 4
gap> if LoadPackage("ctbllib", false) <> fail then
>      if Irr( CharacterTable( "WeylD", 4 ) )[1] <>
>           [ 3, -1, 3, -1, 1, -1, 3, -1, -1, 0, 0, -1, 1 ] then
>        Print( "problem with Irr( CharacterTable( \"WeylD\", 4 ) )[1]\n" );
>      fi;
>    fi;

# 2005/08/23 (TB)
gap> tbl:= CharacterTable( ElementaryAbelianGroup( 4 ) );;
gap> IsElementaryAbelian( tbl );
true
gap> ClassPositionsOfMinimalNormalSubgroups( tbl );
[ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ] ]
gap> if LoadPackage("ctbllib", false) <> fail then
>      tbl:= CharacterTableIsoclinic( CharacterTable( "2.A5.2" ) );
>      if tbl mod 3 = fail then
>        Error( CharacterTable( "Isoclinic(2.A5.2)" ), " mod 3" );
>      fi;
>      SourceOfIsoclinicTable( tbl );
>    fi;
gap> tbl:= CharacterTable( Group( () ) );;
gap> ClassPositionsOfElementaryAbelianSeries( tbl );;

# 2005/10/29 (TB)
gap> if LoadPackage("ctbllib", false) <> fail then
>      t:= CharacterTable( "S12(2)" );  p:= PrevPrimeInt( Exponent( t ) );
>      if not IsSmallIntRep( p ) then
>        PowerMap( t, p );
>      fi;
>    fi;

# 2005/12/08 (TB)
gap> if LoadPackage("ctbllib", false) <> fail then
>      if List( Filtered( Irr( CharacterTable( "Sz(8).3" ) mod 3 ),
>                         x -> x[1] = 14 ), ValuesOfClassFunction )
>         <> [ [ 14, -2, 2*E(4), -2*E(4), -1, 0, 1 ],
>              [ 14, -2, -2*E(4), 2*E(4), -1, 0, 1 ] ] then
>        Print( "ordering problem in table of Sz(8).3 mod 3\n" );
>      fi;
>    fi;

# 2005/12/08 (TB)
gap> LoadPackage("ctbllib", false);;
gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
gap> SetIdentifier( t, "Sym(4)" );  Display( t,
>     rec( powermap:= "ATLAS", centralizers:= "ATLAS", chars:= false ) );
Sym(4)

    24  4  8  3  4

 p      A  A  A  B
 p'     A  A  A  A
    1A 2A 2B 3A 4A


#############################################################################
#
# Tests requiring Crisp 

# 2005/05/03 (BH)
gap> if LoadPackage("crisp", false) <> fail then
>      F:=FreeGroup("a","b","c");;
>      a:=F.1;;b:=F.2;;c:=F.3;;
>      G:=F/[a^12,b^2*a^6,c^2*a^6,b^-1*a*b*a,c^-1*a*c*a^-7,c^-1*b*c*a^-9*b^-1];;
>      pcgs := PcgsElementaryAbelianSeries (G);;
>      ser := ChiefSeries (G);;
>      if ForAny (ser, H -> ParentPcgs (InducedPcgs (pcgs, H))
>                           <> ParentPcgs (pcgs)) then
>        Print( "problem with crisp (1)\n" );
>      fi;
>      if ForAny (ser, H -> ParentPcgs (InducedPcgsWrtHomePcgs (H))
>                           <>  ParentPcgs(HomePcgs (H))) then
>        Print( "problem with crisp (2)\n" );
>      fi;
>      if ForAny (ser, H -> ParentPcgs (InducedPcgsWrtHomePcgs (H))
>                           <> HomePcgs (H)) then
>        Print( "problem with crisp (3)\n" );
>      fi;
>      G2:=Image(IsomorphismPermGroup(G));
>      pcgs := PcgsElementaryAbelianSeries (G2);
>      ser := ChiefSeries (G2);
>      if ForAny (ser, H -> ParentPcgs (InducedPcgs (pcgs, H))
>                           <> pcgs) then
>        Print( "problem with crisp (4)\n" );
>      fi;
>      if ForAny (ser, H -> ParentPcgs (InducedPcgsWrtHomePcgs (H))
>                           <> ParentPcgs(HomePcgs (H))) then
>        Print( "problem with crisp (5)\n" );
>      fi;
>      if ForAny (ser, H -> ParentPcgs (InducedPcgsWrtHomePcgs (H))
>                           <> HomePcgs (H)) then
>        Print( "problem with crisp (6)\n" );
>      fi;
>    fi;

# 2005/06/23 (AH)
gap> if LoadPackage("crisp", false) <> fail then
>     h:=Source(EpimorphismSchurCover(SmallGroup(64,150)));
>     NormalSubgroups( Centre( h ) );
>     fi;

# 2005/10/14 (BH)
gap> if LoadPackage("crisp", "1.2.1", false) <> fail then
>     G := DirectProduct(CyclicGroup(2), CyclicGroup(3), SymmetricGroup(4));
>     AllInvariantSubgroupsWithQProperty (G, G, ReturnTrue, ReturnTrue, rec());
>     if ( (1, 5) in EnumeratorByPcgs ( Pcgs( SymmetricGroup (4) ) ) ) then
>      Print( "problem with crisp (7)\n" );
>     fi;
>    fi;

# 2012/06/18 (FL)
gap> if LoadPackage("cvec",false) <> fail then mat := [[Z(2)]]; 
> ConvertToMatrixRep(mat,2); cmat := CMat(mat); cmat := cmat^1000; fi;

# 2012/06/18 (MH)
gap> if LoadPackage("anupq",false) <> fail then
> for i in [1..192] do Q:=Pq( FreeGroup(2) : Prime:=3, ClassBound:=1 ); od; fi;

# 2015/04/01 (SL)
gap> p := 227;; x := X(GF(p), "x");; f := x^(7^2) - x;;
gap> PowerMod(x, p, f);
x^35

#2016/2/4 (AH)
gap> N := AlternatingGroup(6);; H := AutomorphismGroup(N);;
gap> G := SemidirectProduct(H, N);;
gap> Size(Image(Embedding(G, 1)))=Size(H);
true

#2016/3/1 (AH)
gap> g:=PSL(6,4);;
gap> Sum(ConjugacyClasses(g),Size)=Size(g);
true
gap> Size(AutomorphismGroup(TransitiveGroup(12,269)));
14400

#2016/3/3 (AH, reported by DFH)
gap> G:=Group([[[0,1,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0,0],[0,0,0,1,0,0,0,0,0],
> [0,0,1,0,0,0,0,0,0],[0,0,0,0,0,1,0,0,0],[0,0,0,0,1,0,0,0,0],
> [0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,1,0,0],
> [1,1,Z(4)^2,Z(4)^2,Z(4)^2,Z(4)^2,0,0,1]],
> [[0,0,1,0,0,0,0,0,0],[Z(4)^2,Z(4),Z(4),0,0,0,0,0,0],
> [Z(4),Z(4)^2,Z(4),0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0],
> [Z(4),Z(4),Z(4),1,1,0,0,0,0],[0,0,0,0,0,0,1,0,0],[1,1,1,0,0,1,1,0,0],
> [0,0,0,0,0,0,0,0,1],[Z(4),Z(4),Z(4),0,0,0,0,1,1]]]*Z(4)^0);;
gap> pa:=ProjectiveActionHomomorphismMatrixGroup(G);;  
gap> r:=PseudoRandom(G);;                                       
gap> a:=PreImagesRepresentative(pa,ImagesRepresentative(pa,r));; 
gap> Order(r/a) in [1,3];
true
gap> H:=Image(pa);;Size(H);
50232960

#2016/3/11 (AH, reported by CJ)
gap> g := Group([ (1,2,3), (2,3,4) ]);;
gap> IsAlternatingGroup(g);
true
gap> Size(Stabilizer(g, [ [1,2], [3,4] ], OnSetsSets));
4

#2016/3/16 (AH, issue #675)
gap> G:=Group((1,2,3,4));;Factorization(G,Elements(G)[1]);
<identity ...>

#2016/5/2 (MP)
gap> S := FullTransformationMonoid(2);;
gap> D := GreensDClassOfElement(S, IdentityTransformation);;
gap> Intersection(D, []);
[  ]
gap> Intersection([], D);
[  ]

#2016/04/29 (FL, bug reported on support list)
gap> Collected(List([1..200], i-> RandomPrimitivePolynomial(2,2)));
[ [ x_1^2+x_1+Z(2)^0, 200 ] ]

#another bug, detected when fixing the previous one (FL)
gap> RandomPrimitivePolynomial(2,2,100);
x_100^2+x_100+Z(2)^0

#and a third bug (FL)
gap> RandomPrimitivePolynomial(2,1);
x_1+Z(2)^0
gap> RandomPrimitivePolynomial(2,1,13);
x_13+Z(2)^0

#2016/04/27 (FL, bug reported on support list)
gap> l := [1,,,5];;
gap> Remove(l);
5
gap> [l, Length(l)];
[ [ 1 ], 1 ]
gap> l := [,,,"x"];;
gap> Remove(l);
"x"
gap> [l, Length(l)];
[ [  ], 0 ]
gap> l := [1,2,,[],"x"];;
gap> Remove(l);
"x"
gap> [l, Length(l)];
[ [ 1, 2,, [  ] ], 4 ]

#2016/8/1 (#869)
gap> x:=X(GF(4));;e:=AlgebraicExtension(GF(4),x^3+x+1);;
gap> Length(Elements(e));
64
gap> Length(Set(Elements(e)));
64

#2016/8/4 (AH, Reported by D. Savchuk)
gap> r1:=PolynomialRing(GF(2),3);
GF(2)[x_1,x_2,x_3]
gap> x_1:=r1.1;;x_2:=r1.2;;x_3:=r1.3;;
gap> I:=Ideal(r1,[x_1^2-x_2,x_2^2-x_1,x_1*x_2-x_3]);;
gap> Size(r1/I);
16
gap> r1:=PolynomialRing(GF(2),4);;
gap> x_1:=r1.1;;x_2:=r1.2;;x_3:=r1.3;;x_4:=r1.4;;
gap> rels:=[x_1^2+x_2,x_1*x_2+x_3,x_1*x_3+x_4, x_1*x_4+x_1,x_2^2+x_4,
>   x_2*x_3+x_1,x_2*x_4+x_2,x_3^2+x_2,x_3*x_4+x_3,x_4^2+x_4];;
gap> Size(r1/Ideal(r1,rels));
32

# 2016/8/22 (AH)
gap> g:=Group((1,2,4,3)(5,7,6,8)(9,11,10,13)(12,16,14,15)(17,19,18,20)       
> (21,23,22,24)(25,31,36,39,35,27)(26,30,37,38,33,28)(29,32,34)
> (40,41,42,43,44),
> (1,3,6)(2,5,4)(7,9,12)(8,10,14)(11,15,17)(13,16,18)(19,21,24)
> (20,22,23)(25,28,34)(26,33,37)(29,35,38)(30,32,36)(45,46,47,48,49));;
gap> Size(FrattiniSubgroup(g));
2

#############################################################################
gap> STOP_TEST( "bugfix.tst", 831990000);

#############################################################################
##
#E