#[cfg(test)]
mod test {
use super::*;
#[test]
fn left_reverse_test() {
let relation = Relation::Left.reverse();
assert_eq!(relation, Relation::Right);
}
#[test]
fn right_reverse_test() {
let relation = Relation::Right.reverse();
assert_eq!(relation, Relation::Left);
}
#[test]
fn include_reverse_test() {
let relation = Relation::Include.reverse();
assert_eq!(relation, Relation::Included);
}
#[test]
fn included_reverse_test() {
let relation = Relation::Included.reverse();
assert_eq!(relation, Relation::Include);
}
#[test]
fn left_intersection_reverse() {
let relation = Relation::LeftIntersection.reverse();
assert_eq!(relation, Relation::RightIntersection);
}
#[test]
fn right_intersection_reverse() {
let relation = Relation::RightIntersection.reverse();
assert_eq!(relation, Relation::LeftIntersection);
}
}
#[derive(Eq, PartialEq, Debug)]
pub enum Relation {
Left,
LeftIntersection,
Include,
RightIntersection,
Right,
Included,
}
impl Relation {
pub fn reverse(&self) -> Relation {
match self {
Relation::Left => Relation::Right,
Relation::Right => Relation::Left,
Relation::Included => Relation::Include,
Relation::Include => Relation::Included,
Relation::LeftIntersection => Relation::RightIntersection,
Relation::RightIntersection => Relation::LeftIntersection,
}
}
}
pub trait Interval {
fn relation(&self, another: &Self) -> Relation;
}