use std::error::Error;
use jiff::Zoned;
use super::grow::*;
use crate::intervals::absolute::{AbsBoundPair, AbsEndBound, AbsFiniteBoundPos, AbsStartBound, EmptiableAbsBoundPair};
#[test]
fn start_emptiable_abs_bound_pair_empty() {
assert_eq!(
EmptiableAbsBoundPair::Empty.grow_start(AbsStartBound::InfinitePast),
EmptiableAbsBoundPair::Empty,
);
}
#[test]
fn end_emptiable_abs_bound_pair_empty() {
assert_eq!(
EmptiableAbsBoundPair::Empty.grow_end(AbsEndBound::InfiniteFuture),
EmptiableAbsBoundPair::Empty,
);
}
#[test]
fn start_to_finite_unbounded_interval() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(AbsStartBound::InfinitePast, AbsEndBound::InfiniteFuture).grow_start(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound()
),
AbsBoundPair::new(AbsStartBound::InfinitePast, AbsEndBound::InfiniteFuture),
);
Ok(())
}
#[test]
fn end_to_finite_unbounded_interval() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(AbsStartBound::InfinitePast, AbsEndBound::InfiniteFuture).grow_end(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
AbsBoundPair::new(AbsStartBound::InfinitePast, AbsEndBound::InfiniteFuture),
);
Ok(())
}
#[test]
fn start_to_inside_abs_bound_pair_bounded() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
)
.grow_start(
AbsFiniteBoundPos::new("2025-01-02 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound()
),
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
);
Ok(())
}
#[test]
fn end_to_inside_abs_bound_pair_bounded() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
)
.grow_end(
AbsFiniteBoundPos::new("2025-01-02 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
);
Ok(())
}
#[test]
fn start_to_outside_abs_bound_pair_bounded() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-02 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
)
.grow_start(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound()
),
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
);
Ok(())
}
#[test]
fn end_to_outside_abs_bound_pair_bounded() -> Result<(), Box<dyn Error>> {
assert_eq!(
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-02 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
)
.grow_end(
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
AbsBoundPair::new(
AbsFiniteBoundPos::new("2025-01-01 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_start_bound(),
AbsFiniteBoundPos::new("2025-01-03 00:00:00[Europe/Oslo]".parse::<Zoned>()?.timestamp()).to_end_bound()
),
);
Ok(())
}