1#@local g,t
2gap> START_TEST("ctbl.tst");
3
4# `ClassPositionsOf...' for the trivial group (which usually causes trouble)
5gap> g:= TrivialGroup( IsPermGroup );;
6gap> t:= CharacterTable( g );;
7gap> ClassPositionsOfAgemo( t, 2 );
8[ 1 ]
9gap> ClassPositionsOfCentre( t );
10[ 1 ]
11gap> ClassPositionsOfDerivedSubgroup( t );
12[ 1 ]
13gap> ClassPositionsOfDirectProductDecompositions( t );
14[  ]
15gap> ClassPositionsOfElementaryAbelianSeries( t );
16[ [ 1 ] ]
17gap> ClassPositionsOfFittingSubgroup( t );
18[ 1 ]
19gap> ClassPositionsOfLowerCentralSeries( t );
20[ [ 1 ] ]
21gap> ClassPositionsOfMaximalNormalSubgroups( t );
22[  ]
23gap> ClassPositionsOfNormalClosure( t, [ 1 ] );
24[ 1 ]
25gap> ClassPositionsOfNormalSubgroups( t );
26[ [ 1 ] ]
27gap> ClassPositionsOfUpperCentralSeries( t );
28[ [ 1 ] ]
29gap> ClassPositionsOfSolvableResiduum( t );
30[ 1 ]
31gap> ClassPositionsOfSupersolvableResiduum( t );
32[ 1 ]
33gap> ClassPositionsOfCentre( TrivialCharacter( t ) );
34[ 1 ]
35gap> ClassPositionsOfKernel( TrivialCharacter( t ) );
36[ 1 ]
37
38# Display for the table of the trivial group
39gap> Display( CharacterTable( CyclicGroup( 1 ) ) );
40CT1
41
42
43       1a
44
45X.1     1
46
47# Display with unusual parameters
48gap> t:= CharacterTable( SymmetricGroup( 3 ) );;  Irr( t );;
49gap> Display( t, rec( centralizers:= false ) );
50CT2
51
52       1a 2a 3a
53    2P 1a 1a 3a
54    3P 1a 2a 1a
55
56X.1     1 -1  1
57X.2     2  . -1
58X.3     1  1  1
59gap> Display( t, rec( centralizers:= "ATLAS" ) );
60CT2
61
62        6  2  3
63
64       1a 2a 3a
65    2P 1a 1a 3a
66    3P 1a 2a 1a
67
68X.1     1 -1  1
69X.2     2  . -1
70X.3     1  1  1
71gap> Display( t, rec( chars:= 1 ) );
72CT2
73
74     2  1  1  .
75     3  1  .  1
76
77       1a 2a 3a
78    2P 1a 1a 3a
79    3P 1a 2a 1a
80
81X.1     1 -1  1
82gap> Display( t, rec( chars:= [ 2, 3 ] ) );
83CT2
84
85     2  1  1  .
86     3  1  .  1
87
88       1a 2a 3a
89    2P 1a 1a 3a
90    3P 1a 2a 1a
91
92X.2     2  . -1
93X.3     1  1  1
94gap> Display( t, rec( chars:= PermChars( t ) ) );
95CT2
96
97     2  1  1  .
98     3  1  .  1
99
100       1a 2a 3a
101    2P 1a 1a 3a
102    3P 1a 2a 1a
103
104Y.1     1  1  1
105Y.2     2  .  2
106Y.3     3  1  .
107Y.4     6  .  .
108gap> Display( t, rec( chars:= PermChars( t ), letter:= "P" ) );
109CT2
110
111     2  1  1  .
112     3  1  .  1
113
114       1a 2a 3a
115    2P 1a 1a 3a
116    3P 1a 2a 1a
117
118P.1     1  1  1
119P.2     2  .  2
120P.3     3  1  .
121P.4     6  .  .
122gap> Display( t, rec( classes:= 1 ) );
123CT2
124
125     2  1
126     3  1
127
128       1a
129    2P 1a
130    3P 1a
131
132X.1     1
133X.2     2
134X.3     1
135gap> Display( t, rec( classes:= [ 2, 3 ] ) );
136CT2
137
138     2  1  .
139     3  .  1
140
141       2a 3a
142    2P 1a 3a
143    3P 2a 1a
144
145X.1    -1  1
146X.2     . -1
147X.3     1  1
148gap> Display( t, rec( indicator:= true ) );
149CT2
150
151        2  1  1  .
152        3  1  .  1
153
154          1a 2a 3a
155       2P 1a 1a 3a
156       3P 1a 2a 1a
157       2
158X.1    +   1 -1  1
159X.2    +   2  . -1
160X.3    +   1  1  1
161gap> Display( t, rec( indicator:= [ 2, 3 ] ) );
162CT2
163
164          2  1  1  .
165          3  1  .  1
166
167            1a 2a 3a
168         2P 1a 1a 3a
169         3P 1a 2a 1a
170       2 3
171X.1    + 0   1 -1  1
172X.2    + 1   2  . -1
173X.3    + 1   1  1  1
174gap> Display( t, rec( powermap:= false ) );
175CT2
176
177     2  1  1  .
178     3  1  .  1
179
180       1a 2a 3a
181
182X.1     1 -1  1
183X.2     2  . -1
184X.3     1  1  1
185gap> Display( t, rec( powermap:= 2 ) );
186CT2
187
188     2  1  1  .
189     3  1  .  1
190
191       1a 2a 3a
192    2P 1a 1a 3a
193
194X.1     1 -1  1
195X.2     2  . -1
196X.3     1  1  1
197gap> Display( t, rec( powermap:= [ 2, 3 ] ) );
198CT2
199
200     2  1  1  .
201     3  1  .  1
202
203       1a 2a 3a
204    2P 1a 1a 3a
205    3P 1a 2a 1a
206
207X.1     1 -1  1
208X.2     2  . -1
209X.3     1  1  1
210gap> # Note that the 'ATLAS' option for power maps has the desired effect
211gap> # only if the function 'CambridgeMaps' is bound during the tests,
212gap> # which depends on the loaded packages; we omit this test.
213gap> # Display( t, rec( powermap:= "ATLAS" ) );
214gap> Display( t,
215>        rec( charnames:= List( CharacterParameters( t ), String ) ) );
216CT2
217
218                    2  1  1  .
219                    3  1  .  1
220
221                      1a 2a 3a
222                   2P 1a 1a 3a
223                   3P 1a 2a 1a
224
225[ 1, [ 1, 1, 1 ] ]     1 -1  1
226[ 1, [ 2, 1 ] ]        2  . -1
227[ 1, [ 3 ] ]           1  1  1
228gap> Display( t,
229>        rec( classnames:= List( ClassParameters( t ), String ) ) );
230CT2
231
232     2                  1                  1                  .
233     3                  1                  .                  1
234
235       [ 1, [ 1, 1, 1 ] ]    [ 1, [ 2, 1 ] ]       [ 1, [ 3 ] ]
236    2P [ 1, [ 1, 1, 1 ] ] [ 1, [ 1, 1, 1 ] ]       [ 1, [ 3 ] ]
237    3P [ 1, [ 1, 1, 1 ] ]    [ 1, [ 2, 1 ] ] [ 1, [ 1, 1, 1 ] ]
238
239X.1                     1                 -1                  1
240X.2                     2                  .                 -1
241X.3                     1                  1                  1
242
243# viewing and printing of character tables with stored groups
244gap> t:= CharacterTable( DihedralGroup( 8 ) );;
245gap> View( t ); Print( "\n" );
246CharacterTable( <pc group of size 8 with 3 generators> )
247gap> Print( t, "\n" );
248CharacterTable( Group( [ f1, f2, f3 ] ) )
249gap> ViewString( t );
250"CharacterTable( <group of size 8 with 3 generators> )"
251gap> PrintString( t );
252"CharacterTable( \"Group( \>[ f1, f2, f3 ]\<\> )\< )"
253gap> t:= CharacterTable( SymmetricGroup( 5 ) );;
254gap> View( t ); Print( "\n" );
255CharacterTable( Sym( [ 1 .. 5 ] ) )
256gap> Print( t, "\n" );
257CharacterTable( SymmetricGroup( [ 1 .. 5 ] ) )
258gap> ViewString( t );
259"CharacterTable( Sym( [ 1 .. 5 ] ) )"
260gap> PrintString( t );
261"CharacterTable( \"Group( \>[ (1,2,3,4,5), (1,2) ]\<\> )\< )"
262
263# entries of mutable attributes are immutable
264gap> t:= CharacterTable( SymmetricGroup( 5 ) );
265CharacterTable( Sym( [ 1 .. 5 ] ) )
266gap> PowerMap( t, 2 );;  PowerMap( t, 3 );;
267gap> Length( ComputedPowerMaps( t ) );
2683
269gap> IsMutable( ComputedPowerMaps( t ) );
270true
271gap> ForAny( ComputedPowerMaps( t ), IsMutable );
272false
273gap> Indicator( t, 2 );;
274gap> Length( ComputedIndicators( t ) );
2752
276gap> IsMutable( ComputedIndicators( t ) );
277true
278gap> ForAny( ComputedIndicators( t ), IsMutable );
279false
280gap> PrimeBlocks( t, 2 );;
281gap> Length( ComputedPrimeBlockss( t ) );
2822
283gap> IsMutable( ComputedPrimeBlockss( t ) );
284true
285gap> ForAny( ComputedPrimeBlockss( t ), IsMutable );
286false
287
288# create certain Brauer tables ...
289# ... of p-solvable groups
290gap> t:= CharacterTable( SymmetricGroup( 4 ) );;
291gap> IsCharacterTable( t mod 2 );
292true
293gap> IsCharacterTable( t mod 3 );
294true
295
296# ... where all Brauer characters lift to characteristic zero
297gap> g:= PSL(2,5);;
298gap> t:= CharacterTable( g );;
299gap> IsCharacterTable( t mod 3 );
300true
301gap> IsCharacterTable( t mod 5 );
302true
303
304# ... where the Brauer tables of the factors of a product can be computed
305gap> g:= AlternatingGroup( 5 );;
306gap> t:= CharacterTable( g );;
307gap> t:= CharacterTableDirectProduct( t, t );;
308gap> IsCharacterTable( t mod 5 );
309true
310
311# test a bugfix
312gap> g:= SmallGroup( 96, 3 );;
313gap> t:= CharacterTable( g );;
314gap> ClassPositionsOfLowerCentralSeries( t );
315[ [ 1 .. 12 ], [ 1, 3, 4, 5, 6, 9, 10, 11 ] ]
316gap> g:= SmallGroup( 3^5, 22 );;
317gap> t:= CharacterTable( g );;
318gap> ClassPositionsOfLowerCentralSeries( t );
319[ [ 1 .. 35 ], [ 1, 4, 6, 12, 15 ], [ 1, 6, 15 ], [ 1 ] ]
320gap> g:= SmallGroup( 96, 66 );;
321gap> t:= CharacterTable( g );;
322gap> ClassPositionsOfSupersolvableResiduum( t );
323[ 1, 5, 6 ]
324
325##
326gap> STOP_TEST( "ctbl.tst" );
327