########################################################################
# #
# Test Script for lib/finite-group.rb #
# #
########################################################################
require "rubyunit"
require "algebra/finite-group"
require "algebra/permutation-group"
include Algebra
PG = PermutationGroup
P = Permutation
S5 = PG.symmetric(5)
A5 = PG.alternate(5)
S4 = PG.symmetric(4)
A4 = PG.alternate(4)
S3 = PG.symmetric(3)
A3 = PG.alternate(3)
T3 = PG[PG.unity(3), P[0, 2, 1]]
S2 = PG.symmetric(2)
e = P.unity(4)
a = P[1, 0, 2, 3]
b = P[0, 1, 3, 2]
A = PG[e, a]
B = PG[e, b]
C = PG[e, a, b, a*b]
class Rational;def inspect; to_s; end;end
class TestFiniteGroup < Runit
#Operator Domain
def test__star #test for *
ab = A * B
assert_equal(ab.class, Set)
assert_equal(ab, C)
end
def test__slash #test for /
s = S3 / S2
t = Set[
Set[P[1, 2, 0], P[0, 2, 1]],
Set[P[0, 1, 2], P[1, 0, 2]],
Set[P[2, 1, 0], P[2, 0, 1]]
]
assert_equal(s, t)
end
def test__parcent #test for %
s = S3 % S2
t6 = Set[P[0, 2, 1], P[2, 1, 0], P[0, 1, 2]]
t7 = Set[P[2, 1, 0], P[1, 0, 2], P[1, 2, 0]]
assert(s == t6 || s == t7)
end
def test_orbit! #test for orbit!
e = P.unity(4)
a = P[1, 0, 2, 3]
b = P[0, 1, 3, 2]
x = PG[e, a]
y = PG[e, b]
x.orbit!(y)
assert_equal(x, PG[e, a, b, a*b])
end
def test_initialize #test for initialize
e = P.unity(4)
a = P[1, 0, 2, 3]
assert_equal(PG[e, a].size, 2)
end
def test_set_unity #test for set_unity
e = P.unity(4)
a = P[1, 0, 2, 3]
assert_equal(PG[e, a].unity, e)
end
def test_semi_complete! #test for semi_complete!
e = P.unity(4)
a = P[1, 2, 0, 3]
x = PG[e, a]
x.semi_complete!
assert_equal(x, PG[e, a, a**2])
end
def test_semi_complete #test for semi_complete
e = P.unity(4)
a = P[1, 2, 0, 3]
x = PG[e, a]
y = x.semi_complete
assert_equal(x, PG[e, a])
assert_equal(y, PG[e, a, a**2])
end
def test_complete! #test for complete!
e = P.unity(4)
a = P[1, 2, 0, 3]
x = PG[e, a]
x.complete!
assert_equal(x, PG[e, a, a**2])
end
def test_complete #test for complete
e = P.unity(4)
a = P[1, 2, 0, 3]
x = PG[e, a]
y = x.complete
assert_equal(x, PG[e, a])
assert_equal(y, PG[e, a, a**2])
end
def test_self_dot_generate_strong #test for self.generate_strong
a = PG.generate_strong(P.unity(3),
[P[0, 2, 1]] ,[P[1, 0, 2], P[2, 0, 1]])
assert_equal(S3, a)
a = PG.generate_strong(P.unity(3),
[P[2, 0, 1], P[1, 2, 0]])
assert_equal(A3, a)
end
def test_closed? #test for closed?
assert(S3.closed?)
e = P.unity(4)
a = P[1, 2, 0, 3]
assert(!PG[e, a].closed?)
end
def test_subgroups #test for subgroups
e = P.unity(2)
a = P[1, 0]
assert_equal(S2.subgroups, Set[PG[e], S2])
e = P.unity(3)
a = P[1, 0, 2]
b = P[0, 2, 1]
c = P[2, 1, 0]
m = Set[
PG[e],
PG[e, a], PG[e, b], PG[e, c],
A3, S3
]
assert_equal(S3.subgroups, m)
k = Set.phi
S3.subgroups do |s|
k << s
end
assert_equal(k, m)
end
def test_centralizer #test for centralizer
assert_equal(S3.centralizer(S3), PG.unit_group(3))
assert_equal(S3.centralizer(A3), A3)
assert_equal(S3.centralizer(T3), T3)
assert_equal(A3.centralizer(T3), PG.unit_group(3))
end
def test_center #test for center
assert_equal(S3.center, PG.unit_group(3))
assert_equal(A3.center, A3)
end
def test_center? #test for center?
assert(!S3.center?(P[1, 2, 0]))
assert(A3.center?(P[1, 2, 0]))
end
def test_normalizer #test for normalizer
assert_equal(S3.normalizer(T3), T3)
assert_equal(S3.normalizer(A3), S3)
end
def test_normal? #test for normal?
assert(PG.unit_group(3).normal?(S3))
assert(!S3.normal?(T3))
assert(S3.normal?(A3))
assert(S3.normal?(S3))
end
def test_normal_subgroups #test for normal_subgroups
assert_equal(S3.normal_subgroups, Set[S3, A3, PG.unit_group(3)])
end
def test_conjugacy_class #test for conjugacy_class
assert_equal(S3.conjugacy_class(P[2, 0, 1]).size, 2)
assert_equal(S4.conjugacy_class(P[2, 0, 1, 3]).size, 8)
assert_equal(S5.conjugacy_class(P[2, 0, 1, 4, 3]).size, 20)
end
def test_conjugacy_classes #test for conjugacy_classes
assert_equal(S3.conjugacy_classes.map_s{|c| c.size},
Set[1, 3, 2])
assert_equal(S4.conjugacy_classes.map_s{|c| c.size},
Set[6, 6, 8, 3, 1])
assert_equal(S5.conjugacy_classes.map_s{|c| c.size},
Set[30, 24, 15, 10, 20, 20, 1])
end
def test_simple? #test for simple?
assert(S2.simple?)
assert(!S3.simple?)
assert(A3.simple?)
assert(!A4.simple?)
# assert(!S4.simple?)
# assert(A5.simple?)
end
def test_commutator_group #test for commutator_group
assert_equal(A4.commutator, Set[P[0, 1, 2, 3], P[1, 0, 3, 2],
P[2, 3, 0, 1], P[3, 2, 1, 0]])
assert(true)
end
def test_D #test for D
assert_equal([A4.D(0).size, A4.D(1).size, A4.D(2).size], [12, 4, 1])
end
def test_commutator_series #test for commutator_series
assert_equal(A4.commutator_series.collect{|x| x.size}, [12, 4, 1])
assert_equal(S5.commutator_series.collect{|x| x.size}, [120, 60])
end
def test_solvable? #test for solvable?
assert(S2.solvable?)
assert(A3.solvable?)
assert(S3.solvable?)
assert(A4.solvable?)
assert(S4.solvable?)
assert(!A5.solvable?)
assert(!S5.solvable?)
end
def test_K #test for K
assert_equal(A3.K.size, 1)
assert_equal(S3.K.size, 3)
assert_equal(A4.K.size, 4)
assert_equal(S4.K.size, 12)
assert_equal(A5.K.size, 60)
assert_equal(S5.K.size, 60)
end
def test_descending_central_series #test for descending_central_series
assert_equal(A4.descending_central_series.collect{|x| x.size}, [12, 4])
assert_equal(S5.descending_central_series.collect{|x| x.size}, [120, 60])
end
def test_Z #test for Z
assert_equal(A3.Z, A3)
assert_equal(A4.Z, A4.unit_group)
end
def test_ascending_central_series #test for ascending_central_series
assert_equal(A3.ascending_central_series.collect{|x| x.size}, [1])
assert_equal(S3.ascending_central_series.collect{|x| x.size}, [1])
assert_equal(A4.ascending_central_series.collect{|x| x.size}, [1])
assert_equal(S4.ascending_central_series.collect{|x| x.size}, [1])
end
def test_nilpotent? #test for nilpotent?
assert(T3.nilpotent?)
assert(A3.nilpotent?)
assert(!S3.nilpotent?)
assert(!A4.nilpotent?)
assert(!A5.nilpotent?)
end
def test_nilpotency_class #test for nilpotency_class
assert_equal(A3.nilpotency_class, 1)
end
def test_quotient_group
e, a = S5.quotient_group(A5)
assert_equal(e*e, e)
assert_equal(a*a, e)
end
end
Tests(TestFiniteGroup)
syntax highlighted by Code2HTML, v. 0.9.1