Skip to content

Commit

Permalink
Add some basic tree benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewsot committed Feb 22, 2025
1 parent bf66dd1 commit a4f5182
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 1 deletion.
69 changes: 69 additions & 0 deletions benchmark/bench_trees.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
module BenchTrees

using DataStructures
using BenchmarkTools
using Random

suite = BenchmarkGroup()

rand_setup = (
Random.seed!(1234);
idx1 = rand(1:30000, 1000);
didx1 = rand(1:1000, 500);
)

# insert a bunch of keys, search for all of them, delete half of them randomly,
# then search for all of them again.
function test_rand(T)
t = T{Int}()
for i in idx1
push!(t, i)
end
for i in idx1
haskey(t, i)
end
for i in didx1
delete!(t, idx1[i])
end
for i in idx1
haskey(t, i)
end
end

# insert 1, ..., N, then push 1 many times. tests a regression from an older
# splay tree implementation where splays didn't happen on redundant pushes.
function test_redundant(T, N=100000)
t = T{Int}()
for i in 1:N
push!(t, i)
end
for i in 1:N
push!(t, 1)
end
end

# insert 1, ..., N, then access element 1 for N iterations. splay trees should
# perform best here.
function test_biased(T, N=100000)
t = T{Int}()
for i in 1:N
push!(t, i)
end
for _ in 1:N
haskey(t, 1)
end
end

trees = Dict("splay" => SplayTree, "avl" => AVLTree, "rb" => RBTree)
for (T_name, T) in trees
suite[T_name]["rand"] =
@benchmarkable test_rand($(T)) setup=rand_setup
suite[T_name]["redundant"] =
@benchmarkable test_redundant($(T))
suite[T_name]["biased"] =
@benchmarkable test_biased($T)
end

end # module

BenchTrees.suite
1 change: 1 addition & 0 deletions benchmark/benchmarks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ const SUITE = BenchmarkGroup()

SUITE["heap"] = include("bench_heap.jl")
SUITE["SparseIntSet"] = include("bench_sparse_int_set.jl")
SUITE["trees"] = include("bench_trees.jl")
1 change: 0 additions & 1 deletion src/DataStructures.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ module DataStructures
export RBTree, search_node, minimum_node
export SplayTree, search_node!, maximum_node
export AVLTree, sorted_rank
export SplayTree, maximum_node

export findkey

Expand Down

0 comments on commit a4f5182

Please sign in to comment.