sdset 0.1.0

Set operations for sorted and deduplicated slices. Much performances! Such Wow!
# sdset

Set theory applied on sorted and deduplicated slices. Much performances! Such Wow!

`sdset` is for `sorted-deduplicated-slices-set-operation` which is a little bit too long.

[Documentation](https://docs.rs/sdset) can be found on docs.rs.

## Performances

Note about the tests that ends with:
  - `_big`, sets are done on two ranges of integer, the first is `0..100` and the second is `1..101`
  - `_big2`, sets are done on two ranges of integer, the first is `0..100` and the second is `51..151`
  - `_big3`, sets are done on two ranges of integer, the first is `0..100` and the second is `100..200`

### BTreeSet

These slices of ranges of integer are useful when they overlap, we can see how performances changes on different overlap slice parts.

Here is the performances of the `BtreeSet`.

```
tests::bench_difference_btree_two_slices_big      ... bench:         774 ns/iter (+/- 54)
tests::bench_difference_btree_two_slices_big2     ... bench:       1,137 ns/iter (+/- 151)
tests::bench_difference_btree_two_slices_big3     ... bench:       1,218 ns/iter (+/- 78)

tests::bench_intersection_btree_two_slices_big    ... bench:       1,453 ns/iter (+/- 84)
tests::bench_intersection_btree_two_slices_big2   ... bench:       1,142 ns/iter (+/- 36)
tests::bench_intersection_btree_two_slices_big3   ... bench:         553 ns/iter (+/- 112)

tests::bench_union_btree_two_slices_big           ... bench:       1,066 ns/iter (+/- 578)
tests::bench_union_btree_two_slices_big2          ... bench:       1,300 ns/iter (+/- 202)
tests::bench_union_btree_two_slices_big3          ... bench:       1,462 ns/iter (+/- 55)
```

### accumulate, sort and dedup

The performances of a `Vec` that is extended to contain all values then `sort` and `dedup`.
Note that works only for the _union_ set operation.

```rust
fn sort_dedup<T: Ord + Clone>(a: &[T], b: &[T]) -> Vec<T>
{
    let mut elements = vec![&a, &b].into_iter().flatten().cloned().collect();
    elements.sort_unstable();
    elements.dedup();
    elements
}
```

```
tests::bench_union_sort_dedup_two_slices_big      ... bench:       2,307 ns/iter (+/- 461)
tests::bench_union_sort_dedup_two_slices_big2     ... bench:       2,019 ns/iter (+/- 326)
tests::bench_union_sort_dedup_two_slices_big3     ... bench:         825 ns/iter (+/- 30)
```

### sdset

And now the performances of the `sdset` library.

First with the `multi` module types. Note that the only operation that is not worth is the `union` for the `_big` test, which is slower than the `BTreeSet`one.

```
multi::difference::tests::bench_two_slices_big    ... bench:         782 ns/iter (+/- 36)
multi::difference::tests::bench_two_slices_big2   ... bench:         445 ns/iter (+/- 36)
multi::difference::tests::bench_two_slices_big3   ... bench:         103 ns/iter (+/- 17)

multi::intersection::tests::bench_two_slices_big  ... bench:       1,085 ns/iter (+/- 60)
multi::intersection::tests::bench_two_slices_big2 ... bench:         704 ns/iter (+/- 71)
multi::intersection::tests::bench_two_slices_big3 ... bench:         102 ns/iter (+/- 20)

multi::union::tests::bench_two_slices_big         ... bench:       1,165 ns/iter (+/- 57)
multi::union::tests::bench_two_slices_big2        ... bench:         663 ns/iter (+/- 65)
multi::union::tests::bench_two_slices_big3        ... bench:         177 ns/iter (+/- 53)
```

And with the `duo` modules types.

```
duo::difference::tests::bench_two_slices_big      ... bench:         474 ns/iter (+/- 31)
duo::difference::tests::bench_two_slices_big2     ... bench:         285 ns/iter (+/- 60)
duo::difference::tests::bench_two_slices_big3     ... bench:          74 ns/iter (+/- 7)

duo::intersection::tests::bench_two_slices_big    ... bench:         110 ns/iter (+/- 8)
duo::intersection::tests::bench_two_slices_big2   ... bench:         105 ns/iter (+/- 19)
duo::intersection::tests::bench_two_slices_big3   ... bench:          73 ns/iter (+/- 8)

duo::union::tests::union_bench_two_slices_big     ... bench:         183 ns/iter (+/- 59)
duo::union::tests::union_bench_two_slices_big2    ... bench:         164 ns/iter (+/- 12)
duo::union::tests::union_bench_two_slices_big3    ... bench:         142 ns/iter (+/- 6)
```