use portion_rs::*;

#[test]
fn union_empty() {
    let x = Portion::closed(1, 2);
    let y = Portion::closed(4, 5);
    assert_eq!("()", (x | y).to_string());

    let x = Portion::empty();
    let y = Portion::closed(2, 3);
    assert_eq!("[2, 3]", (x | y).to_string());
}

#[test]
fn union_open() {
    let x = Portion::open(2, 4);
    let y = Portion::open(4, 6);
    assert_eq!("(2, 6)", (x | y).to_string());
}

#[test]
fn union_closed() {
    let x = Portion::closed(-2, 4);
    let y = Portion::closed(3, 10);
    assert_eq!("[-2, 10]", (x | y).to_string());
}

#[test]
fn union_singleton() {
    let x = Portion::singleton(3);
    let y = Portion::openclosed(3, 4);
    assert_eq!("[3, 4]", (x | y).to_string());

    let x = Portion::singleton(5);
    let y = Portion::open(2, 5);
    assert_eq!("(2, 5]", (x | y).to_string());

    let x = Portion::closedopen(2, 8);
    let y = Portion::singleton(4);
    assert_eq!("[2, 8)", (x | y).to_string());

    let x = Portion::singleton(1);
    let y = Portion::singleton(2);
    assert_eq!("[1, 2]", (x | y).to_string());
}

#[test]
fn union_variety() {
    let x = Portion::openclosed(2, 4);
    let y = Portion::closedopen(0, 3);
    assert_eq!("[0, 4]", (x | y).to_string());

    let x = Portion::closedopen(2, 4);
    let y = Portion::openclosed(0, 3);
    assert_eq!("(0, 4)", (x | y).to_string());

    let x = Portion::open(2, 6);
    let y = Portion::closed(3, 8);
    assert_eq!("(2, 8]", (x | y).to_string());
}
