mirror of
https://github.com/kalmarek/Groups.jl.git
synced 2024-11-19 14:35:28 +01:00
72 lines
1.9 KiB
Julia
72 lines
1.9 KiB
Julia
using BenchmarkTools
|
|
using Test
|
|
|
|
using Groups
|
|
|
|
function wl_ball(F; radius::Integer)
|
|
g, state = iterate(F)
|
|
while length(word(g)) <= radius
|
|
res = iterate(F, state)
|
|
isnothing(res) && break
|
|
g, state = res
|
|
end
|
|
elts = collect(state.seen)
|
|
elts = resize!(elts, length(elts)-1)
|
|
return elts
|
|
end
|
|
|
|
@testset "Benchmarks" begin
|
|
N = 4
|
|
|
|
@testset "iteration: FreeGroup" begin
|
|
FN = FreeGroup(N)
|
|
R = 8
|
|
|
|
let G = FN
|
|
S = unique([gens(G); inv.(gens(G))])
|
|
|
|
sizes1 = last(Groups.wlmetric_ball(S, radius=R, threading=false))
|
|
sizes2 = last(Groups.wlmetric_ball(S, radius=R, threading=true))
|
|
|
|
l = length(wl_ball(G, radius=R))
|
|
|
|
@test sizes1 == sizes2
|
|
@test last(sizes1) == l
|
|
|
|
@info "Ball of radius $R in $(parent(first(S)))" sizes=sizes1
|
|
@info "serial"
|
|
@time Groups.wlmetric_ball(S, radius=R, threading=false)
|
|
@info "threaded"
|
|
@time Groups.wlmetric_ball(S, radius=R, threading=true)
|
|
@info "iteration"
|
|
@time wl_ball(G, radius=R)
|
|
end
|
|
end
|
|
|
|
@testset "iteration: SAut(F_n)" begin
|
|
R = 4
|
|
FN = FreeGroup(N)
|
|
SAutFN = SpecialAutomorphismGroup(FN)
|
|
|
|
let G = SAutFN
|
|
S = unique([gens(G); inv.(gens(G))])
|
|
|
|
sizes1 = last(Groups.wlmetric_ball(S, radius=R, threading=false))
|
|
sizes2 = last(Groups.wlmetric_ball(S, radius=R, threading=true))
|
|
|
|
l = length(wl_ball(G, radius=R))
|
|
|
|
@test sizes1 == sizes2
|
|
@test last(sizes1) == l
|
|
|
|
@info "Ball of radius $R in $(parent(first(S)))" sizes=sizes1
|
|
@info "serial"
|
|
@time Groups.wlmetric_ball(S, radius=R, threading=false)
|
|
@info "threaded"
|
|
@time Groups.wlmetric_ball(S, radius=R, threading=true)
|
|
@info "iteration"
|
|
@time wl_ball(G, radius=R)
|
|
end
|
|
end
|
|
end
|