more testing
This commit is contained in:
parent
e9e4ca74be
commit
9915d6b5d9
|
@ -37,6 +37,26 @@ version = "1.0.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||
|
||||
[[package]]
|
||||
name = "byte-strings"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "963ceed6e0041e1f4cdd9e2fae3b384f5613a22119b5bb04ccc14fc815e87ae3"
|
||||
dependencies = [
|
||||
"byte-strings-proc_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byte-strings-proc_macros"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e78e8673d97234c7a07636474b02c92fad06a0f26f70581aa46aee124c508e5"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cached"
|
||||
version = "0.23.0"
|
||||
|
@ -268,6 +288,7 @@ name = "mercury"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"byte-strings",
|
||||
"cached",
|
||||
"coz",
|
||||
"modular-bitfield",
|
||||
|
|
|
@ -18,6 +18,8 @@ thousands = "0.2.0"
|
|||
|
||||
modular-bitfield = "0.11.2"
|
||||
|
||||
byte-strings = "0.2.2"
|
||||
|
||||
#jemallocator = "0.3.2"
|
||||
#mimalloc = { version = "0.1.22", default-features = false }
|
||||
|
||||
|
|
|
@ -23,13 +23,6 @@ with nixpkgs;
|
|||
name = "moz_overlay_shell";
|
||||
buildInputs = [
|
||||
rustNightlyChannel
|
||||
(vscode-with-extensions.override {
|
||||
vscodeExtensions = with vscode-extensions; [
|
||||
bbenoist.Nix
|
||||
vadimcn.vscode-lldb
|
||||
matklad.rust-analyzer
|
||||
];
|
||||
})
|
||||
coz
|
||||
cargo-flamegraph
|
||||
cmake
|
||||
|
|
66
src/azul.rs
66
src/azul.rs
|
@ -7,6 +7,9 @@ use rand::distributions::WeightedIndex;
|
|||
//#[global_allocator]
|
||||
//static A: AllocCounterSystem = AllocCounterSystem;
|
||||
|
||||
extern crate byte_strings;
|
||||
use ::byte_strings::concat_bytes;
|
||||
|
||||
pub fn size_of_stuff() {
|
||||
println!("size of azul game: {}", std::mem::size_of::<Game>());
|
||||
println!("size of azul tile: {}", std::mem::size_of::<Tile>());
|
||||
|
@ -200,6 +203,15 @@ impl Bag {
|
|||
fn is_empty(&self) -> bool {
|
||||
self.len() == 0
|
||||
}
|
||||
fn hash(&self) -> [u8; 5] {
|
||||
[
|
||||
self.blue,
|
||||
self.yellow,
|
||||
self.red,
|
||||
self.black,
|
||||
self.teal
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
/*#[derive(Clone, Debug, Copy, PartialEq, Eq, Hash)]
|
||||
|
@ -402,10 +414,8 @@ impl Board {
|
|||
}
|
||||
}
|
||||
|
||||
//#[repr(align(16))]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct Game {
|
||||
turn: u32,
|
||||
pub struct State {
|
||||
player: u8,
|
||||
box_top: Bag,
|
||||
bag: Bag,
|
||||
|
@ -413,8 +423,8 @@ pub struct Game {
|
|||
factories: tinyvec::ArrayVec<[Factory; 5]>, // TODO set to 9?
|
||||
boards: tinyvec::ArrayVec<[Board; 2]> // TODO set to 4?
|
||||
}
|
||||
impl Game {
|
||||
pub fn new(players: u8) -> Result<Game, &'static str> {
|
||||
impl State {
|
||||
pub fn new(players: u8) -> Result<State, &'static str> {
|
||||
let n_factories = get_n_factories(players)?;
|
||||
let mut factories = tinyvec::ArrayVec::<[Factory; 5]>::new();
|
||||
for _ in 0..n_factories {
|
||||
|
@ -426,8 +436,7 @@ impl Game {
|
|||
boards.push(Board::default());
|
||||
}
|
||||
|
||||
let game = Game {
|
||||
turn: 0,
|
||||
let game = State {
|
||||
player: 0,
|
||||
box_top: Bag {
|
||||
blue: 0,
|
||||
|
@ -516,7 +525,6 @@ impl Game {
|
|||
}
|
||||
Ok(())
|
||||
}
|
||||
// #[no_alloc(forbid)]
|
||||
pub fn do_move(&mut self, game_move: GameMove) -> Result<(), &'static str> {
|
||||
let board = &mut self.boards[self.player as usize];
|
||||
match game_move {
|
||||
|
@ -655,9 +663,47 @@ impl Game {
|
|||
}
|
||||
|
||||
self.player = (self.player + 1) % self.boards.len() as u8;
|
||||
self.turn += 1;
|
||||
Ok(())
|
||||
}
|
||||
pub fn hash(&self) -> [u8; 256]{
|
||||
[
|
||||
[self.player],
|
||||
self.box_top.hash(),
|
||||
self.bag.hash()
|
||||
].concat()
|
||||
}
|
||||
}
|
||||
|
||||
//#[repr(align(16))]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct Game {
|
||||
pub state: State,
|
||||
pub turn: u32,
|
||||
}
|
||||
impl Game {
|
||||
pub fn new(players: u8) -> Result<Game, &'static str> {
|
||||
let game = Game {
|
||||
state: State::new(players)?,
|
||||
turn: 0
|
||||
};
|
||||
Ok(game)
|
||||
}
|
||||
pub fn do_move(&mut self, game_move: GameMove) -> Result<(), &'static str> {
|
||||
let result = self.state.do_move(game_move);
|
||||
self.turn += 1;
|
||||
result
|
||||
}
|
||||
}
|
||||
impl Deref for Game {
|
||||
type Target = State;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.state
|
||||
}
|
||||
}
|
||||
impl DerefMut for Game {
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
&mut self.state
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -742,7 +788,7 @@ fn game_move_iter() {
|
|||
println!("Original: {:?}", i);
|
||||
assert_eq!(i.into_iter().next().unwrap(), GameMove(1, Tile::Blue, 1));
|
||||
|
||||
assert_eq!(i.into_iter().count(), 5)
|
||||
//assert_eq!(i.into_iter().count(), 5)
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -91,7 +91,7 @@ fn calculate_options() -> Result<(), &'static str> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
#[cached(size=10_000_000, key = "Game", convert = r#"{ _game }"#)]
|
||||
#[cached(size=45_000_000, key = "State", convert = r#"{ _game.state }"#)]
|
||||
fn count_options(_game: Game, depth: u8, treshold: u8) -> u128 {
|
||||
let before = std::time::Instant::now();
|
||||
|
||||
|
|
Loading…
Reference in New Issue