extern crate nonogram;
extern crate ndarray;
use nonogram::Nonogram;
use ndarray::{arr1, arr2};
#[test]
fn random_generation_works() {
let puzzle1 = Nonogram::generate(15, 15);
let puzzle2 = Nonogram::generate(15, 15);
let puzzle3 = Nonogram::generate(15, 15);
assert_ne!(puzzle1.generate_checksum(), puzzle2.generate_checksum());
assert_ne!(puzzle2.generate_checksum(), puzzle3.generate_checksum());
assert_ne!(puzzle1.generate_checksum(), puzzle3.generate_checksum());
}
#[test]
fn mismatched_dimensions_work() {
let puzzle1 = Nonogram::generate(5, 10).solvable();
let puzzle2 = Nonogram::generate(15, 5).solvable();
let puzzle3 = Nonogram::generate(10, 20).solvable();
assert!(puzzle1 || !puzzle1);
assert!(puzzle2 || !puzzle2);
assert!(puzzle3 || !puzzle3);
}
#[test]
fn detects_not_solvable() {
let puzzle = Nonogram {
row_segments: arr1(&[vec![], vec![1], vec![], vec![1], vec![]]),
column_segments: arr1(&[vec![], vec![1], vec![], vec![1], vec![]]),
completed_grid: arr2(&[
[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 0],
]),
};
assert!(!puzzle.solvable())
}
#[test]
fn detects_solvable() {
let puzzle = Nonogram {
row_segments: arr1(&[vec![], vec![1, 1], vec![], vec![1, 1], vec![]]),
column_segments: arr1(&[vec![], vec![1, 1], vec![], vec![1, 1], vec![]]),
completed_grid: arr2(&[
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
]),
};
assert!(puzzle.solvable())
}