@@ -201,6 +201,8 @@ impl<'a> Search<'a> {
201
201
ply : Ply ,
202
202
) -> Result < Pv < N > , Interrupted > {
203
203
self . ctrl . interrupted ( ) ?;
204
+
205
+ ( ply > 0 ) . assume ( ) ;
204
206
let ( alpha, beta) = match pos. outcome ( ) {
205
207
None => self . mdp ( ply, & bounds) ,
206
208
Some ( o) if o. is_draw ( ) => return Ok ( Pv :: empty ( Score :: new ( 0 ) ) ) ,
@@ -514,7 +516,7 @@ impl Engine {
514
516
} ;
515
517
516
518
let time_left = clock. saturating_sub ( * inc) ;
517
- let moves_left = 280 / pos. fullmoves ( ) . get ( ) . min ( 40 ) ;
519
+ let moves_left = 256 / pos. fullmoves ( ) . get ( ) . min ( 64 ) ;
518
520
let time_per_move = inc. saturating_add ( time_left / moves_left) ;
519
521
time_per_move / 2 ..time_per_move
520
522
}
@@ -544,7 +546,6 @@ impl Engine {
544
546
#[ cfg( test) ]
545
547
mod tests {
546
548
use super :: * ;
547
- use crate :: chess:: Outcome ;
548
549
use proptest:: { prop_assume, sample:: Selector } ;
549
550
use test_strategy:: proptest;
550
551
@@ -563,7 +564,7 @@ mod tests {
563
564
#[ filter( #pos. outcome( ) . is_none( ) ) ] pos : Evaluator ,
564
565
#[ filter( ( Value :: lower( ) ..Value :: upper( ) ) . contains( & #b) ) ] b : Score ,
565
566
d : Depth ,
566
- #[ filter( #p >= 0 ) ] p : Ply ,
567
+ #[ filter( #p > 0 ) ] p : Ply ,
567
568
#[ filter( #s. mate( ) . is_none( ) && #s >= #b) ] s : Score ,
568
569
#[ map( |s: Selector | s. select( #pos. moves( ) . flatten( ) ) ) ] m : Move ,
569
570
) {
@@ -581,7 +582,7 @@ mod tests {
581
582
#[ filter( #pos. outcome( ) . is_none( ) ) ] pos : Evaluator ,
582
583
#[ filter( ( Value :: lower( ) ..Value :: upper( ) ) . contains( & #b) ) ] b : Score ,
583
584
d : Depth ,
584
- #[ filter( #p >= 0 ) ] p : Ply ,
585
+ #[ filter( #p > 0 ) ] p : Ply ,
585
586
#[ filter( #s. mate( ) . is_none( ) && #s < #b) ] s : Score ,
586
587
#[ map( |s: Selector | s. select( #pos. moves( ) . flatten( ) ) ) ] m : Move ,
587
588
) {
@@ -599,7 +600,7 @@ mod tests {
599
600
#[ filter( #pos. outcome( ) . is_none( ) ) ] pos : Evaluator ,
600
601
#[ filter( ( Value :: lower( ) ..Value :: upper( ) ) . contains( & #b) ) ] b : Score ,
601
602
d : Depth ,
602
- #[ filter( #p >= 0 ) ] p : Ply ,
603
+ #[ filter( #p > 0 ) ] p : Ply ,
603
604
#[ filter( #s. mate( ) . is_none( ) ) ] s : Score ,
604
605
#[ map( |s: Selector | s. select( #pos. moves( ) . flatten( ) ) ) ] m : Move ,
605
606
) {
@@ -678,7 +679,7 @@ mod tests {
678
679
#[ filter( #pos. outcome( ) . is_some_and( |o| o. is_draw( ) ) ) ] pos : Evaluator ,
679
680
#[ filter( !#b. is_empty( ) ) ] b : Range < Score > ,
680
681
d : Depth ,
681
- #[ filter( #p > 0 || #pos . outcome ( ) != Some ( Outcome :: DrawByThreefoldRepetition ) ) ] p : Ply ,
682
+ #[ filter( #p > 0 ) ] p : Ply ,
682
683
) {
683
684
let mut search = Search :: new ( & e, Control :: Unlimited ) ;
684
685
0 commit comments