3 Commits

Author SHA1 Message Date
Quaternions 6bfa05c292 add benchmark 2026-05-18 15:57:53 -07:00
Quaternions da0dfe98c4 update readme 2026-05-18 15:51:17 -07:00
Quaternions b840d56725 use workspace lints 2026-05-18 15:43:32 -07:00
8 changed files with 62 additions and 1 deletions
Generated
+9
View File
@@ -132,6 +132,15 @@ dependencies = [
"rand", "rand",
] ]
[[package]]
name = "klondike-bench"
version = "0.1.0"
dependencies = [
"card_game",
"klondike",
"rand",
]
[[package]] [[package]]
name = "klondike-cli" name = "klondike-cli"
version = "0.1.0" version = "0.1.0"
+1
View File
@@ -2,6 +2,7 @@
members = [ members = [
"card_game", "card_game",
"klondike", "klondike",
"klondike-bench",
"klondike-cli", "klondike-cli",
] ]
resolver = "3" resolver = "3"
+3
View File
@@ -10,3 +10,6 @@ keywords = ["card", "cards", "solitaire", "klondike"]
[dependencies] [dependencies]
arrayvec = "0.7.6" arrayvec = "0.7.6"
[lints]
workspace = true
+12
View File
@@ -0,0 +1,12 @@
[package]
name = "klondike-bench"
version = "0.1.0"
edition = "2024"
[dependencies]
card_game.workspace = true
klondike.workspace = true
rand = { version = "0.10.1", default-features = false }
[lints]
workspace = true
+30
View File
@@ -0,0 +1,30 @@
use card_game::Game;
use klondike::{Klondike, KlondikeConfig, KlondikeStats, Rng};
fn play_to_win(rng: &mut Rng) -> bool {
// create game session
let mut game = Klondike::with_rng(rng);
let mut stats = KlondikeStats::new();
const CONFIG: KlondikeConfig = KlondikeConfig {
draw_stock: klondike::DrawStockConfig::DrawOne,
};
// play game a bit
while let Some(instruction) = game.get_auto_move()
&& !game.is_win()
{
game.process_instruction(&mut stats, &CONFIG, instruction);
// quit after 250 moves
if 250 < stats.moves() {
return false;
}
}
game.is_win()
}
fn main() {
use rand::SeedableRng;
let mut rng = Rng::seed_from_u64(0);
const GAMES: u32 = 10000;
let wins: u32 = (0..GAMES).map(|_| play_to_win(&mut rng) as u32).sum();
println!("wins = {wins}/{GAMES} win_rate = {}%", wins * 100 / GAMES);
}
+3
View File
@@ -7,3 +7,6 @@ edition = "2024"
card_game.workspace = true card_game.workspace = true
klondike.workspace = true klondike.workspace = true
rand = { version = "0.10.1", default-features = false, features = ["thread_rng"] } rand = { version = "0.10.1", default-features = false, features = ["thread_rng"] }
[lints]
workspace = true
+3
View File
@@ -6,3 +6,6 @@ edition = "2024"
[dependencies] [dependencies]
card_game.workspace = true card_game.workspace = true
rand = { version = "0.10.1", default-features = false, features = ["std_rng"] } rand = { version = "0.10.1", default-features = false, features = ["std_rng"] }
[lints]
workspace = true
+1 -1
View File
@@ -6,7 +6,7 @@ Klondike
## Example ## Example
```rust ```rust
use card_game::{Session, Game}; use card_game::Session;
use klondike::Klondike; use klondike::Klondike;
// create game session // create game session