Skip to content

Instantly share code, notes, and snippets.

@michalmuskala
Created April 12, 2017 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save michalmuskala/9b0b55eee25b94d9339edbf7a0e261ea to your computer and use it in GitHub Desktop.
Save michalmuskala/9b0b55eee25b94d9339edbf7a0e261ea to your computer and use it in GitHub Desktop.
defmodule MapSetBench do
def run do
inputs = %{
"small (100)" => input(1..100),
"large (10_000)" => input(1..10_000),
}
simple_benches = [
:from_ordered,
:from_random,
:add_element,
:del_element,
:is_member,
:fold,
:filter
]
opts = [print: [configuration: false, fast_warning: false, benchmarking: false]]
impls = [:map_sets, :ordsets, :sets, :gb_sets]
for bench <- simple_benches do
Benchee.run(
Enum.into(impls, %{}, fn impl ->
{"#{bench} - #{impl}", &apply(__MODULE__, bench, [impl, &1])}
end), [inputs: inputs] ++ opts)
end
complex_input = [
:the_same,
:modified,
:half_sized,
]
complex_benches = [
:is_disjoint,
:is_subset,
:union,
:intersection,
:subtract
]
for bench <- complex_benches, mode <- complex_input do
other_inputs = mutate_inputs(inputs, mode)
Benchee.run(
Enum.into(impls, %{}, fn impl ->
{"#{bench} #{mode} - #{impl}", &apply(impl, bench, &1[impl])}
end), [inputs: other_inputs] ++ opts)
end
end
def from_ordered(impl, input) do
impl.from_list(input[:ordered])
end
def from_random(impl, input) do
impl.from_list(input[:random])
end
def add_element(impl, input) do
Enum.reduce(input[:random], impl.new(), fn elem, acc ->
impl.add_element(elem, acc)
end)
end
def del_element(impl, input) do
Enum.reduce(input[:random], input[impl], fn elem, acc ->
impl.del_element(elem, acc)
end)
end
def is_member(impl, input) do
set = input[impl]
Enum.each(input[:random], fn elem ->
impl.is_element(elem, set)
end)
end
def fold(impl, input) do
impl.fold(&+/2, 0, input[impl])
end
def filter(impl, input) do
impl.filter(fn x -> rem(x, 2) == 0 end, input[impl])
end
defp input(range) do
list = Enum.to_list(range)
%{ordered: list,
random: Enum.shuffle(list),
map_sets: :map_sets.from_list(list),
ordsets: :ordsets.from_list(list),
sets: :sets.from_list(list),
gb_sets: :gb_sets.from_list(list)}
end
defp mutate_inputs(inputs, mode) do
Enum.into(inputs, %{}, fn {key, value} -> {key, mutate_input(value, mode)} end)
end
defp mutate_input(input, :half_sized) do
size = :map_sets.size(input[:map_sets])
random = Enum.take(input[:random], div(size, 2))
%{ordered: Enum.sort(random),
random: Enum.shuffle(random),
map_sets: [input[:map_sets], :map_sets.from_list(random)],
ordsets: [input[:ordsets], :ordsets.from_list(random)],
sets: [input[:sets], :sets.from_list(random)],
gb_sets: [input[:gb_sets], :gb_sets.from_list(random)]}
end
defp mutate_input(input, :modified) do
size = :map_sets.size(input[:map_sets])
new_elements = Enum.to_list(1_000_000..(1_000_000 + div(size, 2)))
list = new_elements ++ Enum.take(input[:random], div(size, 2))
%{ordered: Enum.sort(list),
random: Enum.shuffle(list),
map_sets: [input[:map_sets], :map_sets.from_list(list)],
ordsets: [input[:ordsets], :ordsets.from_list(list)],
sets: [input[:sets], :sets.from_list(list)],
gb_sets: [input[:gb_sets], :gb_sets.from_list(list)]}
end
defp mutate_input(input, :the_same) do
%{ordered: input[:ordered],
random: input[:random],
map_sets: [input[:map_sets], input[:map_sets]],
ordsets: [input[:ordsets], input[:ordsets]],
sets: [input[:sets], input[:sets]],
gb_sets: [input[:gb_sets], input[:gb_sets]]}
end
end
MapSetBench.run()
##### With input large (10_000) #####
Name ips average deviation median
from_ordered - ordsets 7.66 K 0.131 ms ±37.33% 0.114 ms
from_ordered - gb_sets 1.56 K 0.64 ms ±27.53% 0.60 ms
from_ordered - map_sets 0.59 K 1.70 ms ±15.90% 1.61 ms
from_ordered - sets 0.169 K 5.92 ms ±16.62% 5.57 ms
Comparison:
from_ordered - ordsets 7.66 K
from_ordered - gb_sets 1.56 K - 4.92x slower
from_ordered - map_sets 0.59 K - 12.99x slower
from_ordered - sets 0.169 K - 45.31x slower
##### With input small (100) #####
Name ips average deviation median
from_ordered - ordsets 776.03 K 1.29 μs ±225.74% 1.10 μs
from_ordered - gb_sets 157.37 K 6.35 μs ±346.02% 6.00 μs
from_ordered - map_sets 138.06 K 7.24 μs ±172.27% 7.00 μs
from_ordered - sets 23.73 K 42.13 μs ±89.59% 35.00 μs
Comparison:
from_ordered - ordsets 776.03 K
from_ordered - gb_sets 157.37 K - 4.93x slower
from_ordered - map_sets 138.06 K - 5.62x slower
from_ordered - sets 23.73 K - 32.70x slower
##### With input large (10_000) #####
Name ips average deviation median
from_random - map_sets 586.31 1.71 ms ±15.96% 1.62 ms
from_random - ordsets 526.10 1.90 ms ±15.91% 1.79 ms
from_random - gb_sets 400.52 2.50 ms ±15.14% 2.38 ms
from_random - sets 163.45 6.12 ms ±16.17% 5.75 ms
Comparison:
from_random - map_sets 586.31
from_random - ordsets 526.10 - 1.11x slower
from_random - gb_sets 400.52 - 1.46x slower
from_random - sets 163.45 - 3.59x slower
##### With input small (100) #####
Name ips average deviation median
from_random - ordsets 152.39 K 6.56 μs ±156.58% 6.00 μs
from_random - map_sets 144.30 K 6.93 μs ±203.13% 6.00 μs
from_random - gb_sets 90.11 K 11.10 μs ±114.27% 10.00 μs
from_random - sets 28.70 K 34.84 μs ±22.97% 32.00 μs
Comparison:
from_random - ordsets 152.39 K
from_random - map_sets 144.30 K - 1.06x slower
from_random - gb_sets 90.11 K - 1.69x slower
from_random - sets 28.70 K - 5.31x slower
##### With input large (10_000) #####
Name ips average deviation median
add_element - map_sets 418.49 2.39 ms ±25.06% 2.23 ms
add_element - sets 147.03 6.80 ms ±18.68% 6.32 ms
add_element - gb_sets 94.16 10.62 ms ±11.24% 10.17 ms
add_element - ordsets 3.46 289.23 ms ±2.74% 288.81 ms
Comparison:
add_element - map_sets 418.49
add_element - sets 147.03 - 2.85x slower
add_element - gb_sets 94.16 - 4.44x slower
add_element - ordsets 3.46 - 121.04x slower
##### With input small (100) #####
Name ips average deviation median
add_element - map_sets 66.09 K 15.13 μs ±68.48% 13.00 μs
add_element - ordsets 27.78 K 35.99 μs ±28.19% 34.00 μs
add_element - sets 23.83 K 41.97 μs ±26.48% 38.00 μs
add_element - gb_sets 21.81 K 45.85 μs ±22.44% 43.00 μs
Comparison:
add_element - map_sets 66.09 K
add_element - ordsets 27.78 K - 2.38x slower
add_element - sets 23.83 K - 2.77x slower
add_element - gb_sets 21.81 K - 3.03x slower
##### With input large (10_000) #####
Name ips average deviation median
del_element - map_sets 454.96 2.20 ms ±19.59% 2.04 ms
del_element - sets 177.14 5.65 ms ±12.53% 5.40 ms
del_element - gb_sets 140.05 7.14 ms ±14.83% 6.66 ms
del_element - ordsets 3.21 311.19 ms ±4.93% 314.92 ms
Comparison:
del_element - map_sets 454.96
del_element - sets 177.14 - 2.57x slower
del_element - gb_sets 140.05 - 3.25x slower
del_element - ordsets 3.21 - 141.58x slower
##### With input small (100) #####
Name ips average deviation median
del_element - map_sets 84.30 K 11.86 μs ±74.37% 11.00 μs
del_element - gb_sets 37.88 K 26.40 μs ±31.74% 24.00 μs
del_element - ordsets 29.61 K 33.77 μs ±25.80% 32.00 μs
del_element - sets 24.09 K 41.51 μs ±27.00% 39.00 μs
Comparison:
del_element - map_sets 84.30 K
del_element - gb_sets 37.88 K - 2.23x slower
del_element - ordsets 29.61 K - 2.85x slower
del_element - sets 24.09 K - 3.50x slower
##### With input large (10_000) #####
Name ips average deviation median
is_member - map_sets 1012.36 0.99 ms ±16.17% 0.93 ms
is_member - sets 491.59 2.03 ms ±13.68% 1.93 ms
is_member - gb_sets 333.54 3.00 ms ±16.51% 2.79 ms
is_member - ordsets 2.43 412.05 ms ±5.90% 413.68 ms
Comparison:
is_member - map_sets 1012.36
is_member - sets 491.59 - 2.06x slower
is_member - gb_sets 333.54 - 3.04x slower
is_member - ordsets 2.43 - 417.14x slower
##### With input small (100) #####
Name ips average deviation median
is_member - map_sets 133.39 K 7.50 μs ±19.27% 7.00 μs
is_member - gb_sets 68.85 K 14.52 μs ±58.85% 13.00 μs
is_member - sets 49.28 K 20.29 μs ±30.97% 18.00 μs
is_member - ordsets 24.23 K 41.26 μs ±21.90% 39.00 μs
Comparison:
is_member - map_sets 133.39 K
is_member - gb_sets 68.85 K - 1.94x slower
is_member - sets 49.28 K - 2.71x slower
is_member - ordsets 24.23 K - 5.50x slower
##### With input large (10_000) #####
Name ips average deviation median
fold - ordsets 3.78 K 264.90 μs ±18.40% 247.00 μs
fold - sets 3.02 K 330.81 μs ±16.09% 308.00 μs
fold - map_sets 2.66 K 375.55 μs ±17.51% 346.00 μs
fold - gb_sets 2.64 K 378.96 μs ±16.41% 353.00 μs
Comparison:
fold - ordsets 3.78 K
fold - sets 3.02 K - 1.25x slower
fold - map_sets 2.66 K - 1.42x slower
fold - gb_sets 2.64 K - 1.43x slower
##### With input small (100) #####
Name ips average deviation median
fold - ordsets 351.88 K 2.84 μs ±36.00% 2.80 μs
fold - map_sets 279.47 K 3.58 μs ±359.19% 3.00 μs
fold - sets 253.27 K 3.95 μs ±53.90% 3.70 μs
fold - gb_sets 235.46 K 4.25 μs ±572.21% 4.00 μs
Comparison:
fold - ordsets 351.88 K
fold - map_sets 279.47 K - 1.26x slower
fold - sets 253.27 K - 1.39x slower
fold - gb_sets 235.46 K - 1.49x slower
##### With input large (10_000) #####
Name ips average deviation median
filter - ordsets 2.35 K 425.18 μs ±18.98% 398.00 μs
filter - sets 1.56 K 640.81 μs ±19.38% 594.00 μs
filter - gb_sets 1.01 K 989.23 μs ±32.77% 921.00 μs
filter - map_sets 0.97 K 1033.60 μs ±54.53% 896.00 μs
Comparison:
filter - ordsets 2.35 K
filter - sets 1.56 K - 1.51x slower
filter - gb_sets 1.01 K - 2.33x slower
filter - map_sets 0.97 K - 2.43x slower
##### With input small (100) #####
Name ips average deviation median
filter - ordsets 229.78 K 4.35 μs ±21.53% 4.20 μs
filter - sets 141.16 K 7.08 μs ±212.10% 6.00 μs
filter - map_sets 126.34 K 7.92 μs ±160.46% 7.00 μs
filter - gb_sets 107.56 K 9.30 μs ±166.27% 8.00 μs
Comparison:
filter - ordsets 229.78 K
filter - sets 141.16 K - 1.63x slower
filter - map_sets 126.34 K - 1.82x slower
filter - gb_sets 107.56 K - 2.14x slower
##### With input large (10_000) #####
Name ips average deviation median
is_disjoint the_same - ordsets 8.16 M 0.123 μs ±242.55% 0.110 μs
is_disjoint the_same - gb_sets 7.34 M 0.136 μs ±226.68% 0.120 μs
is_disjoint the_same - map_sets 0.00816 M 122.55 μs ±21.38% 110.00 μs
is_disjoint the_same - sets 0.00394 M 254.02 μs ±17.69% 234.00 μs
Comparison:
is_disjoint the_same - ordsets 8.16 M
is_disjoint the_same - gb_sets 7.34 M - 1.11x slower
is_disjoint the_same - map_sets 0.00816 M - 999.53x slower
is_disjoint the_same - sets 0.00394 M - 2071.86x slower
##### With input small (100) #####
Name ips average deviation median
is_disjoint the_same - ordsets 8.39 M 0.119 μs ±238.43% 0.110 μs
is_disjoint the_same - gb_sets 7.78 M 0.128 μs ±234.40% 0.120 μs
is_disjoint the_same - map_sets 0.93 M 1.08 μs ±2991.93% 1.00 μs
is_disjoint the_same - sets 0.31 M 3.27 μs ±717.44% 3.00 μs
Comparison:
is_disjoint the_same - ordsets 8.39 M
is_disjoint the_same - gb_sets 7.78 M - 1.08x slower
is_disjoint the_same - map_sets 0.93 M - 9.04x slower
is_disjoint the_same - sets 0.31 M - 27.41x slower
##### With input large (10_000) #####
Name ips average deviation median
is_disjoint modified - ordsets 8.09 M 0.124 μs ±223.70% 0.110 μs
is_disjoint modified - gb_sets 3.68 M 0.27 μs ±70.37% 0.26 μs
is_disjoint modified - map_sets 0.00815 M 122.76 μs ±21.73% 109.00 μs
is_disjoint modified - sets 0.00355 M 281.46 μs ±17.32% 265.00 μs
Comparison:
is_disjoint modified - ordsets 8.09 M
is_disjoint modified - gb_sets 3.68 M - 2.20x slower
is_disjoint modified - map_sets 0.00815 M - 992.60x slower
is_disjoint modified - sets 0.00355 M - 2275.91x slower
##### With input small (100) #####
Name ips average deviation median
is_disjoint modified - ordsets 8.18 M 0.122 μs ±221.45% 0.110 μs
is_disjoint modified - gb_sets 5.15 M 0.194 μs ±120.04% 0.180 μs
is_disjoint modified - map_sets 1.15 M 0.87 μs ±234.54% 0.80 μs
is_disjoint modified - sets 0.27 M 3.76 μs ±640.57% 3.00 μs
Comparison:
is_disjoint modified - ordsets 8.18 M
is_disjoint modified - gb_sets 5.15 M - 1.59x slower
is_disjoint modified - map_sets 1.15 M - 7.13x slower
is_disjoint modified - sets 0.27 M - 30.75x slower
##### With input large (10_000) #####
Name ips average deviation median
is_disjoint half_sized - ordsets 8.09 M 0.124 μs ±290.81% 0.110 μs
is_disjoint half_sized - gb_sets 3.90 M 0.26 μs ±74.90% 0.24 μs
is_disjoint half_sized - map_sets 0.0169 M 59.17 μs ±22.78% 54.00 μs
is_disjoint half_sized - sets 0.00735 M 136.07 μs ±16.72% 127.00 μs
Comparison:
is_disjoint half_sized - ordsets 8.09 M
is_disjoint half_sized - gb_sets 3.90 M - 2.07x slower
is_disjoint half_sized - map_sets 0.0169 M - 478.49x slower
is_disjoint half_sized - sets 0.00735 M - 1100.42x slower
##### With input small (100) #####
Name ips average deviation median
is_disjoint half_sized - ordsets 8.17 M 0.122 μs ±219.77% 0.110 μs
is_disjoint half_sized - gb_sets 5.38 M 0.186 μs ±117.34% 0.170 μs
is_disjoint half_sized - map_sets 1.77 M 0.56 μs ±20.63% 0.52 μs
is_disjoint half_sized - sets 0.52 M 1.91 μs ±138.35% 1.70 μs
Comparison:
is_disjoint half_sized - ordsets 8.17 M
is_disjoint half_sized - gb_sets 5.38 M - 1.52x slower
is_disjoint half_sized - map_sets 1.77 M - 4.61x slower
is_disjoint half_sized - sets 0.52 M - 15.64x slower
##### With input large (10_000) #####
Name ips average deviation median
is_subset the_same - ordsets 8.35 K 119.78 μs ±47.07% 110.00 μs
is_subset the_same - gb_sets 1.81 K 551.61 μs ±15.55% 534.00 μs
is_subset the_same - map_sets 1.72 K 580.80 μs ±36.18% 540.00 μs
is_subset the_same - sets 0.55 K 1825.19 μs ±20.79% 1698.00 μs
Comparison:
is_subset the_same - ordsets 8.35 K
is_subset the_same - gb_sets 1.81 K - 4.61x slower
is_subset the_same - map_sets 1.72 K - 4.85x slower
is_subset the_same - sets 0.55 K - 15.24x slower
##### With input small (100) #####
Name ips average deviation median
is_subset the_same - ordsets 757.13 K 1.32 μs ±135.74% 1.10 μs
is_subset the_same - map_sets 205.36 K 4.87 μs ±55.88% 4.50 μs
is_subset the_same - gb_sets 171.53 K 5.83 μs ±339.69% 5.00 μs
is_subset the_same - sets 55.24 K 18.10 μs ±44.79% 16.00 μs
Comparison:
is_subset the_same - ordsets 757.13 K
is_subset the_same - map_sets 205.36 K - 3.69x slower
is_subset the_same - gb_sets 171.53 K - 4.41x slower
is_subset the_same - sets 55.24 K - 13.71x slower
##### With input large (10_000) #####
Name ips average deviation median
is_subset modified - ordsets 7767.77 K 0.129 μs ±226.82% 0.110 μs
is_subset modified - map_sets 7.53 K 132.89 μs ±50.22% 118.00 μs
is_subset modified - sets 3.39 K 295.29 μs ±21.26% 271.00 μs
is_subset modified - gb_sets 2.17 K 460.10 μs ±23.76% 425.00 μs
Comparison:
is_subset modified - ordsets 7767.77 K
is_subset modified - map_sets 7.53 K - 1032.24x slower
is_subset modified - sets 3.39 K - 2293.75x slower
is_subset modified - gb_sets 2.17 K - 3573.94x slower
##### With input small (100) #####
Name ips average deviation median
is_subset modified - ordsets 6902.95 K 0.145 μs ±137.64% 0.130 μs
is_subset modified - map_sets 786.05 K 1.27 μs ±730.55% 0.90 μs
is_subset modified - sets 258.00 K 3.88 μs ±775.58% 3.00 μs
is_subset modified - gb_sets 210.55 K 4.75 μs ±464.33% 4.00 μs
Comparison:
is_subset modified - ordsets 6902.95 K
is_subset modified - map_sets 786.05 K - 8.78x slower
is_subset modified - sets 258.00 K - 26.76x slower
is_subset modified - gb_sets 210.55 K - 32.78x slower
##### With input large (10_000) #####
Name ips average deviation median
is_subset half_sized - ordsets 7.16 M 0.140 μs ±213.80% 0.120 μs
is_subset half_sized - map_sets 6.84 M 0.146 μs ±168.85% 0.130 μs
is_subset half_sized - sets 0.00348 M 287.24 μs ±17.88% 264.00 μs
is_subset half_sized - gb_sets 0.00292 M 342.51 μs ±33.03% 342.00 μs
Comparison:
is_subset half_sized - ordsets 7.16 M
is_subset half_sized - map_sets 6.84 M - 1.05x slower
is_subset half_sized - sets 0.00348 M - 2057.32x slower
is_subset half_sized - gb_sets 0.00292 M - 2453.16x slower
##### With input small (100) #####
Name ips average deviation median
is_subset half_sized - map_sets 7.20 M 0.139 μs ±131.81% 0.120 μs
is_subset half_sized - ordsets 6.88 M 0.145 μs ±196.29% 0.130 μs
is_subset half_sized - sets 0.29 M 3.51 μs ±49.27% 3.30 μs
is_subset half_sized - gb_sets 0.28 M 3.63 μs ±101.03% 3.40 μs
Comparison:
is_subset half_sized - map_sets 7.20 M
is_subset half_sized - ordsets 6.88 M - 1.05x slower
is_subset half_sized - sets 0.29 M - 25.26x slower
is_subset half_sized - gb_sets 0.28 M - 26.17x slower
##### With input large (10_000) #####
Name ips average deviation median
union the_same - ordsets 6.60 K 0.151 ms ±18.78% 0.141 ms
union the_same - map_sets 4.56 K 0.22 ms ±23.43% 0.21 ms
union the_same - gb_sets 0.84 K 1.19 ms ±13.70% 1.21 ms
union the_same - sets 0.60 K 1.67 ms ±14.15% 1.59 ms
Comparison:
union the_same - ordsets 6.60 K
union the_same - map_sets 4.56 K - 1.45x slower
union the_same - gb_sets 0.84 K - 7.84x slower
union the_same - sets 0.60 K - 11.02x slower
##### With input small (100) #####
Name ips average deviation median
union the_same - ordsets 635.70 K 1.57 μs ±144.77% 1.50 μs
union the_same - map_sets 522.28 K 1.91 μs ±93.30% 1.80 μs
union the_same - gb_sets 92.35 K 10.83 μs ±94.09% 10.00 μs
union the_same - sets 57.18 K 17.49 μs ±47.85% 16.00 μs
Comparison:
union the_same - ordsets 635.70 K
union the_same - map_sets 522.28 K - 1.22x slower
union the_same - gb_sets 92.35 K - 6.88x slower
union the_same - sets 57.18 K - 11.12x slower
##### With input large (10_000) #####
Name ips average deviation median
union modified - ordsets 4.79 K 0.21 ms ±18.80% 0.196 ms
union modified - map_sets 2.39 K 0.42 ms ±18.77% 0.39 ms
union modified - gb_sets 0.67 K 1.48 ms ±11.18% 1.43 ms
union modified - sets 0.24 K 4.24 ms ±23.73% 3.94 ms
Comparison:
union modified - ordsets 4.79 K
union modified - map_sets 2.39 K - 2.00x slower
union modified - gb_sets 0.67 K - 7.11x slower
union modified - sets 0.24 K - 20.33x slower
##### With input small (100) #####
Name ips average deviation median
union modified - ordsets 551.22 K 1.81 μs ±123.81% 1.70 μs
union modified - map_sets 363.64 K 2.75 μs ±25.78% 2.50 μs
union modified - gb_sets 74.45 K 13.43 μs ±77.94% 12.00 μs
union modified - sets 28.42 K 35.19 μs ±22.03% 32.00 μs
Comparison:
union modified - ordsets 551.22 K
union modified - map_sets 363.64 K - 1.52x slower
union modified - gb_sets 74.45 K - 7.40x slower
union modified - sets 28.42 K - 19.40x slower
##### With input large (10_000) #####
Name ips average deviation median
union half_sized - ordsets 4.81 K 207.98 μs ±18.09% 200.00 μs
union half_sized - map_sets 3.86 K 259.11 μs ±24.08% 230.00 μs
union half_sized - sets 1.20 K 836.22 μs ±12.95% 792.00 μs
union half_sized - gb_sets 0.92 K 1088.29 μs ±12.40% 1039.00 μs
Comparison:
union half_sized - ordsets 4.81 K
union half_sized - map_sets 3.86 K - 1.25x slower
union half_sized - sets 1.20 K - 4.02x slower
union half_sized - gb_sets 0.92 K - 5.23x slower
##### With input small (100) #####
Name ips average deviation median
union half_sized - ordsets 551.38 K 1.81 μs ±124.09% 1.70 μs
union half_sized - map_sets 528.70 K 1.89 μs ±96.34% 1.70 μs
union half_sized - sets 107.57 K 9.30 μs ±145.46% 8.00 μs
union half_sized - gb_sets 101.60 K 9.84 μs ±67.96% 9.00 μs
Comparison:
union half_sized - ordsets 551.38 K
union half_sized - map_sets 528.70 K - 1.04x slower
union half_sized - sets 107.57 K - 5.13x slower
union half_sized - gb_sets 101.60 K - 5.43x slower
##### With input large (10_000) #####
Name ips average deviation median
intersection the_same - ordsets 6569.48 0.152 ms ±21.87% 0.144 ms
intersection the_same - gb_sets 833.90 1.20 ms ±18.07% 1.21 ms
intersection the_same - sets 576.75 1.73 ms ±15.01% 1.64 ms
intersection the_same - map_sets 540.80 1.85 ms ±16.72% 1.79 ms
Comparison:
intersection the_same - ordsets 6569.48
intersection the_same - gb_sets 833.90 - 7.88x slower
intersection the_same - sets 576.75 - 11.39x slower
intersection the_same - map_sets 540.80 - 12.15x slower
##### With input small (100) #####
Name ips average deviation median
intersection the_same - ordsets 520.18 K 1.92 μs ±1685.09% 2.00 μs
intersection the_same - gb_sets 86.75 K 11.53 μs ±92.96% 10.00 μs
intersection the_same - map_sets 69.42 K 14.40 μs ±73.08% 13.00 μs
intersection the_same - sets 52.00 K 19.23 μs ±196.58% 17.00 μs
Comparison:
intersection the_same - ordsets 520.18 K
intersection the_same - gb_sets 86.75 K - 6.00x slower
intersection the_same - map_sets 69.42 K - 7.49x slower
intersection the_same - sets 52.00 K - 10.00x slower
##### With input large (10_000) #####
Name ips average deviation median
intersection modified - ordsets 4.98 K 0.20 ms ±32.12% 0.185 ms
intersection modified - gb_sets 1.08 K 0.93 ms ±27.60% 0.89 ms
intersection modified - map_sets 0.80 K 1.24 ms ±19.60% 1.19 ms
intersection modified - sets 0.56 K 1.77 ms ±13.78% 1.69 ms
Comparison:
intersection modified - ordsets 4.98 K
intersection modified - gb_sets 1.08 K - 4.63x slower
intersection modified - map_sets 0.80 K - 6.19x slower
intersection modified - sets 0.56 K - 8.82x slower
##### With input small (100) #####
Name ips average deviation median
intersection modified - ordsets 724.40 K 1.38 μs ±144.01% 1.20 μs
intersection modified - gb_sets 119.78 K 8.35 μs ±197.88% 8.00 μs
intersection modified - map_sets 95.35 K 10.49 μs ±102.71% 10.00 μs
intersection modified - sets 50.84 K 19.67 μs ±35.45% 18.00 μs
Comparison:
intersection modified - ordsets 724.40 K
intersection modified - gb_sets 119.78 K - 6.05x slower
intersection modified - map_sets 95.35 K - 7.60x slower
intersection modified - sets 50.84 K - 14.25x slower
##### With input large (10_000) #####
Name ips average deviation median
intersection half_sized - ordsets 5.34 K 187.28 μs ±27.19% 175.00 μs
intersection half_sized - gb_sets 1.25 K 802.61 μs ±20.07% 762.00 μs
intersection half_sized - sets 1.14 K 878.94 μs ±14.57% 836.00 μs
intersection half_sized - map_sets 0.81 K 1238.79 μs ±13.40% 1199.00 μs
Comparison:
intersection half_sized - ordsets 5.34 K
intersection half_sized - gb_sets 1.25 K - 4.29x slower
intersection half_sized - sets 1.14 K - 4.69x slower
intersection half_sized - map_sets 0.81 K - 6.61x slower
##### With input small (100) #####
Name ips average deviation median
intersection half_sized - ordsets 735.40 K 1.36 μs ±148.46% 1.20 μs
intersection half_sized - gb_sets 130.37 K 7.67 μs ±243.53% 7.00 μs
intersection half_sized - sets 102.28 K 9.78 μs ±83.15% 9.00 μs
intersection half_sized - map_sets 97.91 K 10.21 μs ±40.49% 9.00 μs
Comparison:
intersection half_sized - ordsets 735.40 K
intersection half_sized - gb_sets 130.37 K - 5.64x slower
intersection half_sized - sets 102.28 K - 7.19x slower
intersection half_sized - map_sets 97.91 K - 7.51x slower
##### With input large (10_000) #####
Name ips average deviation median
subtract the_same - ordsets 7.25 K 137.85 μs ±18.14% 131.00 μs
subtract the_same - map_sets 1.75 K 571.57 μs ±18.29% 533.00 μs
subtract the_same - gb_sets 1.68 K 595.87 μs ±23.87% 555.00 μs
subtract the_same - sets 0.52 K 1916.33 μs ±14.00% 1833.00 μs
Comparison:
subtract the_same - ordsets 7.25 K
subtract the_same - map_sets 1.75 K - 4.15x slower
subtract the_same - gb_sets 1.68 K - 4.32x slower
subtract the_same - sets 0.52 K - 13.90x slower
##### With input small (100) #####
Name ips average deviation median
subtract the_same - ordsets 694.50 K 1.44 μs ±119.60% 1.30 μs
subtract the_same - map_sets 209.58 K 4.77 μs ±23.80% 4.50 μs
subtract the_same - gb_sets 170.15 K 5.88 μs ±281.57% 5.00 μs
subtract the_same - sets 50.31 K 19.88 μs ±28.63% 19.00 μs
Comparison:
subtract the_same - ordsets 694.50 K
subtract the_same - map_sets 209.58 K - 3.31x slower
subtract the_same - gb_sets 170.15 K - 4.08x slower
subtract the_same - sets 50.31 K - 13.80x slower
##### With input large (10_000) #####
Name ips average deviation median
subtract modified - ordsets 5.24 K 190.89 μs ±18.30% 183.00 μs
subtract modified - gb_sets 1.08 K 921.90 μs ±19.23% 884.00 μs
subtract modified - map_sets 1.06 K 939.90 μs ±23.32% 881.00 μs
subtract modified - sets 0.52 K 1919.40 μs ±14.42% 1821.00 μs
Comparison:
subtract modified - ordsets 5.24 K
subtract modified - gb_sets 1.08 K - 4.83x slower
subtract modified - map_sets 1.06 K - 4.92x slower
subtract modified - sets 0.52 K - 10.06x slower
##### With input small (100) #####
Name ips average deviation median
subtract modified - ordsets 688.39 K 1.45 μs ±137.90% 1.30 μs
subtract modified - map_sets 141.86 K 7.05 μs ±119.96% 7.00 μs
subtract modified - gb_sets 120.73 K 8.28 μs ±180.68% 8.00 μs
subtract modified - sets 48.14 K 20.77 μs ±28.37% 19.00 μs
Comparison:
subtract modified - ordsets 688.39 K
subtract modified - map_sets 141.86 K - 4.85x slower
subtract modified - gb_sets 120.73 K - 5.70x slower
subtract modified - sets 48.14 K - 14.30x slower
##### With input large (10_000) #####
Name ips average deviation median
subtract half_sized - ordsets 4.77 K 209.46 μs ±26.84% 190.00 μs
subtract half_sized - gb_sets 1.16 K 859.57 μs ±28.77% 811.00 μs
subtract half_sized - map_sets 1.09 K 917.28 μs ±19.79% 858.00 μs
subtract half_sized - sets 0.52 K 1937.67 μs ±15.43% 1831.00 μs
Comparison:
subtract half_sized - ordsets 4.77 K
subtract half_sized - gb_sets 1.16 K - 4.10x slower
subtract half_sized - map_sets 1.09 K - 4.38x slower
subtract half_sized - sets 0.52 K - 9.25x slower
##### With input small (100) #####
Name ips average deviation median
subtract half_sized - ordsets 696.48 K 1.44 μs ±130.06% 1.30 μs
subtract half_sized - map_sets 136.24 K 7.34 μs ±287.98% 7.00 μs
subtract half_sized - gb_sets 135.94 K 7.36 μs ±164.82% 7.00 μs
subtract half_sized - sets 48.55 K 20.60 μs ±34.64% 19.00 μs
Comparison:
subtract half_sized - ordsets 696.48 K
subtract half_sized - map_sets 136.24 K - 5.11x slower
subtract half_sized - gb_sets 135.94 K - 5.12x slower
subtract half_sized - sets 48.55 K - 14.35x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment