-
-
Save michalmuskala/9b0b55eee25b94d9339edbf7a0e261ea to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##### 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