Skip to main content

prophet_sys/
lib.rs

1#![allow(nonstandard_style)]
2
3include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
4
5#[cfg(test)]
6mod tests {
7    use std::ffi::c_int;
8
9    use super::*;
10
11    #[test]
12    fn test_probe() {
13        unsafe {
14            prophet_tb_init();
15
16            // 4k3/8/8/8/8/8/4Q3/4K3 b - - 0 1
17            let pieces: [c_int; 6] = [
18                6,  // white king
19                5,  // white queen
20                14, // black king
21                0,  // no piece
22                0,  // no piece
23                0,  // no piece
24            ];
25            let squares: [c_int; 6] = [
26                4,  // e1
27                12, // e2
28                60, // e8
29                0,  // unused
30                0,  // unused
31                0,  // unused
32            ];
33            let stm = 1; // black to move
34            let ep_square = 64; // no en-passant square
35
36            assert_eq!(
37                prophet_tb_is_valid_position(pieces.as_ptr(), squares.as_ptr(), stm, ep_square),
38                1
39            );
40
41            let dctx = prophet_tb_create_decompress_ctx();
42            let dtm =
43                prophet_tb_probe_dtm_dctx(pieces.as_ptr(), squares.as_ptr(), stm, ep_square, dctx);
44            assert_eq!(dtm, -1001); // no tables added yet
45
46            assert!(11 <= prophet_tb_add_path(c"tables".as_ptr()));
47            let dtm =
48                prophet_tb_probe_dtm_dctx(pieces.as_ptr(), squares.as_ptr(), stm, ep_square, dctx);
49            assert_eq!(dtm, -16);
50
51            prophet_tb_free_decompress_ctx(dctx);
52
53            prophet_tb_deinit();
54        }
55    }
56}