use linsel::{CreateRangeError, ParseRangeError, Range, RangeElement};
#[test]
fn create_simple_range() {
let _ = Range::new(1, 1, 1);
}
#[test]
fn inverted_bounds_error() {
let result = Range::new(2, 1, 1);
assert_eq!(result, Err(CreateRangeError::InvertedBounds(2, 1)));
}
#[test]
fn zero_step_error() {
let result = Range::new(1, 1, 0);
assert_eq!(result, Err(CreateRangeError::NonPositiveStep(0)));
}
#[test]
fn length_one_range_contains_value() {
let result = Range::new(1, 1, 1).unwrap();
assert!(result.contains(1));
}
#[test]
fn length_two_range_contains_start() {
let result = Range::new(1, 2, 1).unwrap();
assert!(result.contains(1));
}
#[test]
fn length_two_range_contains_end() {
let result = Range::new(1, 2, 1).unwrap();
assert!(result.contains(2));
}
#[test]
fn range_contains_start() {
let result = Range::new(1, 10, 1).unwrap();
assert!(result.contains(1));
}
#[test]
fn range_contains_end() {
let result = Range::new(1, 10, 1).unwrap();
assert!(result.contains(10));
}
#[test]
fn range_contains_interior_value() {
let result = Range::new(1, 10, 1).unwrap();
assert!(result.contains(5));
}
#[test]
fn range_does_not_contain_value_before_start() {
let result = Range::new(2, 10, 1).unwrap();
assert!(!result.contains(1));
}
#[test]
fn range_does_not_contain_value_before_end() {
let result = Range::new(2, 10, 1).unwrap();
assert!(!result.contains(11));
}
#[test]
fn length_one_range_with_non_unit_step_contains_value() {
let result = Range::new(1, 1, 2).unwrap();
assert!(result.contains(1));
}
#[test]
fn length_two_range_with_non_unit_step_contains_start() {
let result = Range::new(1, 2, 2).unwrap();
assert!(result.contains(1));
}
#[test]
fn length_two_range_with_non_unit_step_contains_end() {
let result = Range::new(1, 2, 2).unwrap();
assert!(!result.contains(2));
}
#[test]
fn range_with_non_unit_step_contains_start() {
let result = Range::new(1, 9, 2).unwrap();
assert!(result.contains(1));
}
#[test]
fn range_with_non_unit_step_contains_end() {
let result = Range::new(1, 9, 2).unwrap();
assert!(result.contains(9));
}
#[test]
fn one() {
let result = "1".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, 1, 1).unwrap());
}
#[test]
fn u32max() {
let result = "4294967296".parse::<Range>().unwrap();
assert_eq!(result, Range::new(4294967296, 4294967296, 1).unwrap());
}
#[test]
fn i32max() {
let result = "2147483648".parse::<Range>().unwrap();
assert_eq!(result, Range::new(2147483648, 2147483648, 1).unwrap());
}
#[test]
fn zero() {
let result = "0".parse::<Range>().unwrap();
assert_eq!(result, Range::new(0, 0, 1).unwrap());
}
#[test]
fn empty_input() {
let result = "".parse::<Range>();
assert_eq!(result, Err(ParseRangeError::EmptyString))
}
#[test]
fn simple_range() {
let result = "1-10".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, 10, 1).unwrap());
}
#[test]
fn range_without_start() {
let result = "-10".parse::<Range>().unwrap();
assert_eq!(result, Range::new(RangeElement::MIN, 10, 1).unwrap());
}
#[test]
fn range_without_end() {
let result = "1-".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, RangeElement::MAX, 1).unwrap());
}
#[test]
fn large_range() {
let result = "1-2147483648".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, 2147483648, 1).unwrap());
}
#[test]
fn range_with_step() {
let result = "1-100/10".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, 100, 10).unwrap());
}
#[test]
fn range_without_start_with_step() {
let result = "-10/2".parse::<Range>().unwrap();
assert_eq!(result, Range::new(RangeElement::MIN, 10, 2).unwrap());
}
#[test]
fn range_without_end_with_step() {
let result = "1-/2".parse::<Range>().unwrap();
assert_eq!(result, Range::new(1, RangeElement::MAX, 2).unwrap());
}