mirror of
https://github.com/kalmarek/Groups.jl.git
synced 2024-11-19 06:30:29 +01:00
add basic tests for FPGroups
This commit is contained in:
parent
60f3b686ba
commit
9d1678d099
44
test/fp_groups.jl
Normal file
44
test/fp_groups.jl
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
@testset "FPGroups" begin
|
||||||
|
A = Alphabet([:a, :A, :b, :B, :c, :C], [2,1,4,3,6,5])
|
||||||
|
|
||||||
|
F = New.FreeGroup([:a, :b, :c], A)
|
||||||
|
|
||||||
|
a,b,c = gens(F)
|
||||||
|
@test c*b*a isa New.FPGroupElement
|
||||||
|
|
||||||
|
# quotient of F:
|
||||||
|
G = New.FPGroup(F, [a*b=>b*a, a*c=>c*a, b*c=>c*b])
|
||||||
|
|
||||||
|
@test G isa New.FPGroup
|
||||||
|
@test rand(G) isa New.FPGroupElement
|
||||||
|
|
||||||
|
f = a*c*b
|
||||||
|
@test New.word(f) isa Word{UInt8}
|
||||||
|
|
||||||
|
aG,bG,cG = gens(G)
|
||||||
|
|
||||||
|
@test aG isa New.FPGroupElement
|
||||||
|
@test_throws AssertionError aG == a
|
||||||
|
@test New.word(aG) == New.word(a)
|
||||||
|
|
||||||
|
g = aG*cG*bG
|
||||||
|
|
||||||
|
@test_throws AssertionError f == g
|
||||||
|
@test New.word(f) == New.word(g)
|
||||||
|
@test New.word(g) == [1, 5, 3]
|
||||||
|
New.normalform!(g)
|
||||||
|
@test New.word(g) == [1, 3, 5]
|
||||||
|
|
||||||
|
# quotient of G
|
||||||
|
H = New.FPGroup(G, [aG^2=>cG, bG*cG=>aG], maxrules=200)
|
||||||
|
|
||||||
|
h = H(New.word(g))
|
||||||
|
|
||||||
|
@test h isa New.FPGroupElement
|
||||||
|
@test_throws AssertionError h == g
|
||||||
|
@test_throws AssertionError h*g
|
||||||
|
|
||||||
|
New.normalform!(h)
|
||||||
|
@test h == H([5])
|
||||||
|
|
||||||
|
end
|
65
test/free_groups.jl
Normal file
65
test/free_groups.jl
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
@testset "New.FreeGroup" begin
|
||||||
|
|
||||||
|
A3 = Alphabet([:a, :b, :c, :A, :B, :C], [4,5,6,1,2,3])
|
||||||
|
F3 = New.FreeGroup([:a, :b, :c], A3)
|
||||||
|
@test F3 isa New.FreeGroup
|
||||||
|
|
||||||
|
@test gens(F3) isa Vector
|
||||||
|
|
||||||
|
@test eltype(F3) <: New.FPGroupElement{<:New.FreeGroup}
|
||||||
|
|
||||||
|
w = F3([1,2,3,4])
|
||||||
|
W = inv(w)
|
||||||
|
@test deepcopy(w) !== w
|
||||||
|
@test deepcopy(w).word !== w.word
|
||||||
|
|
||||||
|
@test isone(w*W)
|
||||||
|
|
||||||
|
@test New.alphabet(w) == A3
|
||||||
|
|
||||||
|
@testset "generic iteration" begin
|
||||||
|
w, s = iterate(F3)
|
||||||
|
@test isone(w)
|
||||||
|
w, s = iterate(F3, s)
|
||||||
|
@test w == gens(F3, 1)
|
||||||
|
|
||||||
|
a,b,c = gens(F3)
|
||||||
|
|
||||||
|
function test_iteration(F, n=1000)
|
||||||
|
w, s = iterate(F)
|
||||||
|
for i in 1:n
|
||||||
|
w, s = iterate(F, s)
|
||||||
|
end
|
||||||
|
return w
|
||||||
|
end
|
||||||
|
|
||||||
|
k = test_iteration(F3, 10)
|
||||||
|
@test k == a*b^-1
|
||||||
|
|
||||||
|
@time k = test_iteration(F3, 1000)
|
||||||
|
@test k == (a^2)*c^2*a^-1
|
||||||
|
end
|
||||||
|
|
||||||
|
@testset "wl_ball" begin
|
||||||
|
function wl_ball(F; radius::Integer)
|
||||||
|
g, state = iterate(F)
|
||||||
|
while length(New.word(g)) <= radius
|
||||||
|
res = iterate(F, state)
|
||||||
|
isnothing(res) && break
|
||||||
|
g, state = res
|
||||||
|
end
|
||||||
|
elts = collect(first(state).elts)
|
||||||
|
elts = resize!(elts, length(elts)-1)
|
||||||
|
return elts
|
||||||
|
end
|
||||||
|
|
||||||
|
E4 = wl_ball(F3, radius=4)
|
||||||
|
@test length(E4) == 937
|
||||||
|
@test New.word(last(E4)) == Word([6])^4
|
||||||
|
|
||||||
|
@time E8 = wl_ball(F3, radius=8)
|
||||||
|
@test length(E8) == 585937
|
||||||
|
@test New.word(last(E8)) == Word([6])^8
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -23,4 +23,12 @@ using LinearAlgebra
|
|||||||
include("FreeGroup-tests.jl")
|
include("FreeGroup-tests.jl")
|
||||||
include("AutGroup-tests.jl")
|
include("AutGroup-tests.jl")
|
||||||
include("FPGroup-tests.jl")
|
include("FPGroup-tests.jl")
|
||||||
|
|
||||||
|
@testset "New FPGroups" begin
|
||||||
|
using Groups.New
|
||||||
|
using KnuthBendix
|
||||||
|
|
||||||
|
include("free_groups.jl")
|
||||||
|
include("fp_groups.jl")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user