<div dir="ltr">  Â  Author: José Valim <jose(dot)valim(at)gmail(dot)com><br>  Â  Status: Draft<br>  Â  Type: Standards Track<br>  Â  Created: 18-Sep-2019<br>  Â  Post-History:<br>****<br>EEP ???: Maps based set implementation<br>----<br><br>Abstract<br>========<br><br>This EEP proposes a maps-based set implementation and a group of BIFs<br>with the goal of providing a *de facto* sets implementation in Erlang/OTP.<br><br>Motivation<br>==========<br><br>In order to efficiently use sets in Erlang/OTP today, one has to<br>consider three different options:<br><br>  * `ordsets`<br>  * `gb_sets`<br>  * using maps as sets (such as `cerl_sets`)<br><br>For example, if you wish to perform unions/intersections/subtractions,<br>`ordsets` is generally the most efficient. For individual lookups,<br>`gb_sets` and "maps as sets" are preferred, although the latter has no<br>official API in Erlang/OTP. If you need a mixed profile, the best choice<br>becomes blurrier. Note there is also a `sets` module, but it is rarely a<br>viable option.<br><br>The current landscape with sets is not much different than the dictionary<br>landscape before Erlang/OTP 17. Luckily, once `maps` were added, `maps`<br>became the *de facto* dictionary in Erlang. The other dictionary-like modules<br>may perform better under limited occasions but `maps` provide the best<br>profile in many scenarios and are a reasonable starting point (until a<br>need for benchmarking and profiling arises - if it ever arises).<br><br>The goal of this EEP is to propose a map-based sets solution with a group<br>of BIFs that will give developers a sets implementation that can be generally<br>treated as the main set implementation in Erlang/OTP.<br><br>Rationale<br>=========<br><br>Dictionaries and sets implementation tend to walk side-by-side. Such as<br>`ordsets` and `orddict`, `gb_trees` and `gb_sets`. That's because you can<br>consider elements in a set to be keys in a dictionary, where you don't care<br>about the value for the keys.<br><br>Given we have dictionaries implemented as maps, could we have sets based<br>on maps? The answer is yes and there are two approaches. The first approach<br>is to provide a native data structure, implemented in C, with its own syntax.<br>The advantage of said approach would be lower memory usage, but it has a large<br>impact on the language and on the runtime. Therefore that's not the approach<br>we will pursue here.<br><br>The second approach, which this EEP advocates for, is to implement `sets`<br>on top of maps, as done by `cerl_sets`. In this scenario, the sets elements<br>are keys in the map and the values are empty lists (we chose empty lists<br>because they are very cheap to serialize).<br><br>Using "maps as sets" provide good performance characteristics today for<br>inserting, adding and deleting set elements, being faster than all other<br>implementations. However, in terms of memory usage, "maps as sets" use<br>almost two times more memory than `ordsets` (although note that the set<br>operations themselves may end-up using less memory). Compared to `gb_sets`,<br>"maps as sets" use less memory altogether.<br><br>But can "maps as sets" be as fast as `ordsets` for unions, intersections and<br>subtractions?<br><br>The good news is: **this is already true for unions**, which is equivalent to<br>`maps:merge/2`. Benchmarks are available in the addendum and we can take the<br>following conclusions:<br><br>  1. when unioning integers elements, maps and ordsets take roughly the same<br>  Â  time, with maps slightly ahead except in cases where we have to go from<br>  Â  small maps to large maps<br><br>  2. when unioning tuples elements, maps are consistently faster, sometimes<br>  Â  2 to 4 times, except in cases where we have to go from small maps to large<br>  Â  maps. This is expected, the more expensive it becomes to compare items,<br>  Â  the more expensive `ordsets` become<br><br>This means that, if we could implement intersection and subtraction on top of<br>maps, then it will likely be more efficient than ordsets, since intersection<br>and subtraction do not have the issue of map resizing.<br><br>A proof of concept was written for intersections using small and mixed maps<br>with positive results (see benchmarks in addendum). We can also see the new<br>intersections are consistently faster than `cerl_sets`. Unfortunately there<br>are no benchmarks for intersections between two large maps due to lack of C<br>expertise of this EEP author. The assumption, which should be verified, is<br>that intersecting large maps will be faster than intersecting large `ordsets`.<br>Given the results seen in `maps:merge/2` and the fact that map resizing does<br>not happen on intersections, this assumption will likely turn out to be true.<br><br>Therefore, if our goal is to make `maps` as fast as `ordsets` for those<br>operations, we need to implement new BIFs.<br><br>Specification<br>=============<br><br>"maps as sets" are generally more efficient than the existing set<br>implementations for checking, adding and deleting elements. However,<br>they are slower than `ordsets` in the following operations:<br><br>  * `from_list/1`<br>  * `is_subset/2`<br>  * `is_disjoint/2`<br>  * `intersection/2`<br>  * `subtract/2`<br><br>Therefore, if we want to have a *de facto* set implementation, the functions<br>above would have to implemented as BIFs. The first three provide only partial<br>speed-ups compared to a pure Erlang implementation but the last two operations<br>with provide drastic gains as NIFs. The last two operations are also the most<br>complex to implement.<br><br>With the changes above, the only operations in "maps as sets" that won't be as<br>fast or faster than "ordsets" is `to_list` and `fold`, since `ordsets` are lists<br>internally.<br><br>Assuming the functionality above is validated as more performant (at least<br>for intersections and subtractions) and there is an interest in providing said<br>functionality, the last question is: how should this functionality be exposed?<br><br>Possible APIs for "maps as sets"<br>================================<br><br>### 1. Augment the maps module<br><br>If there is no interest in adding new module to OTP, the "maps" module could<br>be augmented to have set-based operations. In those cases, only the keys are<br>compared. The values can come from either the first or the second map.<br><br>While this approach will improve performance, the `intersection/2` and `subtract/2`<br>APIs in `maps` are quite awkward. One alternative is to prefix those operations<br>with the `key` prefix, such as `keyintersection`, to make it clear they are<br>about the intersection of keys. But perhaps a better approach altogether is<br>to define a separate module.<br><br>### 2. Add `mapsets` module<br><br>The `mapsets` module provide sets based on maps. The fact said sets are based<br>on maps is part of the public API (i.e. they are not an opaque type), exactly<br>like `ordsets`. The value for each key is the empty list to make sure sets can<br>be cheapily serialized.<br><br>This new module would have 5 BIFs:<br><br>  * `mapsets:from_list/1`<br>  * `mapsets:intersection/2`<br>  * `mapsets:is_subset/2`<br>  * `mapsets:is_disjoint/2`<br>  * `mapsets:subtract/2`<br><br>The remaining APIs would be implemented on top of the maps API.<br><br>### 3. Change the `sets` module<br><br>Another option, similar to the above, is to leverage the fact the `sets` type<br>is opaque and replace its implementation by "maps as sets". The advantagess of<br>this approach is that everyone using `sets` today would get a performance upgrade<br>and we would avoid adding a new module to Erlang/OTP. After all, there is always<br>a risk that by adding a fourth option that unifies all three existing options,<br>we will simply end-up with four options.<br><br>The downside of this approach is that, although the `sets` datastructure is<br>opaque, developers may have serialized it elsewhere, and therefore the existing<br>data structure must still be supported. This means we would first need to modify<br>the `sets` module to support both old sets and the new "maps as sets". Support<br>for the old data structure can be removed only in future versions. We would also<br>need to discuss an appropriate migration path.<br><br>Next Steps<br>==========<br><br>At the current stage, the proposal is a draft and not fully specified. In<br>particular, it is necessary to validate the implementation of some operations<br>and benchmark them. It is also necessary to choose a relevant API for the<br>propose functionality.<br><br>That said, if this proposal is viewed positively, the proposed next steps are:<br><br>  1. Validate that intersections with maps is faster than with ordsets<br><br>  2. Choose the desired API for "maps as sets" (i.e. choose between 1. extending<br>  Â  Â `maps`, 2. adding `mapsets`, or 3. changing `sets`)<br><br>  3. Implement the chosen API in Erlang (most of the `cerl_sets` implementation<br>  Â  Â can be leveraged)<br><br>  4. Optimize the relevant operations as BIFs<br><br>The author of the EEP can help by implementating step 3.<br><br>Copyright<br>=========<br><br>This document has been placed in the public domain.<br><br>[EmacsVar]: <> "Local Variables:"<br>[EmacsVar]: <> "mode: indented-text"<br>[EmacsVar]: <> "indent-tabs-mode: nil"<br>[EmacsVar]: <> "sentence-end-double-space: t"<br>[EmacsVar]: <> "fill-column: 70"<br>[EmacsVar]: <> "coding: utf-8"<br>[EmacsVar]: <> "End:"<br>[VimVar]: <> " vim: set fileencoding=utf-8 expandtab shiftwidth=4 softtabstop=4: "<br><br><br>Addendum: Union benchmark results<br>=================================<br><br>### Unioning sets of integers<br><br>  Â  Operating System: macOS<br>  Â  CPU Information: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz<br>  Â  Number of Available Cores: 8<br>  Â  Available memory: 16 GB<br>  Â  Elixir 1.9.0<br>  Â  Erlang 23-master<br><br>  Â  Benchmark suite executing with the following configuration:<br>  Â  warmup: 2 s<br>  Â  time: 5 s<br>  Â  memory time: 0 ns<br>  Â  parallel: 1<br>  Â  Estimated total run time: 8.40 min<br><br>  Â  ##### With input a1 Interspersed (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.18 M Â  Â  Â 239.50 ns Â±13926.78% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 2.73 M Â  Â  Â 365.68 ns Â Â±8833.12% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.99 M Â  Â  1008.99 ns Â Â±2897.13% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.18 M<br>  Â  3 ordsets:union Â  Â  Â  Â 2.73 M - 1.53x slower +126.19 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.99 M - 4.21x slower +769.49 ns<br><br>  Â  ##### With input a2 Interspersed (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  3.60 M Â  Â  Â 277.93 ns Â Â±9122.84% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.93 M Â  Â  Â 517.34 ns Â Â±5920.40% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.62 M Â  Â  1624.47 ns Â Â±2115.84% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 3000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  3.60 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.93 M - 1.86x slower +239.41 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.62 M - 5.84x slower +1346.54 ns<br><br>  Â  ##### With input a3 Interspersed (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  1012.27 K Â  Â  Â  Â 0.99 Î¼s Â Â±4048.88% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  318.99 K Â  Â  Â  Â 3.13 Î¼s Â  Â±558.61% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â  7 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 270.93 K Â  Â  Â  Â 3.69 Î¼s Â  Â±222.80% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â 12 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  1012.27 K<br>  Â  1 maps:merge Â  Â  Â  Â  318.99 K - 3.17x slower +2.15 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 270.93 K - 3.74x slower +2.70 Î¼s<br><br>  Â  ##### With input a4 Interspersed (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â 1149.76 K Â  Â  Â  Â 0.87 Î¼s Â Â±3450.02% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:union Â  Â  Â 584.09 K Â  Â  Â  Â 1.71 Î¼s Â Â±1716.00% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  4 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 146.62 K Â  Â  Â  Â 6.82 Î¼s Â  Â±311.32% Â  Â  Â  Â  Â  6 Î¼s Â  Â  Â  Â  Â 25 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â 1149.76 K<br>  Â  3 ordsets:union Â  Â  Â 584.09 K - 1.97x slower +0.84 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 146.62 K - 7.84x slower +5.95 Î¼s<br><br>  Â  ##### With input a5 Interspersed (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 71.57 K Â  Â  Â  13.97 Î¼s Â  Â±154.74% Â  Â  Â  Â  Â 12 Î¼s Â  Â  Â  Â  Â 44 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  33.29 K Â  Â  Â  30.04 Î¼s Â  Â±134.28% Â  Â  Â  Â  Â 25 Î¼s Â  Â  Â  Â  Â 92 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  Â 8.36 K Â  Â  Â 119.56 Î¼s Â  Â Â±52.83% Â  Â  Â  Â  106 Î¼s Â  Â  Â  Â  255 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 71.57 K<br>  Â  3 ordsets:union Â  Â  Â  33.29 K - 2.15x slower +16.07 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  Â 8.36 K - 8.56x slower +105.58 Î¼s<br><br>  Â  ##### With input a6 Interspersed (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  275.98 Â  Â  Â  Â 3.62 ms Â  Â Â±36.94% Â  Â  Â  Â 2.75 ms Â  Â  Â  Â 7.26 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 247.19 Â  Â  Â  Â 4.05 ms Â  Â Â±14.63% Â  Â  Â  Â 4.01 ms Â  Â  Â  Â 5.39 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  43.70 Â  Â  Â  22.88 ms Â  Â Â±28.56% Â  Â  Â  20.66 ms Â  Â  Â  44.84 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  275.98<br>  Â  3 ordsets:union Â  Â  Â  Â 247.19 - 1.12x slower +0.42 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  43.70 - 6.32x slower +19.26 ms<br><br>  Â  ##### With input b1 Half-left (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â  Â 5.14 M Â  Â  Â 194.71 ns Â Â±2814.44% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.80 M Â  Â  Â 208.36 ns Â±20621.17% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.48 M Â  Â  Â 673.48 ns Â Â±4924.77% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â  Â 5.14 M<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.80 M - 1.07x slower +13.65 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.48 M - 3.46x slower +478.77 ns<br><br>  Â  ##### With input b2 Half-left (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.42 M Â  Â  Â 226.29 ns Â Â±9473.44% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 3.73 M Â  Â  Â 268.01 ns Â±12800.39% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.87 M Â  Â  1144.30 ns Â Â±2389.89% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.42 M<br>  Â  3 ordsets:union Â  Â  Â  Â 3.73 M - 1.18x slower +41.72 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.87 M - 5.06x slower +918.01 ns<br><br>  Â  ##### With input b3 Half-left (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.64 M Â  Â  Â 378.92 ns Â±12298.14% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.70 M Â  Â  Â 589.31 ns Â Â±7472.62% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.43 M Â  Â  2326.42 ns Â  Â±393.28% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 4000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.64 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.70 M - 1.56x slower +210.39 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.43 M - 6.14x slower +1947.49 ns<br><br>  Â  ##### With input b4 Half-left (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  1365.15 K Â  Â  Â  Â 0.73 Î¼s Â Â±3249.86% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  587.14 K Â  Â  Â  Â 1.70 Î¼s Â Â±1709.70% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 254.37 K Â  Â  Â  Â 3.93 Î¼s Â  Â±510.57% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â 16 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  1365.15 K<br>  Â  1 maps:merge Â  Â  Â  Â  587.14 K - 2.33x slower +0.97 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 254.37 K - 5.37x slower +3.20 Î¼s<br><br>  Â  ##### With input b5 Half-left (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  130.95 K Â  Â  Â  Â 7.64 Î¼s Â  Â Â±44.63% Â  Â  Â  Â  Â  7 Î¼s Â  Â  Â  Â  Â 25 Î¼s<br>  Â  3 ordsets:union Â  Â  Â 112.42 K Â  Â  Â  Â 8.90 Î¼s Â  Â±271.51% Â  Â  Â  Â  Â  8 Î¼s Â  Â  Â  Â  Â 34 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  14.89 K Â  Â  Â  67.17 Î¼s Â  Â Â±81.58% Â  Â  Â  Â  Â 58 Î¼s Â  Â  Â 167.75 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  130.95 K<br>  Â  3 ordsets:union Â  Â  Â 112.42 K - 1.16x slower +1.26 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  14.89 K - 8.80x slower +59.54 Î¼s<br><br>  Â  ##### With input b6 Half-left (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  736.54 Â  Â  Â  Â 1.36 ms Â  Â Â±13.50% Â  Â  Â  Â 1.30 ms Â  Â  Â  Â 2.17 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 424.33 Â  Â  Â  Â 2.36 ms Â  Â Â±20.47% Â  Â  Â  Â 2.28 ms Â  Â  Â  Â 3.81 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â 111.06 Â  Â  Â  Â 9.00 ms Â  Â Â±14.00% Â  Â  Â  Â 8.64 ms Â  Â  Â  14.87 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  736.54<br>  Â  3 ordsets:union Â  Â  Â  Â 424.33 - 1.74x slower +1.00 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â 111.06 - 6.63x slower +7.65 ms<br><br>  Â  ##### With input c1 Half-right (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â  Â 5.39 M Â  Â  Â 185.61 ns Â Â±3347.98% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.44 M Â  Â  Â 224.99 ns Â±18210.87% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.38 M Â  Â  Â 726.62 ns Â Â±5484.65% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â  Â 5.39 M<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.44 M - 1.21x slower +39.37 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.38 M - 3.91x slower +541.01 ns<br><br>  Â  ##### With input c2 Half-right (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.50 M Â  Â  Â 222.20 ns Â Â±6200.17% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 3.66 M Â  Â  Â 273.47 ns Â±11368.54% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.91 M Â  Â  1097.73 ns Â Â±2497.65% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.50 M<br>  Â  3 ordsets:union Â  Â  Â  Â 3.66 M - 1.23x slower +51.26 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.91 M - 4.94x slower +875.52 ns<br><br>  Â  ##### With input c3 Half-right (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.88 M Â  Â  Â 346.75 ns Â±11287.26% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.87 M Â  Â  Â 534.45 ns Â Â±5864.66% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.42 M Â  Â  2353.46 ns Â  Â±409.72% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 5000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.88 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.87 M - 1.54x slower +187.69 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.42 M - 6.79x slower +2006.70 ns<br><br>  Â  ##### With input c4 Half-right (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  1405.29 K Â  Â  Â  Â 0.71 Î¼s Â Â±4860.25% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  541.91 K Â  Â  Â  Â 1.85 Î¼s Â Â±1461.20% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 248.12 K Â  Â  Â  Â 4.03 Î¼s Â  Â±526.17% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â 17 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  1405.29 K<br>  Â  1 maps:merge Â  Â  Â  Â  541.91 K - 2.59x slower +1.13 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 248.12 K - 5.66x slower +3.32 Î¼s<br><br>  Â  ##### With input c5 Half-right (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â 117.05 K Â  Â  Â  Â 8.54 Î¼s Â  Â±180.01% Â  Â  Â  Â  Â  8 Î¼s Â  Â  Â  Â  Â 32 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  106.28 K Â  Â  Â  Â 9.41 Î¼s Â  Â±706.19% Â  Â  Â  Â  Â  8 Î¼s Â  Â  Â  Â  Â 28 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  14.62 K Â  Â  Â  68.38 Î¼s Â  Â Â±69.45% Â  Â  Â  Â  Â 59 Î¼s Â  Â  Â  Â  149 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â 117.05 K<br>  Â  1 maps:merge Â  Â  Â  Â  106.28 K - 1.10x slower +0.87 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  14.62 K - 8.00x slower +59.84 Î¼s<br><br>  Â  ##### With input c6 Half-right (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  447.90 Â  Â  Â  Â 2.23 ms Â  Â Â±42.50% Â  Â  Â  Â 1.81 ms Â  Â  Â  Â 6.07 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 312.45 Â  Â  Â  Â 3.20 ms Â  Â Â±35.75% Â  Â  Â  Â 2.92 ms Â  Â  Â  Â 7.20 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â 110.13 Â  Â  Â  Â 9.08 ms Â  Â Â±14.75% Â  Â  Â  Â 8.72 ms Â  Â  Â  16.01 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  447.90<br>  Â  3 ordsets:union Â  Â  Â  Â 312.45 - 1.43x slower +0.97 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â 110.13 - 4.07x slower +6.85 ms<br><br>  Â  ##### With input d1 Equal (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.03 M Â  Â  Â 248.00 ns Â±13008.64% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 3.41 M Â  Â  Â 293.08 ns Â±11881.46% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.34 M Â  Â  Â 748.45 ns Â Â±5426.61% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.03 M<br>  Â  3 ordsets:union Â  Â  Â  Â 3.41 M - 1.18x slower +45.08 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.34 M - 3.02x slower +500.44 ns<br><br>  Â  ##### With input d2 Equal (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â  Â 3.33 M Â  Â  Â 300.31 ns Â Â±5298.85% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.81 M Â  Â  Â 355.61 ns Â±14326.68% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.75 M Â  Â  1337.84 ns Â Â±2488.47% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 4000 ns<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â  Â 3.33 M<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.81 M - 1.18x slower +55.30 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.75 M - 4.45x slower +1037.53 ns<br><br>  Â  ##### With input d3 Equal (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.25 M Â  Â  Â 443.46 ns Â Â±8688.55% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.46 M Â  Â  Â 683.82 ns Â Â±3817.58% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M Â  Â  2686.18 ns Â  Â±483.99% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 9000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.25 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.46 M - 1.54x slower +240.36 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M - 6.06x slower +2242.72 ns<br><br>  Â  ##### With input d4 Equal (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.50 M Â  Â  Â 668.83 ns Â  Â±132.24% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.04 M Â  Â  Â 960.02 ns Â Â±4458.67% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.22 M Â  Â  4523.49 ns Â  Â±196.98% Â  Â  Â  Â 4000 ns Â  Â  Â  18000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.50 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.04 M - 1.44x slower +291.19 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.22 M - 6.76x slower +3854.66 ns<br><br>  Â  ##### With input d5 Equal (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 81.92 K Â  Â  Â  12.21 Î¼s Â  Â Â±57.31% Â  Â  Â  Â  Â 11 Î¼s Â  Â  Â  Â  Â 32 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  77.39 K Â  Â  Â  12.92 Î¼s Â  Â±129.75% Â  Â  Â  Â  Â 12 Î¼s Â  Â  Â  Â  Â 39 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  12.72 K Â  Â  Â  78.63 Î¼s Â  Â Â±43.08% Â  Â  Â  Â  Â 70 Î¼s Â  Â  Â  Â  174 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 81.92 K<br>  Â  3 ordsets:union Â  Â  Â  77.39 K - 1.06x slower +0.71 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  12.72 K - 6.44x slower +66.43 Î¼s<br><br>  Â  ##### With input d6 Equal (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  646.20 Â  Â  Â  Â 1.55 ms Â  Â Â±18.21% Â  Â  Â  Â 1.45 ms Â  Â  Â  Â 2.86 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 305.88 Â  Â  Â  Â 3.27 ms Â  Â Â±16.73% Â  Â  Â  Â 3.22 ms Â  Â  Â  Â 4.79 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  96.06 Â  Â  Â  10.41 ms Â  Â Â±18.09% Â  Â  Â  Â 9.72 ms Â  Â  Â  17.41 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  646.20<br>  Â  3 ordsets:union Â  Â  Â  Â 305.88 - 2.11x slower +1.72 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  96.06 - 6.73x slower +8.86 ms<br><br>### Unioning sets of tuple-integers<br><br>  Â  Operating System: macOS<br>  Â  CPU Information: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz<br>  Â  Number of Available Cores: 8<br>  Â  Available memory: 16 GB<br>  Â  Elixir 1.9.0<br>  Â  Erlang 23-master<br><br>  Â  Benchmark suite executing with the following configuration:<br>  Â  warmup: 2 s<br>  Â  time: 5 s<br>  Â  memory time: 0 ns<br>  Â  parallel: 1<br>  Â  Estimated total run time: 8.40 min<br><br>  Â  ##### With input a1 Interspersed (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.93 M Â  Â  Â 341.36 ns Â Â±2603.07% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.62 M Â  Â  Â 616.04 ns Â Â±4989.81% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.82 M Â  Â  1219.38 ns Â Â±2533.38% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.93 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.62 M - 1.80x slower +274.68 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.82 M - 3.57x slower +878.02 ns<br><br>  Â  ##### With input a2 Interspersed (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.02 M Â  Â  Â 494.89 ns Â Â±2798.11% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.04 M Â  Â  Â 963.72 ns Â Â±2195.45% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.50 M Â  Â  2012.64 ns Â Â±1226.89% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 4000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.02 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.04 M - 1.95x slower +468.83 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.50 M - 4.07x slower +1517.75 ns<br><br>  Â  ##### With input a3 Interspersed (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â 408.22 K Â  Â  Â  Â 2.45 Î¼s Â  Â±828.38% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  4 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  234.27 K Â  Â  Â  Â 4.27 Î¼s Â  Â±330.95% Â  Â  Â  Â  Â  4 Î¼s Â  Â  Â  Â  Â 10 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 189.97 K Â  Â  Â  Â 5.26 Î¼s Â  Â±643.32% Â  Â  Â  Â  Â  5 Î¼s Â  Â  Â  Â  Â 18 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â 408.22 K<br>  Â  1 maps:merge Â  Â  Â  Â  234.27 K - 1.74x slower +1.82 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 189.97 K - 2.15x slower +2.81 Î¼s<br><br>  Â  ##### With input a4 Interspersed (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  767.56 K Â  Â  Â  Â 1.30 Î¼s Â Â±1279.19% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:union Â  Â  Â 246.12 K Â  Â  Â  Â 4.06 Î¼s Â  Â±267.03% Â  Â  Â  Â  Â  4 Î¼s Â  Â  Â  Â  Â 14 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 108.33 K Â  Â  Â  Â 9.23 Î¼s Â  Â±255.73% Â  Â  Â  Â  Â  8 Î¼s Â  Â  Â  Â  Â 27 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  767.56 K<br>  Â  3 ordsets:union Â  Â  Â 246.12 K - 3.12x slower +2.76 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 108.33 K - 7.09x slower +7.93 Î¼s<br><br>  Â  ##### With input a5 Interspersed (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 47.61 K Â  Â  Â  21.00 Î¼s Â  Â±196.69% Â  Â  Â  Â  Â 19 Î¼s Â  Â  Â  Â  Â 59 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  12.38 K Â  Â  Â  80.76 Î¼s Â  Â Â±53.12% Â  Â  Â  Â  Â 73 Î¼s Â  Â  Â  Â  193 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  Â 6.04 K Â  Â  Â 165.68 Î¼s Â  Â Â±30.74% Â  Â  Â  Â  152 Î¼s Â  Â  Â  Â  309 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 47.61 K<br>  Â  3 ordsets:union Â  Â  Â  12.38 K - 3.84x slower +59.75 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  Â 6.04 K - 7.89x slower +144.67 Î¼s<br><br>  Â  ##### With input a6 Interspersed (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  210.63 Â  Â  Â  Â 4.75 ms Â  Â Â±35.35% Â  Â  Â  Â 3.77 ms Â  Â  Â  Â 9.58 ms<br>  Â  3 ordsets:union Â  Â  Â  Â  74.84 Â  Â  Â  13.36 ms Â  Â Â±17.83% Â  Â  Â  12.73 ms Â  Â  Â  18.51 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  54.06 Â  Â  Â  18.50 ms Â  Â Â±14.28% Â  Â  Â  17.83 ms Â  Â  Â  24.21 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  210.63<br>  Â  3 ordsets:union Â  Â  Â  Â  74.84 - 2.81x slower +8.61 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  54.06 - 3.90x slower +13.75 ms<br><br>  Â  ##### With input b1 Half-left (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.49 M Â  Â  Â 222.57 ns Â Â±1774.31% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 3.33 M Â  Â  Â 300.45 ns Â Â±6349.54% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.46 M Â  Â  Â 683.85 ns Â Â±2344.50% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.49 M<br>  Â  3 ordsets:union Â  Â  Â  Â 3.33 M - 1.35x slower +77.88 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.46 M - 3.07x slower +461.29 ns<br><br>  Â  ##### With input b2 Half-left (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.48 M Â  Â  Â 402.60 ns Â Â±9495.69% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 2.30 M Â  Â  Â 435.32 ns Â Â±1123.50% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.76 M Â  Â  1318.82 ns Â  Â±818.75% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.48 M<br>  Â  3 ordsets:union Â  Â  Â  Â 2.30 M - 1.08x slower +32.73 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.76 M - 3.28x slower +916.23 ns<br><br>  Â  ##### With input b3 Half-left (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.54 M Â  Â  Â 648.33 ns Â Â±2884.79% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.09 M Â  Â  Â 921.12 ns Â  Â±734.80% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M Â  Â  2728.75 ns Â  Â±554.08% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 6000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.54 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.09 M - 1.42x slower +272.79 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M - 4.21x slower +2080.42 ns<br><br>  Â  ##### With input b4 Half-left (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â 734.80 K Â  Â  Â  Â 1.36 Î¼s Â  Â±978.11% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  439.62 K Â  Â  Â  Â 2.27 Î¼s Â Â±1429.61% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  5 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 224.47 K Â  Â  Â  Â 4.45 Î¼s Â  Â±213.29% Â  Â  Â  Â  Â  4 Î¼s Â  Â  Â  Â  Â 15 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â 734.80 K<br>  Â  1 maps:merge Â  Â  Â  Â  439.62 K - 1.67x slower +0.91 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 224.47 K - 3.27x slower +3.09 Î¼s<br><br>  Â  ##### With input b5 Half-left (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 76.01 K Â  Â  Â  13.16 Î¼s Â  Â±104.36% Â  Â  Â  Â  Â 12 Î¼s Â  Â  Â  Â  Â 35 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  45.29 K Â  Â  Â  22.08 Î¼s Â  Â±125.57% Â  Â  Â  Â  Â 20 Î¼s Â  Â  Â  Â  Â 60 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  13.42 K Â  Â  Â  74.53 Î¼s Â  Â Â±44.00% Â  Â  Â  Â  Â 68 Î¼s Â  Â  Â  Â  164 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 76.01 K<br>  Â  3 ordsets:union Â  Â  Â  45.29 K - 1.68x slower +8.93 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  13.42 K - 5.66x slower +61.37 Î¼s<br><br>  Â  ##### With input b6 Half-left (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  530.32 Â  Â  Â  Â 1.89 ms Â  Â Â±18.53% Â  Â  Â  Â 1.77 ms Â  Â  Â  Â 3.40 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 139.97 Â  Â  Â  Â 7.14 ms Â  Â Â±17.91% Â  Â  Â  Â 7.01 ms Â  Â  Â  11.23 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  91.51 Â  Â  Â  10.93 ms Â  Â Â±12.31% Â  Â  Â  10.34 ms Â  Â  Â  15.62 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  530.32<br>  Â  3 ordsets:union Â  Â  Â  Â 139.97 - 3.79x slower +5.26 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  91.51 - 5.80x slower +9.04 ms<br><br>  Â  ##### With input c1 Half-right (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.46 M Â  Â  Â 224.32 ns Â Â±1730.97% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 3.78 M Â  Â  Â 264.68 ns Â Â±3293.90% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.52 M Â  Â  Â 658.44 ns Â Â±1819.22% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  4.46 M<br>  Â  3 ordsets:union Â  Â  Â  Â 3.78 M - 1.18x slower +40.37 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.52 M - 2.94x slower +434.13 ns<br><br>  Â  ##### With input c2 Half-right (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â  Â 2.36 M Â  Â  Â 424.51 ns Â Â±2870.39% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.27 M Â  Â  Â 441.04 ns Â±11548.99% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.80 M Â  Â  1248.21 ns Â  Â±948.08% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â  Â 2.36 M<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.27 M - 1.04x slower +16.53 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.80 M - 2.94x slower +823.70 ns<br><br>  Â  ##### With input c3 Half-right (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.53 M Â  Â  Â 654.58 ns Â Â±2879.82% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.13 M Â  Â  Â 885.52 ns Â Â±2213.29% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M Â  Â  2675.20 ns Â  Â±502.40% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 5000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  1.53 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.13 M - 1.35x slower +230.94 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.37 M - 4.09x slower +2020.62 ns<br><br>  Â  ##### With input c4 Half-right (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:union Â  Â  Â 747.48 K Â  Â  Â  Â 1.34 Î¼s Â Â±1222.85% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  1 maps:merge Â  Â  Â  Â  433.42 K Â  Â  Â  Â 2.31 Î¼s Â Â±1493.25% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  4 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 223.83 K Â  Â  Â  Â 4.47 Î¼s Â  Â±283.66% Â  Â  Â  Â  Â  4 Î¼s Â  Â  Â  Â  Â 13 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:union Â  Â  Â 747.48 K<br>  Â  1 maps:merge Â  Â  Â  Â  433.42 K - 1.72x slower +0.97 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 223.83 K - 3.34x slower +3.13 Î¼s<br><br>  Â  ##### With input c5 Half-right (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 66.00 K Â  Â  Â  15.15 Î¼s Â  Â±321.69% Â  Â  Â  Â  Â 14 Î¼s Â  Â  Â  Â  Â 41 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  44.62 K Â  Â  Â  22.41 Î¼s Â  Â±767.12% Â  Â  Â  Â  Â 20 Î¼s Â  Â  Â  Â  Â 60 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  13.20 K Â  Â  Â  75.74 Î¼s Â  Â Â±41.33% Â  Â  Â  Â  Â 70 Î¼s Â  Â  Â  Â  161 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 66.00 K<br>  Â  3 ordsets:union Â  Â  Â  44.62 K - 1.48x slower +7.26 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  13.20 K - 5.00x slower +60.59 Î¼s<br><br>  Â  ##### With input c6 Half-right (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  428.32 Â  Â  Â  Â 2.33 ms Â  Â Â±28.88% Â  Â  Â  Â 2.06 ms Â  Â  Â  Â 4.05 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 146.62 Â  Â  Â  Â 6.82 ms Â  Â Â±18.71% Â  Â  Â  Â 6.60 ms Â  Â  Â  10.79 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  91.45 Â  Â  Â  10.93 ms Â  Â Â±13.58% Â  Â  Â  10.27 ms Â  Â  Â  15.80 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  428.32<br>  Â  3 ordsets:union Â  Â  Â  Â 146.62 - 2.92x slower +4.49 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  91.45 - 4.68x slower +8.60 ms<br><br>  Â  ##### With input d1 Equal (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  3.61 M Â  Â  Â 276.63 ns Â Â±3338.58% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 2.42 M Â  Â  Â 414.07 ns Â Â±3326.82% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.26 M Â  Â  Â 792.13 ns Â Â±1546.56% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  3.61 M<br>  Â  3 ordsets:union Â  Â  Â  Â 2.42 M - 1.50x slower +137.45 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 1.26 M - 2.86x slower +515.50 ns<br><br>  Â  ##### With input d2 Equal (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.15 M Â  Â  Â 464.77 ns Â Â±8475.08% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:union Â  Â  Â  Â 1.88 M Â  Â  Â 531.65 ns Â  Â±493.39% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.69 M Â  Â  1459.20 ns Â Â±1113.96% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 3000 ns<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  2.15 M<br>  Â  3 ordsets:union Â  Â  Â  Â 1.88 M - 1.14x slower +66.89 ns<br>  Â  2 gb_sets:union Â  Â  Â  Â 0.69 M - 3.14x slower +994.43 ns<br><br>  Â  ##### With input d3 Equal (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â 1364.57 K Â  Â  Â  Â 0.73 Î¼s Â Â±4056.53% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:union Â  Â  Â 742.74 K Â  Â  Â  Â 1.35 Î¼s Â Â±1193.06% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 307.17 K Â  Â  Â  Â 3.26 Î¼s Â  Â±527.79% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â  8 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â 1364.57 K<br>  Â  3 ordsets:union Â  Â  Â 742.74 K - 1.84x slower +0.61 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 307.17 K - 4.44x slower +2.52 Î¼s<br><br>  Â  ##### With input d4 Equal (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  816.34 K Â  Â  Â  Â 1.22 Î¼s Â  Â±168.59% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:union Â  Â  Â 451.06 K Â  Â  Â  Â 2.22 Î¼s Â Â±1119.27% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  4 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 184.50 K Â  Â  Â  Â 5.42 Î¼s Â  Â±200.77% Â  Â  Â  Â  Â  5 Î¼s Â  Â  Â  Â  Â 19 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  816.34 K<br>  Â  3 ordsets:union Â  Â  Â 451.06 K - 1.81x slower +0.99 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â 184.50 K - 4.42x slower +4.19 Î¼s<br><br>  Â  ##### With input d5 Equal (1000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â 46.22 K Â  Â  Â  21.63 Î¼s Â  Â Â±39.65% Â  Â  Â  Â  Â 20 Î¼s Â  Â  Â  Â  Â 53 Î¼s<br>  Â  3 ordsets:union Â  Â  Â  26.20 K Â  Â  Â  38.17 Î¼s Â  Â Â±63.50% Â  Â  Â  Â  Â 35 Î¼s Â  Â  Â  Â  101 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  10.24 K Â  Â  Â  97.66 Î¼s Â  Â Â±36.11% Â  Â  Â  Â  Â 90 Î¼s Â  Â  Â  Â  199 Î¼s<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â 46.22 K<br>  Â  3 ordsets:union Â  Â  Â  26.20 K - 1.76x slower +16.53 Î¼s<br>  Â  2 gb_sets:union Â  Â  Â  10.24 K - 4.51x slower +76.03 Î¼s<br><br>  Â  ##### With input d6 Equal (100000) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 maps:merge Â  Â  Â  Â  Â  440.81 Â  Â  Â  Â 2.27 ms Â  Â Â±12.79% Â  Â  Â  Â 2.17 ms Â  Â  Â  Â 3.48 ms<br>  Â  3 ordsets:union Â  Â  Â  Â 126.12 Â  Â  Â  Â 7.93 ms Â  Â Â±26.40% Â  Â  Â  Â 7.11 ms Â  Â  Â  13.85 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  73.86 Â  Â  Â  13.54 ms Â  Â Â±18.78% Â  Â  Â  12.89 ms Â  Â  Â  19.27 ms<br><br>  Â  Comparison:<br>  Â  1 maps:merge Â  Â  Â  Â  Â  440.81<br>  Â  3 ordsets:union Â  Â  Â  Â 126.12 - 3.50x slower +5.66 ms<br>  Â  2 gb_sets:union Â  Â  Â  Â  73.86 - 5.97x slower +11.27 ms<br><br>Addendum: Intersection benchmark results<br>========================================<br><br>### Intersection of sets of integers<br><br>  Â  Operating System: macOS<br>  Â  CPU Information: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz<br>  Â  Number of Available Cores: 8<br>  Â  Available memory: 16 GB<br>  Â  Elixir 1.9.0<br>  Â  Erlang 23-master<br><br>  Â  Benchmark suite executing with the following configuration:<br>  Â  warmup: 2 s<br>  Â  time: 5 s<br>  Â  memory time: 0 ns<br>  Â  parallel: 1<br>  Â  Estimated total run time: 6.53 min<br><br>  Â  ##### With input a1 Interspersed (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.64 M Â  Â  Â 177.31 ns Â Â±8960.73% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 4.58 M Â  Â  Â 218.18 ns Â Â±1955.05% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.85 M Â  Â  Â 541.24 ns Â Â±3690.38% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.81 M Â  Â  Â 551.00 ns Â Â±6378.03% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.64 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 4.58 M - 1.23x slower +40.87 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.85 M - 3.05x slower +363.93 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.81 M - 3.11x slower +373.69 ns<br><br>  Â  ##### With input a2 Interspersed (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.87 M Â  Â  Â 258.37 ns Â Â±8156.88% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.25 M Â  Â  Â 307.69 ns Â  Â±995.12% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.35 M Â  Â  Â 742.45 ns Â Â±4916.42% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.20 M Â  Â  Â 833.71 ns Â Â±3535.59% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.87 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.25 M - 1.19x slower +49.32 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.35 M - 2.87x slower +484.09 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.20 M - 3.23x slower +575.34 ns<br><br>  Â  ##### With input a3 Interspersed (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 2.37 M Â  Â  Â  Â 0.42 Î¼s Â Â±7530.28% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.57 M Â  Â  Â  Â 0.64 Î¼s Â  Â±571.54% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.63 M Â  Â  Â  Â 1.60 Î¼s Â Â±1704.57% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.57 M Â  Â  Â  Â 1.74 Î¼s Â Â±1508.42% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 2.37 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.57 M - 1.51x slower +0.21 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.63 M - 3.79x slower +1.17 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.57 M - 4.13x slower +1.32 Î¼s<br><br>  Â  ##### With input b1 Half-left (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 7.81 M Â  Â  Â 128.06 ns Â Â±3031.39% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 6.10 M Â  Â  Â 163.95 ns Â  Â±819.87% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.91 M Â  Â  Â 524.17 ns Â Â±3574.70% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.73 M Â  Â  Â 578.18 ns Â Â±5060.91% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 7.81 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 6.10 M - 1.28x slower +35.89 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.91 M - 4.09x slower +396.11 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.73 M - 4.51x slower +450.12 ns<br><br>  Â  ##### With input b2 Half-left (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.34 M Â  Â  Â 187.35 ns Â Â±6435.27% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.50 M Â  Â  Â 285.53 ns Â Â±8907.47% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.25 M Â  Â  Â 801.68 ns Â Â±2618.59% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.15 M Â  Â  Â 865.97 ns Â Â±3771.19% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.34 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.50 M - 1.52x slower +98.18 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.25 M - 4.28x slower +614.33 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.15 M - 4.62x slower +678.63 ns<br><br>  Â  ##### With input b3 Half-left (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.12 M Â  Â  Â  Â 0.32 Î¼s Â±10505.28% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.79 M Â  Â  Â  Â 0.56 Î¼s Â Â±5943.47% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.60 M Â  Â  Â  Â 1.66 Î¼s Â Â±1650.01% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.57 M Â  Â  Â  Â 1.77 Î¼s Â Â±1510.44% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.12 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.79 M - 1.74x slower +0.24 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.60 M - 5.17x slower +1.34 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.57 M - 5.51x slower +1.45 Î¼s<br><br>  Â  ##### With input b4 Half-left (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 1.41 M Â  Â  Â  Â 0.71 Î¼s Â Â±4451.88% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.32 M Â  Â  Â  Â 0.76 Î¼s Â Â±4422.37% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.37 M Â  Â  Â  Â 2.72 Î¼s Â  Â±719.29% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  5 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.31 M Â  Â  Â  Â 3.26 Î¼s Â  Â±464.70% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â  5 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 1.41 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.32 M - 1.07x slower +0.0487 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.37 M - 3.82x slower +2.01 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.31 M - 4.59x slower +2.55 Î¼s<br><br>  Â  ##### With input c1 Halt-right (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 8.50 M Â  Â  Â 117.64 ns Â Â±3751.50% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 4.96 M Â  Â  Â 201.70 ns Â Â±1008.33% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 2.66 M Â  Â  Â 375.86 ns Â Â±7893.27% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.99 M Â  Â  Â 501.60 ns Â Â±5740.59% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 8.50 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 4.96 M - 1.71x slower +84.06 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 2.66 M - 3.20x slower +258.22 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.99 M - 4.26x slower +383.96 ns<br><br>  Â  ##### With input c2 Halt-right (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.61 M Â  Â  Â 178.32 ns Â Â±6353.45% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.27 M Â  Â  Â 305.53 ns Â Â±8831.03% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.61 M Â  Â  Â 619.53 ns Â Â±5512.50% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.20 M Â  Â  Â 830.39 ns Â Â±3587.38% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 5.61 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.27 M - 1.71x slower +127.21 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.61 M - 3.47x slower +441.21 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.20 M - 4.66x slower +652.07 ns<br><br>  Â  ##### With input c3 Halt-right (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.02 M Â  Â  Â  Â 0.33 Î¼s Â±10877.75% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.76 M Â  Â  Â  Â 0.57 Î¼s Â Â±6736.07% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.83 M Â  Â  Â  Â 1.20 Î¼s Â Â±2066.14% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.56 M Â  Â  Â  Â 1.80 Î¼s Â Â±1442.53% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.02 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.76 M - 1.71x slower +0.24 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.83 M - 3.61x slower +0.87 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.56 M - 5.41x slower +1.46 Î¼s<br><br>  Â  ##### With input c4 Half-right (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.42 M Â  Â  Â  Â 0.70 Î¼s Â Â±4101.38% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 1.31 M Â  Â  Â  Â 0.77 Î¼s Â Â±5155.14% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.48 M Â  Â  Â  Â 2.07 Î¼s Â Â±1105.13% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.37 M Â  Â  Â  Â 2.69 Î¼s Â  Â±793.20% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  5 Î¼s<br><br>  Â  Comparison:<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.42 M<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 1.31 M - 1.09x slower +0.0618 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.48 M - 2.95x slower +1.37 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.37 M - 3.82x slower +1.98 Î¼s<br><br>  Â  ##### With input d1 Equal (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 4.61 M Â  Â  Â 216.84 ns Â Â±4985.98% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.44 M Â  Â  Â 290.38 ns Â Â±9494.06% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.62 M Â  Â  Â 618.37 ns Â Â±5703.54% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.48 M Â  Â  Â 677.41 ns Â Â±4388.76% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 4.61 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 3.44 M - 1.34x slower +73.54 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.62 M - 2.85x slower +401.53 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 1.48 M - 3.12x slower +460.57 ns<br><br>  Â  ##### With input d2 Equal (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.96 M Â  Â  Â 252.22 ns Â±10397.76% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 2.95 M Â  Â  Â 338.84 ns Â Â±8900.72% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.16 M Â  Â  Â 862.62 ns Â Â±3981.08% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.90 M Â  Â  1112.16 ns Â Â±2553.42% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 3.96 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 2.95 M - 1.34x slower +86.61 ns<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 1.16 M - 3.42x slower +610.40 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.90 M - 4.41x slower +859.94 ns<br><br>  Â  ##### With input d3 Equal (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 2.31 M Â  Â  Â  Â 0.43 Î¼s Â Â±8998.97% Â  Â  Â  Â  Â  0 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.49 M Â  Â  Â  Â 0.67 Î¼s Â Â±3628.66% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.52 M Â  Â  Â  Â 1.94 Î¼s Â  Â±965.82% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.42 M Â  Â  Â  Â 2.38 Î¼s Â  Â±878.07% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  4 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â  Â 2.31 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â  Â 1.49 M - 1.55x slower +0.24 Î¼s<br>  Â  0 cerl_sets:intersection Â  Â  Â  Â 0.52 M - 4.48x slower +1.51 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â  Â  Â 0.42 M - 5.50x slower +1.95 Î¼s<br><br>### Unioning sets of tuple-integers<br><br>  Â  Operating System: macOS<br>  Â  CPU Information: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz<br>  Â  Number of Available Cores: 8<br>  Â  Available memory: 16 GB<br>  Â  Elixir 1.9.0<br>  Â  Erlang 23-master<br><br>  Â  Benchmark suite executing with the following configuration:<br>  Â  warmup: 2 s<br>  Â  time: 5 s<br>  Â  memory time: 0 ns<br>  Â  parallel: 1<br>  Â  Estimated total run time: 4.90 min<br><br>  Â  ##### With input a1 Interspersed (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.53 M Â  Â  Â 394.70 ns Â Â±7692.39% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.12 M Â  Â  Â 471.60 ns Â Â±1021.75% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.30 M Â  Â  Â 768.44 ns Â Â±2657.04% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.53 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.12 M - 1.19x slower +76.90 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.30 M - 1.95x slower +373.75 ns<br><br>  Â  ##### With input a2 Interspersed (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.96 M Â  Â  Â 510.95 ns Â Â±2509.15% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.30 M Â  Â  Â 770.06 ns Â  Â±676.65% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.81 M Â  Â  1240.22 ns Â Â±1388.14% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.96 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.30 M - 1.51x slower +259.11 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.81 M - 2.43x slower +729.27 ns<br><br>  Â  ##### With input a3 Interspersed (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â 845.89 K Â  Â  Â  Â 1.18 Î¼s Â Â±2713.20% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â 495.26 K Â  Â  Â  Â 2.02 Î¼s Â  Â±164.49% Â  Â  Â  Â  Â  2 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 324.61 K Â  Â  Â  Â 3.08 Î¼s Â  Â±718.13% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â  5 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â 845.89 K<br>  Â  3 ordsets:intersection Â  Â  Â 495.26 K - 1.71x slower +0.84 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 324.61 K - 2.61x slower +1.90 Î¼s<br><br>  Â  ##### With input b1 Half-left (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 4.66 M Â  Â  Â 214.57 ns Â Â±1896.59% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 3.62 M Â  Â  Â 276.50 ns Â Â±1465.48% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.73 M Â  Â  Â 577.07 ns Â Â±5041.95% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 4.66 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 3.62 M - 1.29x slower +61.94 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.73 M - 2.69x slower +362.51 ns<br><br>  Â  ##### With input b2 Half-left (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.92 M Â  Â  Â 342.24 ns Â Â±9961.99% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.09 M Â  Â  Â 478.76 ns Â Â±5507.02% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.96 M Â  Â  1043.40 ns Â Â±2396.75% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.92 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.09 M - 1.40x slower +136.53 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.96 M - 3.05x slower +701.17 ns<br><br>  Â  ##### With input b3 Half-left (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.72 M Â  Â  Â 580.48 ns Â Â±4998.64% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.01 M Â  Â  Â 989.96 ns Â Â±2850.03% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.44 M Â  Â  2292.44 ns Â  Â±981.37% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 4000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.72 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.01 M - 1.71x slower +409.48 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.44 M - 3.95x slower +1711.96 ns<br><br>  Â  ##### With input b4 Half-left (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â 902.32 K Â  Â  Â  Â 1.11 Î¼s Â Â±1892.28% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â 710.61 K Â  Â  Â  Â 1.41 Î¼s Â Â±1793.08% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 282.62 K Â  Â  Â  Â 3.54 Î¼s Â  Â±495.73% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â 11 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â 902.32 K<br>  Â  3 ordsets:intersection Â  Â  Â 710.61 K - 1.27x slower +0.30 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 282.62 K - 3.19x slower +2.43 Î¼s<br><br>  Â  ##### With input c1 Halt-right (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 4.70 M Â  Â  Â 212.66 ns Â Â±1573.58% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 3.77 M Â  Â  Â 265.19 ns Â Â±1597.40% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.76 M Â  Â  Â 567.11 ns Â Â±4249.42% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 4.70 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 3.77 M - 1.25x slower +52.53 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.76 M - 2.67x slower +354.45 ns<br><br>  Â  ##### With input c2 Halt-right (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 3.14 M Â  Â  Â 318.35 ns Â Â±7626.82% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.23 M Â  Â  Â 449.20 ns Â Â±5268.98% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.99 M Â  Â  1014.32 ns Â Â±2177.84% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 3.14 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.23 M - 1.41x slower +130.85 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.99 M - 3.19x slower +695.97 ns<br><br>  Â  ##### With input c3 Halt-right (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.78 M Â  Â  Â 560.38 ns Â Â±5118.91% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.01 M Â  Â  Â 989.13 ns Â Â±2292.17% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.44 M Â  Â  2294.68 ns Â  Â±981.21% Â  Â  Â  Â 2000 ns Â  Â  Â  Â 4000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 1.78 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.01 M - 1.77x slower +428.75 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.44 M - 4.09x slower +1734.30 ns<br><br>  Â  ##### With input c4 Half-right (50) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â 875.40 K Â  Â  Â  Â 1.14 Î¼s Â Â±1770.92% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â 703.96 K Â  Â  Â  Â 1.42 Î¼s Â Â±1911.40% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  3 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 294.25 K Â  Â  Â  Â 3.40 Î¼s Â  Â±488.43% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â  6 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â 875.40 K<br>  Â  3 ordsets:intersection Â  Â  Â 703.96 K - 1.24x slower +0.28 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 294.25 K - 2.98x slower +2.26 Î¼s<br><br>  Â  ##### With input d1 Equal (5) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 3.29 M Â  Â  Â 303.69 ns Â Â±9348.28% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.19 M Â  Â  Â 455.98 ns Â Â±5799.97% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.15 M Â  Â  Â 869.11 ns Â Â±3884.46% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 3.29 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 2.19 M - 1.50x slower +152.29 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 1.15 M - 2.86x slower +565.41 ns<br><br>  Â  ##### With input d2 Equal (10) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.93 M Â  Â  Â 341.11 ns Â Â±3839.65% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.85 M Â  Â  Â 540.08 ns Â Â±2436.90% Â  Â  Â  Â  Â  0 ns Â  Â  Â  Â 1000 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.72 M Â  Â  1388.21 ns Â Â±1540.59% Â  Â  Â  Â 1000 ns Â  Â  Â  Â 2000 ns<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  Â  Â 2.93 M<br>  Â  3 ordsets:intersection Â  Â  Â  Â 1.85 M - 1.58x slower +198.97 ns<br>  Â  2 gb_sets:intersection Â  Â  Â  Â 0.72 M - 4.07x slower +1047.11 ns<br><br>  Â  ##### With input d3 Equal (30) #####<br>  Â  Name Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ips Â  Â  Â  Â average Â deviation Â  Â  Â  Â  median Â  Â  Â  Â  99th %<br>  Â  1 mapsets:intersection Â  Â  1395.63 K Â  Â  Â  Â 0.72 Î¼s Â Â±4359.84% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  1 Î¼s<br>  Â  3 ordsets:intersection Â  Â  Â 744.64 K Â  Â  Â  Â 1.34 Î¼s Â Â±1845.56% Â  Â  Â  Â  Â  1 Î¼s Â  Â  Â  Â  Â  2 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 302.52 K Â  Â  Â  Â 3.31 Î¼s Â  Â±672.80% Â  Â  Â  Â  Â  3 Î¼s Â  Â  Â  Â  Â 10 Î¼s<br><br>  Â  Comparison:<br>  Â  1 mapsets:intersection Â  Â  1395.63 K<br>  Â  3 ordsets:intersection Â  Â  Â 744.64 K - 1.87x slower +0.63 Î¼s<br>  Â  2 gb_sets:intersection Â  Â  Â 302.52 K - 4.61x slower +2.59 Î¼s</div>