default(realprecision,38);
default(parisize,100M);

\\examples from docu
nf = nfinit(y^2+1);
PR = idealprimedec(nf,5); #PR
hi = [];
hf = [PR, [1/3,-1/3]];
A = alginit(nf, [3,hf,hi]);
algsplittingfield(A).pol
K = nfsplitting(x^4+x+1);
gal = galoisinit(K);
al = alggroupcenter(gal,,&cc);
algiscommutative(al)
#cc[3]
\\end examples

\\test ordering in simpledec
print("ordering");
Sn(n) = [Vecsmall(numtoperm(n,i)) | i <- [0..n!-1]];
D2n(n)=
{
  [[vectorsmall(2*n,i,if(i==n,1,i==2*n,n+1,i+1)),
    vectorsmall(2*n,i,if(i==1,n+1,i==n+1,1,2*n+2-i))],Vecsmall([n,2])];
}
testordering(al)={
 my(jac, ss, dec);
 jac=algradical(al);
 if(jac==0, ss=al, ss=algquotient(al,jac));
 dec=algsimpledec(ss)[2];
 print(apply(algdim,dec));
 print([#algcenter(x) | x<-dec]);
};
setrand(1);
{for(n=1,4,
  print("S",n);
  al = alggroup(Sn(n),7);
  print(algisassociative(al));
  testordering(al);
);}
{for(n=1,3,
  print("S",n);
  al = alggroup(Sn(n));
  print(algisassociative(al));
  testordering(al);
);}
{for(n=4,16,
  print("D",2*n);
  al = alggroup(D2n(n),691);
  if(n<10,print(algisassociative(al)));
  testordering(al);
);}
{for(n=4,12,
  print("D",2*n);
  al = alggroup(D2n(n));
  if(n<10,print(algisassociative(al)));
  testordering(al);
);}

\\alggroup
print("alggroup");
K = nfsplitting(x^3-x+1);
gal = galoisinit(K);
al = alggroup(gal)
algissemisimple(al)
alggroup([Vecsmall([2,1]),Vecsmall([1,2])]);
alggroup([Vecsmall([1,2])]);
alggroup([Vecsmall([1,2,3]), Vecsmall([1,3,2])])
gal = galoisinit(nfsplitting(x^4+7));
alggroup(gal);
gal = galoisinit(nfsplitting(x^6+7));
alggroup(gal);

\\alggroupcenter
{for(n=1,5,
  print("S",n);
  al = alggroupcenter(Sn(n),7);
  print(algisassociative(al));
  print(algiscommutative(al));
  print(algdim(al) == #algsimpledec(al)[2]);
);}
{for(n=1,4,
  print("S",n);
  al = alggroupcenter(Sn(n));
  print(algisassociative(al));
  print(algiscommutative(al));
  print(algdim(al) == #algsimpledec(al)[2]);
);}
conjD2neven(n)=2+(n-2)/2+2;
conjD2nodd(n)=1+(n-1)/2+1;
conjD2n(n)=if(n%2,conjD2nodd(n),conjD2neven(n));
firstprime1mod(n) =
{
  p = 2;
  while(p%n!=1, p=nextprime(p+1));
  p;
}
{for(n=3,20,
  print("D",2*n);
  p = firstprime1mod(2*n);
  al = alggroupcenter(D2n(n),p);
  print(algdim(al) == conjD2n(n));
  print(algisassociative(al));
  print(algiscommutative(al));
  print(algdim(al) == #algsimpledec(al)[2]);
);}
{forprime(p=5,30,
  print("D",2*p);
  al = alggroupcenter(D2n(p));
  print(algdim(al) == conjD2n(p));
  print(algdim(al) > #algsimpledec(al)[2]);
);}
alggroupcenter(Sn(3),0);

\\Bill: random slow cases
G=galoisinit(x^24-24*x^22+253*x^20-1540*x^18+5984*x^16-15488*x^14+27026*x^12-31448*x^10+23540*x^8-10528*x^6+2416*x^4-192*x^2+1);
al = alggroup(G);
setrand(8690); algsimpledec(al)[2];
setrand(1294); algsimpledec(al)[2];



\\bad inputs
alggroupcenter(['x,'y]);
alggroupcenter('x,1); \\Bill's bug
alggroup("a");
alggroup(["a"]);
alggroup(["a", "b", "c"]);
alggroup([Vecsmall([1]), Vecsmall([1,2]), Vecsmall([1,2,3])]);
alggroup([Vecsmall([1]), Vecsmall([2,3]), Vecsmall([1,2,3])]);


