dataseries 0.1.6

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

fn test<T>(test_name: &str, expected: T, actual: T)
where
    T: PartialEq + std::fmt::Debug,
{
    if expected == actual {
        println!("expected: {expected:?}");
        println!("actual: {actual:?}");
        println!("{test_name} ok!");

        println!("---------------------------------")
    } else {
        panic!("{test_name} failed!\nexpected '{expected:?}'\n  actual '{actual:?}'")
    }
}

fn main() {
    let s1 = dataseries::of_iter(vec![DataPoint::new(3, 50)]);

    let s2 = dataseries::of_iter(vec![DataPoint::new(4, 100), DataPoint::new(7, 110)]);

    let actual = s1
        .union(s2, |x| match x {
            dataseries::UnionResult::LeftOnly(_) | dataseries::UnionResult::RightOnly(_) => None,
            dataseries::UnionResult::Both { left, right } => Some((left, right)),
        })
        .filter_map(|x| {
            x.data()
                .map(|d| DataPoint::new(x.point().to_owned(), d.to_owned()))
        })
        .collect::<Vec<_>>();

    let expected = vec![DataPoint::new(4, (50, 100)), DataPoint::new(7, (50, 110))];

    test(
        "simple union example using option",
        expected.as_slice(),
        actual.as_slice(),
    );
    println!("done")
}