dataseries 0.1.6

dataseries support for rust
use dataseries::{of_iter, DataPoint, Series, UnionResult};

fn map_any(x: UnionResult<i64, u32>) -> (Option<i64>, Option<u32>) {
    match x {
        UnionResult::LeftOnly(left) => (Some(left), None),
        UnionResult::RightOnly(right) => (None, Some(right)),
        UnionResult::Both { left, right } => (Some(left), Some(right)),
    }
}

#[test]
fn test_empty() {
    let x: dataseries::FromIteratorSeries<std::vec::IntoIter<DataPoint<i32, i64>>> =
        of_iter(vec![]);
    let y: dataseries::FromIteratorSeries<std::vec::IntoIter<DataPoint<i32, u32>>> =
        of_iter(vec![]);
    let u = x.union(y, |x| -> (Option<i64>, Option<u32>) { map_any(x) });
    let actual = u.collect::<Vec<_>>();
    type Expected = Vec<DataPoint<i32, (Option<i64>, Option<u32>)>>;
    let expected: Expected = vec![];

    assert_eq!(expected.as_slice(), actual.as_slice())
}

#[test]
fn test_right_empty() {
    let x = of_iter(vec![DataPoint::new(1, 2)]);
    let y = of_iter(vec![]);
    let u = x.union(y, map_any);
    let actual = u.collect::<Vec<_>>();
    let expected = vec![DataPoint::new(1, (Some(2), None))];

    assert_eq!(expected.as_slice(), actual.as_slice())
}

#[test]
fn test_left_empty() {
    let x = of_iter(vec![]);
    let y = of_iter(vec![DataPoint::new(1, 2)]);
    let actual = x.union(y, map_any).collect::<Vec<_>>();
    let expected = vec![DataPoint::new(1, (None, Some(2)))];

    assert_eq!(expected.as_slice(), actual.as_slice())
}