use crate::{grid::Grid, pos::Size};
use super::StyledChar;
macro_rules! test_resize_4x4 {
($($name:ident: ($x:literal, $y:literal) => [$([$($ch:literal),*]),* $(,)?]),* $(,)?) => { $(
#[test]
fn $name() {
const VALS: &str = "1234abcd!@#$ABCD";
let mut start = Grid::<StyledChar>::new(Size::rnew(4, 4));
assert_eq!(start.all_cells().len(), 16, "initial size is scuffed");
for (cell, val) in start.all_cells().iter_mut().zip(VALS.chars()) {
cell.char = val;
}
start.resize(Size::rnew($x, $y));
let mut rows = start.rows();
let mut i = 0;
$({
println!("row = {i}");
let row = rows.next().expect("row doesn't exist");
let chars = row.iter().map(|sc| sc.char).collect::<Vec<_>>();
assert_eq!(&chars, &[$($ch),*], "row is wrong");
#[allow(unused_assignments)]
{
i += 1;
}
})*
assert!(rows.next().is_none(), "expected fewer rows");
}
)* }
}
test_resize_4x4! {
no_change: (4, 4) => [
['1', '2', '3', '4'],
['a', 'b', 'c', 'd'],
['!', '@', '#', '$'],
['A', 'B', 'C', 'D'],
],
lose_1_col: (3, 4) => [
['1', '2', '3'],
['a', 'b', 'c'],
['!', '@', '#'],
['A', 'B', 'C'],
],
gain_1_col: (5, 4) => [
['1', '2', '3', '4', ' '],
['a', 'b', 'c', 'd', ' '],
['!', '@', '#', '$', ' '],
['A', 'B', 'C', 'D', ' '],
],
lose_1_row: (4, 3) => [
['1', '2', '3', '4'],
['a', 'b', 'c', 'd'],
['!', '@', '#', '$'],
],
gain_1_row: (4, 5) => [
['1', '2', '3', '4'],
['a', 'b', 'c', 'd'],
['!', '@', '#', '$'],
['A', 'B', 'C', 'D'],
[' ', ' ', ' ', ' '],
],
lose_2_col: (2, 4) => [
['1', '2'],
['a', 'b'],
['!', '@'],
['A', 'B'],
],
gain_2_col: (6, 4) => [
['1', '2', '3', '4', ' ', ' '],
['a', 'b', 'c', 'd', ' ', ' '],
['!', '@', '#', '$', ' ', ' '],
['A', 'B', 'C', 'D', ' ', ' '],
],
lose_2_row: (4, 2) => [
['1', '2', '3', '4'],
['a', 'b', 'c', 'd'],
],
gain_2_row: (4, 6) => [
['1', '2', '3', '4'],
['a', 'b', 'c', 'd'],
['!', '@', '#', '$'],
['A', 'B', 'C', 'D'],
[' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' '],
],
gain_row_lose_col: (3, 5) => [
['1', '2', '3'],
['a', 'b', 'c'],
['!', '@', '#'],
['A', 'B', 'C'],
[' ', ' ', ' '],
],
lose_row_gain_col: (5, 3) => [
['1', '2', '3', '4', ' '],
['a', 'b', 'c', 'd', ' '],
['!', '@', '#', '$', ' '],
],
gain_row_gain_col: (5, 5) => [
['1', '2', '3', '4', ' '],
['a', 'b', 'c', 'd', ' '],
['!', '@', '#', '$', ' '],
['A', 'B', 'C', 'D', ' '],
[' ', ' ', ' ', ' ', ' '],
],
lose_row_lose_col: (3, 3) => [
['1', '2', '3'],
['a', 'b', 'c'],
['!', '@', '#'],
],
}