1
0
mirror of https://github.com/kalmarek/Groups.jl.git synced 2024-12-26 18:30:29 +01:00
Groups.jl/test/FreeGroup-tests.jl

139 lines
4.7 KiB
Julia
Raw Normal View History

2017-05-15 10:12:46 +02:00
@testset "Groups.FreeSymbols" begin
2019-01-03 03:37:37 +01:00
s = Groups.FreeSymbol(:s)
t = Groups.FreeSymbol(:t)
@testset "constructors" begin
2019-01-03 03:37:37 +01:00
@test isa(Groups.FreeSymbol(:aaaaaaaaaaaaaaaa), Groups.GSymbol)
@test Groups.FreeSymbol(:abc).pow == 1
2017-05-15 10:12:46 +02:00
@test isa(s, Groups.FreeSymbol)
@test isa(t, Groups.FreeSymbol)
end
@testset "eltary functions" begin
@test length(s) == 1
@test Groups.change_pow(s, 0) == Groups.change_pow(t, 0)
@test length(Groups.change_pow(s, 0)) == 0
@test inv(s).pow == -1
2019-01-03 03:37:37 +01:00
@test Groups.FreeSymbol(:s, 3) == Groups.change_pow(s, 3)
@test Groups.FreeSymbol(:s, 3) != Groups.FreeSymbol(:t, 3)
2017-05-15 10:12:46 +02:00
@test Groups.change_pow(inv(s), -3) == inv(Groups.change_pow(s, 3))
end
@testset "powers" begin
s⁴ = Groups.change_pow(s,4)
@test s⁴.pow == 4
2019-01-03 03:37:37 +01:00
@test Groups.change_pow(s, 4) == Groups.FreeSymbol(:s, 4)
2017-05-15 10:12:46 +02:00
end
end
2017-07-23 17:06:34 +02:00
@testset "FreeGroupSymbols manipulation" begin
2017-05-15 10:12:46 +02:00
s = Groups.FreeSymbol("s")
2019-01-03 03:37:37 +01:00
t = Groups.FreeSymbol(:t, -2)
2017-05-15 10:12:46 +02:00
@test isa(Groups.GroupWord(s), Groups.GWord{Groups.FreeSymbol})
@test isa(Groups.GroupWord(s), FreeGroupElem)
2017-07-23 17:06:34 +02:00
@test isa(FreeGroupElem(s), Groups.GWord)
@test isa(convert(FreeGroupElem, s), Groups.GWord)
@test isa(convert(FreeGroupElem, s), FreeGroupElem)
@test isa(Vector{FreeGroupElem}([s,t]), Vector{FreeGroupElem})
@test length(FreeGroupElem(s)) == 1
@test length(FreeGroupElem(t)) == 2
2017-07-11 16:26:26 +02:00
2017-05-15 10:12:46 +02:00
end
@testset "FreeGroup" begin
2018-07-30 15:20:37 +02:00
@test isa(FreeGroup(["s", "t"]), AbstractAlgebra.Group)
2017-05-15 10:12:46 +02:00
G = FreeGroup(["s", "t"])
@testset "elements constructors" begin
2019-11-14 09:21:11 +01:00
@test isa(one(G), FreeGroupElem)
2017-05-15 10:12:46 +02:00
@test eltype(G.gens) == Groups.FreeSymbol
@test length(G.gens) == 2
2018-07-30 08:30:27 +02:00
@test eltype(gens(G)) == FreeGroupElem
@test length(gens(G)) == 2
2017-05-15 10:12:46 +02:00
end
2018-07-30 08:30:27 +02:00
s, t = gens(G)
2017-05-15 10:12:46 +02:00
@testset "internal arithmetic" begin
@test Vector{Groups.FreeGroupElem}([s,t]) == [Groups.GroupWord(s), Groups.GroupWord(t)]
@test (s*s).symbols == (s^2).symbols
@test hash([t^1,s^1]) == hash([t^2*inv(t),s*inv(s)*s])
2019-01-03 03:37:37 +01:00
t_symb = Groups.FreeSymbol(:t)
2017-05-15 10:12:46 +02:00
tt = deepcopy(t)
@test string(Groups.r_multiply!(tt,[inv(t_symb)]; reduced=true)) ==
"(id)"
tt = deepcopy(t)
@test string(Groups.r_multiply!(tt,[inv(t_symb)]; reduced=false)) ==
"t*t^-1"
tt = deepcopy(t)
@test string(Groups.l_multiply!(tt,[inv(t_symb)]; reduced=true)) ==
"(id)"
tt = deepcopy(t)
@test string(Groups.l_multiply!(tt,[inv(t_symb)]; reduced=false)) ==
"t^-1*t"
end
@testset "reductions" begin
2019-11-14 09:21:11 +01:00
@test length(one(G).symbols) == 0
@test length((one(G)*one(G)).symbols) == 0
@test one(G) == one(G)*one(G)
2017-05-15 10:12:46 +02:00
w = deepcopy(s)
push!(w.symbols, (s^-1).symbols[1])
2019-11-14 09:21:11 +01:00
@test Groups.reduce!(w) == one(parent(w))
2017-05-15 10:12:46 +02:00
o = (t*s)^3
@test o == t*s*t*s*t*s
p = (t*s)^-3
@test p == s^-1*t^-1*s^-1*t^-1*s^-1*t^-1
2019-11-14 09:21:11 +01:00
@test o*p == one(parent(o*p))
2017-05-15 10:12:46 +02:00
w = FreeGroupElem([o.symbols..., p.symbols...])
w.parent = G
@test Groups.reduce!(w).symbols ==Vector{Groups.FreeSymbol}([])
end
@testset "Group operations" begin
2017-05-15 10:12:46 +02:00
@test parent(s) == G
@test parent(s) === parent(deepcopy(s))
@test isa(s*t, FreeGroupElem)
@test parent(s*t) == parent(s^2)
@test s*s == s^2
@test inv(s*s) == inv(s^2)
@test inv(s)^2 == inv(s^2)
@test inv(s)*inv(s) == inv(s^2)
@test inv(s*t) == inv(t)*inv(s)
w = s*t*s^-1
@test inv(w) == s*t^-1*s^-1
@test (t*s*t^-1)^10 == t*s^10*t^-1
@test (t*s*t^-1)^-10 == t*s^-10*t^-1
end
@testset "replacements" begin
2019-01-03 03:37:37 +01:00
a = Groups.FreeSymbol(:a)
b = Groups.FreeSymbol(:b)
@test Groups.issubsymbol(a, Groups.change_pow(a,2)) == true
@test Groups.issubsymbol(a, Groups.change_pow(a,-2)) == false
@test Groups.issubsymbol(b, Groups.change_pow(a,-2)) == false
@test Groups.issubsymbol(inv(b), Groups.change_pow(b,-2)) == true
2017-07-05 16:26:35 +02:00
2017-05-15 10:12:46 +02:00
c = s*t*s^-1*t^-1
@test findfirst(c, s^-1*t^-1) == 3
@test findnext(c*s^-1, s^-1*t^-1,3) == 3
@test findnext(c*s^-1*t^-1, s^-1*t^-1,4) == 5
@test findfirst(c*t, c) == 0
w = s*t*s^-1
subst = Dict{FreeGroupElem, FreeGroupElem}(w => s^1, s*t^-1 => t^4)
2019-11-14 09:21:11 +01:00
@test Groups.replace(c, 1, s*t, one(G)) == s^-1*t^-1
2017-05-15 10:12:46 +02:00
@test Groups.replace(c, 1, w, subst[w]) == s*t^-1
@test Groups.replace(s*c*t^-1, 1, w, subst[w]) == s^2*t^-2
@test Groups.replace(t*c*t, 2, w, subst[w]) == t*s
2017-07-06 09:19:15 +02:00
@test Groups.replace_all(s*c*s*c*s, subst) == s*t^4*s*t^4*s
2017-07-05 16:21:16 +02:00
G = FreeGroup(["x", "y"])
2018-07-30 08:30:27 +02:00
x,y = gens(G)
2017-07-05 16:21:16 +02:00
@test Groups.replace(x*y^9, 2, y^2, y) == x*y^8
@test Groups.replace(x^3, 1, x^2, y) == x*y
@test Groups.replace(y*x^3*y, 2, x^2, y) == y*x*y^2
2017-05-15 10:12:46 +02:00
end
end