use ms_toollib::{
cal_all_solution, cal_probability_cells_is_op, cal_probability_cells_not_mine,
cal_probability_csp, cal_probability_enum, cal_probability_onboard, mark_board,
};
// https://github.com/xienaoban/minesweeper/issues/3
// 测试概率算法的速度。
#[test]
fn board_1_works() {
let board = vec![
vec![ 2, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 1],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![ 3, 10, 4, 10, 4, 10, 4, 10, 4, 10, 4, 10, 4, 10, 4, 10, 4, 10, 4, 10, 1],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![ 3, 10, 4, 10, 4, 10, 4, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
vec![10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
];
// 0.79s
// ([((1, 20), 0.071438566783525), ((3, 19), 0.22767003533700023), ((3, 6), 0.35219557540121665), ((2, 13), 0.46118197399551963), ((1, 2), 0.4517278981858665), ((3, 15), 0.39197084660536863), ((2, 5), 0.4578297823241066), ((2, 1), 0.5156682478900149), ((2, 7), 0.4250576215633725), ((3, 14), 0.4096542439594872), ((3, 10), 0.3741812713509104), ((1, 15), 0.6489250836329516), ((1, 3), 0.6598726670637798), ((3, 13), 0.46118197399551963), ((3, 18), 0.5626859547015977), ((1, 17), 0.7818548405839069), ((2, 17), 0.5363224272865038), ((0, 9), 0.5457310248479632), ((1, 19), 0.4100252051509631), ((1, 12), 0.489144397081052), ((2, 3), 0.4000729109216832), ((0, 7), 0.5738686778090173), ((0, 1), 0.5533700635674614), ((1, 11), 0.6856039390924539), ((0, 3), 0.5747833778710061), ((2, 19), 0.22767003533700023), ((3, 8), 0.37244647195881203), ((2, 9), 0.44851899378571164), ((3, 20), 0.06319615739151148), ((3, 3), 0.4000729109216832), ((0, 19), 0.5185362280655119), ((3, 11), 0.42382856894247334), ((0, 15), 0.5696791150128876), ((3, 12), 0.34940505623170737), ((1, 14), 0.5292895094869838), ((0, 11), 0.5731453719593173), ((1, 0), 0.6863839431206523), ((1, 8), 0.4992519106223285), ((1, 10), 0.5015476135910951), ((3, 5), 0.4578297823241066), ((3, 4), 0.4030796967465842), ((3, 7), 0.4250576215633725), ((3, 1), 0.5156682478900149), ((3, 0), 0.5220335677874319), ((1, 13), 0.705825521718801), ((1, 5), 0.7014022512720076), ((1, 9), 0.6939720505091707), ((2, 11), 0.42382856894247334), ((2, 15), 0.39197084660536863), ((1, 7), 0.6871763362115204), ((1, 6), 0.4934510293402971), ((1, 18), 0.7174490743165243), ((3, 17), 0.5363224272865038), ((3, 16), 0.2852272191122365), ((3, 9), 0.44851899378571164), ((1, 1), 0.7602459933118861), ((0, 17), 0.5721346518830938), ((1, 16), 0.4274063088871601), ((0, 13), 0.5462807701483761), ((1, 4), 0.519839998426049), ((3, 2), 0.29667112381507166), ((0, 5), 0.5441017053671576)], 0.3550755215818981, [25, 75, 166], 62)
let ans = cal_probability_csp(&board, 75.0).unwrap();
println!("{:?}", ans);
// assert_eq!(ans.2, [25, 75, 166]);
// 17.98s
// let ans = cal_probability_enum(&board, 75.0).unwrap();
// println!("{:?}", ans);
// assert_eq!(ans.2, [25, 75, 166]);
}