use systile::{Geometry, PaddedTileLattice};
#[test]
fn all_zero_tile_is_detected() {
let l = PaddedTileLattice::<f32>::zeroed(2, 2, Geometry::TINY).unwrap();
assert!(l.is_tile_zero(0, 0));
}
#[test]
fn nonzero_tile_is_not_zero() {
let mut l = PaddedTileLattice::<f32>::zeroed(2, 2, Geometry::TINY).unwrap();
l.set(0, 0, 1.0).unwrap();
assert!(!l.is_tile_zero(0, 0));
}
#[test]
fn count_zero_tiles_on_empty() {
let l = PaddedTileLattice::<f32>::zeroed(4, 8, Geometry::TINY).unwrap();
assert_eq!(l.count_zero_tiles(), l.num_tiles());
}
#[test]
fn diagonal_leaves_off_diagonal_tiles_zero() {
let n = 8;
let mut l = PaddedTileLattice::<f32>::zeroed(n, n, Geometry::TINY).unwrap();
for i in 0..n {
l.set(i, i, 1.0).unwrap();
}
assert!(l.count_zero_tiles() < l.num_tiles());
assert!(l.count_zero_tiles() > 0);
}
#[test]
fn nonzero_coords_match_live_tiles() {
let mut l = PaddedTileLattice::<f32>::zeroed(4, 8, Geometry::TINY).unwrap();
l.set(0, 0, 1.0).unwrap();
let coords = l.nonzero_tile_coords();
assert_eq!(coords, vec![(0, 0)]);
}
#[test]
fn sparsity_is_fraction_of_zero_tiles() {
let mut l = PaddedTileLattice::<f32>::zeroed(4, 8, Geometry::TINY).unwrap();
l.set(0, 0, 1.0).unwrap();
let total = l.num_tiles() as f64;
let expected = (total - 1.0) / total;
assert!((l.tile_sparsity() - expected).abs() < 1e-9);
}
#[test]
fn density_complements_sparsity() {
let mut l = PaddedTileLattice::<f32>::zeroed(4, 8, Geometry::TINY).unwrap();
l.set(0, 0, 1.0).unwrap();
assert!((l.tile_density() + l.tile_sparsity() - 1.0).abs() < 1e-9);
}
#[test]
fn fully_dense_has_zero_sparsity() {
let l = PaddedTileLattice::from_dense(2, 4, &[1.0; 8], Geometry::TINY).unwrap();
assert_eq!(l.tile_sparsity(), 0.0);
}