/*
**   Test for GrpLie.
**   Sergei Haller Apr 2006.
**
*/


//SetEchoInput(true);

G := GroupOfLieType("A2",2);
H := GroupOfLieType("A2",3);
assert G ne H;



procedure test(t)
    IndentPush();
    R := RootDatum(t);
    N := NumPosRoots(R);

    k<a,b> := RationalFunctionField(Rationals(),2);

    G := GroupOfLieType(R,k);

    rts := N gt 6 select { Random([1..2*N]) : i in [1..10] }
                    else { 1..2*N };

    /*******/
    "Make sure all root subgroups are isom to additive grp of fld";
    "Test", #rts, "roots:", rts;
    /*******/

    assert forall(r){ r : r in rts | elt<G|<r,a>>*elt<G|<r,b>> eq elt<G|<r,a+b>> };

    
    G := GroupOfLieType(R,GF(17));

    /*******/
    "Make sure multiplication is associative";
    /*******/

    x := Random(G); y := Random(G); z := Random(G);
    assert x*(y*z) eq (x*y)*z;
    
    /*******/
    "Make sure inversion is inversion";
    /*******/

    x1 := x^-1;
    assert #{x*x1, x1*x, G!1} eq 1;
    
    IndentPop();
end procedure;



/* fake randomness to get different test every night */

SetSeed(Floor(Realtime()));
"Seed set to", GetSeed();


for t in ["A7","B7","C7","D7",
          "G2","F4","E6","E7","E8"] do;

    "Type", t;
    time test(t);
end for;


/////////////////////
// Other stuff by AKS

dim := 3; 
F := GF(2);
tups := [<1,2,3,1>,<2,1,3,-1>];
L := LieAlgebra<F, dim | tups : Rep := "Partial">;
assert Dimension(sub<L | L.1>) eq 1;;

