pub struct IntRange {
pub a: i32,
pub b: i32
}
impl IntRange {
pub fn size_closed(&self) -> i32 { self.b - self.a + 1}
pub fn includes(&self, value: i32) -> bool { value >= self.a && value <= self.b }
}
pub struct RealRange {
pub a: f64,
pub b: f64
}
#[cfg(test)]
mod tests {
use crate::core::IntRange;
#[test]
fn test_size() {
assert_eq!(IntRange {
a: 0,
b: 0
}.size_closed(), 1);
assert_eq!(IntRange {
a: 0,
b: 6
}.size_closed(), 7);
}
#[test]
fn test_includes() {
assert!(IntRange {
a: 5,
b: 19
}.includes(10));
assert!(IntRange {
a: 5,
b: 19
}.includes(19));
assert!(IntRange {
a: 5,
b: 19
}.includes(5));
assert!(!IntRange {
a: 5,
b: 19
}.includes(20));
assert!(!IntRange {
a: 5,
b: 19
}.includes(4));
assert!(IntRange {
a: -5,
b: 5
}.includes(4));
assert!(!IntRange {
a: -5,
b: 5
}.includes(-6));
}
}