testgo := procedure(n,q)
  printf "Conjugacy classes for GO(%o,%o)\n", n,q;
  G := GO(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := GO(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testgoplus := procedure(n,q)
  printf "Conjugacy classes for GOPlus(%o,%o)\n", n,q;
  G := GOPlus(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := GOPlus(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testgominus := procedure(n,q)
  printf "Conjugacy classes for GOMinus(%o,%o)\n", n,q;
  G := GOMinus(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := GOMinus(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testso := procedure(n,q)
  printf "Conjugacy classes for SO(%o,%o)\n", n,q;
  G := SO(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := SO(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testsoplus := procedure(n,q)
  printf "Conjugacy classes for SOPlus(%o,%o)\n", n,q;
  G := SOPlus(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := SOPlus(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testsominus := procedure(n,q)
  printf "Conjugacy classes for SOMinus(%o,%o)\n", n,q;
  G := SOMinus(n,q);
  time xx := Classes(G : Al := "Lifting");
  delete G;
  G := SOMinus(n,q);
  time cc := Classes(G);
  assert forall{ g : g in xx | exists{h : h in cc | IsConjugate(G,g[3],h[3])}};
  assert forall{ h : h in cc | exists{g : g in xx | IsConjugate(G,g[3],h[3])}};
  print "Passed\n";
end procedure;

testcordgo := procedure(n,q)
  printf "Centraliser orders for GO(%o,%o)\n", n,q;
    S := GO(n,q);
    cc := Classes(S);
    L := S`Labels_S;
    for i -> mu in L do
      g := InternalRepMatrixO(mu);
      assert g eq cc[i][3];
      assert Index(S,Centraliser(S,g)) eq cc[i][2];
    end for;
    print "Passed\n";
end procedure;

testcordgoplus := procedure(n,q)
  printf "Centraliser orders for GO(%o,%o)\n", n,q;
    S := GOPlus(n,q);
    cc := Classes(S);
    L := S`Labels_S;
    for i -> mu in L do
      g := InternalRepMatrixO(mu);
      assert g eq cc[i][3];
      assert Index(S,Centraliser(S,g)) eq cc[i][2];
    end for;
    print "Passed\n";
end procedure;

testcordgominus := procedure(n,q)
  printf "Centraliser orders for GO(%o,%o)\n", n,q;
    S := GOMinus(n,q);
    cc := Classes(S);
    L := S`Labels_S;
    for i -> mu in L do
      g := InternalRepMatrixO(mu);
      assert g eq cc[i][3];
      assert Index(S,Centraliser(S,g)) eq cc[i][2];
    end for;
    print "Passed\n";
end procedure;

testgo(5,5);
testgo(3,5);
testgoplus(4,5);
testgoplus(6,5);
testgominus(4,5);
testgominus(6,5);

testso(5,5);
testso(3,5);
testsoplus(4,5);
testsoplus(6,5);
testsominus(4,5);
testsominus(6,5);


testcordgo(5,5);
testcordgo(3,5);
testcordgoplus(4,5);
testcordgoplus(6,5);
testcordgominus(4,5);
testcordgominus(6,5);

