/*
Irreducible modules test.
AKS, 2019.
*/

ClearVerbose();

procedure do_test(T)
    for t in T do
	G, p, A := Explode(t);
	A := {* t: t in A *};
	printf "Test group order: %o, p: %o\n", #G, p;
	IndentPush();
	"A:", A;
	IndentPop();
	time L := AbsolutelyIrreducibleModules(G, GF(p));
	LD := {* <Dimension(M), Degree(BaseRing(M))>: M in L *};
	if LD ne A then
	    "BAD G:", G;
	    "BAD p:", p;
	    "BAD LD:", LD;
	    "SHOULD BE A:", A;
	    assert false;
	end if;
    end for;
end procedure;

G := PSL(3, 3);
""; CompositionFactors(G);
do_test([
    <G, 2, [ <1, 1>, <12, 1>, <16, 4>, <16, 4>, <16, 4>, <16, 4>, <26, 1> ]>,
    <G, 3, [ <1, 1>, <3, 1>, <3, 1>, <6, 1>, <6, 1>, <7, 1>, <15, 1>,
	    <15, 1>, <27, 1> ]>,
    <G, 5, [ <1, 1>, <12, 1>, <13, 1>, <16, 4>, <16, 4>, <16, 4>, <16, 4>,
	    <26, 1>, <26, 2>, <26, 2>, <27, 1>, <39, 1> ]>,
    <G, 13, [ <1, 1>, <11, 1>, <13, 1>, <16, 1>, <26, 1>, <26, 2>, <26, 2>,
	<39, 1> ]>
]);


G:=PermutationGroup("M22");
""; CompositionFactors(G);
do_test([
    <G, 2, {* <1, 1>, <10, 1>^^2, <34, 1>, <70, 2>^^2, <98, 1> *}>,
    <G, 3, {* <1, 1>, <21, 1>, <45, 2>^^2, <49, 1>^^2, <55, 1>, <99, 1>,
	<210, 1>, <231, 1> *}>
]);

G:=PSL(3, 8);
""; CompositionFactors(G);
do_test([
    <G, 2, {* <1, 1>, <3, 3>^^6, <8, 3>^^3, <9, 3>^^12, <24, 3>^^12,
    <27, 1>^^2, <27, 3>^^6, <64, 3>^^3, <72, 3>^^12, <192, 3>^^6, <512, 1> *}>
]);

G:=SmallGroup(2^4*3^2*5, 30);
""; CompositionFactors(G);
do_test([
    <G, 2, {* <1, 1>, <2, 1>, <2, 2>^^2, <2, 3>^^3, <4, 2>^^2, <4, 6>^^6 *}>,
    <G, 3, {* <1, 1>^^4, <1, 2>^^4, <2, 1>^^2, <2, 2>^^8, <2, 4>^^8 *}>,
    <G, 5, {* <1, 1>^^8, <2, 1>^^6, <2, 2>^^4, <2, 3>^^12, <2, 6>^^12 *}>,
    <G, 7, {* <1, 1>^^4, <1, 2>^^4, <2, 1>^^6, <2, 2>^^12, <2, 3>^^12,
	    <2, 4>^^8, <2, 6>^^12, <4, 2>^^8, <4, 6>^^24 *}>
]);

