use optimization_tools::*;
use sudoku::*;
use optimization::*;
use test_tools::prelude::*;
use deterministic_rand::Seed;
mod tools;
use tools::*;
#[ test ]
fn person_mutate()
{
logger_init();
let initial = SudokuInitial::new( Board::default(), Seed::default() );
let person = SudokuPerson::new( &initial );
log::trace!( "{person:#?}" );
a_id!( person.cost, 45.into() );
a_id!( person.cost, person.board.total_error().into() );
let mutagen = person.mutagen( &initial, initial.hrng.clone() );
a_id!( BlockIndex::from( mutagen.cell1 ), BlockIndex::from( mutagen.cell2 ) );
let person2 = person.mutate( &initial, &mutagen );
log::trace!( "{person2:#?}" );
a_id!( person2.cost, 48.into() );
a_id!( person2.cost, person2.board.total_error().into() );
let mutagen = person2.mutagen( &initial, initial.hrng.clone() );
a_id!( BlockIndex::from( mutagen.cell1 ), BlockIndex::from( mutagen.cell2 ) );
let person3 = person2.mutate( &initial, &mutagen );
log::trace!( "{person3:#?}" );
a_id!( person3.cost, 48.into() );
a_id!( person3.cost, person3.board.total_error().into() );
}
#[ test ]
fn initial_temperature()
{
logger_init();
let initial = SudokuInitial::new( Board::default(), Seed::default() );
let temperature = initial.initial_temperature();
a_true!( temperature.unwrap() >= 0f64 );
a_id!( temperature, 1.591644851508443.into() );
}
#[ cfg( feature = "rapidity_6" ) ]
#[ test ]
fn solve_with_sa()
{
logger_init();
log::set_max_level( log::LevelFilter::Warn );
let seed : Seed = "seed3".into();
let initial = SudokuInitial::new( Board::default(), seed );
log::set_max_level( log::LevelFilter::max() );
let ( reason, generation ) = initial.solve_with_sa();
log::trace!( "reason : {reason}" );
a_true!( generation.is_some() );
let generation = generation.unwrap();
log::trace!( "{generation:#?}" );
log::trace!( "{:#?}", generation.person.board );
a_id!( generation.person.cost, 0.into() );
}