#![allow(clippy::single_range_in_vec_init)]
use crate::normalize::paving::*;
#[test]
fn test_dim2() {
let grid_empty: Paving2D<i32, i32, bool> = Paving2D::default();
let mut grid_1 = grid_empty.clone();
grid_1.set(
&EmptyPavingSelector
.dim_front::<i32>([1..5])
.dim_front::<i32>([3..6]),
&true,
);
assert_ne!(grid_empty, grid_1);
let mut grid_2 = grid_empty.clone();
grid_2.set(
&EmptyPavingSelector.dim_front([1..4]).dim_front([3..4]),
&true,
);
grid_2.set(
&EmptyPavingSelector.dim_front([2..5]).dim_front([3..4]),
&true,
);
grid_2.set(
&EmptyPavingSelector.dim_front([1..5]).dim_front([4..6]),
&true,
);
assert_eq!(grid_1, grid_2);
}
#[test]
fn test_pop_trivial() {
let grid_empty = Paving2D::default();
let mut grid = grid_empty.clone();
grid.set(
&EmptyPavingSelector.dim_front([1..4]).dim_front([3..4]),
&true,
);
grid.set(
&EmptyPavingSelector.dim_front([2..5]).dim_front([3..4]),
&true,
);
grid.set(
&EmptyPavingSelector.dim_front([1..5]).dim_front([4..6]),
&true,
);
assert_eq!(
grid.pop_filter(|x| *x).unwrap().1,
EmptyPavingSelector.dim_front([1..5]).dim_front([3..6]),
);
assert_eq!(grid, grid_empty);
assert_eq!(grid.pop_filter(|x| *x), None);
}
#[test]
fn test_pop_disjoint() {
let grid_empty = Paving2D::default();
let mut grid = grid_empty.clone();
grid.set(
&EmptyPavingSelector
.dim_front([1..2, 4..7])
.dim_front([3..6]),
&true,
);
assert_eq!(
grid.pop_filter(|x| *x).unwrap().1,
EmptyPavingSelector
.dim_front([1..2, 4..7])
.dim_front([3..6]),
);
assert_eq!(grid, grid_empty);
assert_eq!(grid.pop_filter(|x| *x), None);
}
#[test]
fn test_is_val_at_border() {
let mut grid = Paving1D::default();
grid.set(&EmptyPavingSelector.dim_front([1..2, 3..4]), &true);
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([0..2]), &true));
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([0..2]), &false));
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([2..4]), &true));
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([2..4]), &false));
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([3..5]), &true));
assert!(!grid.is_val(&EmptyPavingSelector.dim_front([3..5]), &false));
}
#[test]
fn test_debug() {
let mut grid = Paving2D::default();
grid.set(
&EmptyPavingSelector
.dim_front([1..2, 4..7])
.dim_front([3..6]),
&true,
);
assert_eq!(format!("{grid:?}"), "Dim { 3..6: Dim { 1..2: Cell { inner: true }, 2..4: Cell { inner: false }, 4..7: Cell { inner: true } } }")
}