diff --git a/Cargo.lock b/Cargo.lock index 238efc3..bed7c0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -89,6 +89,7 @@ dependencies = [ name = "chessfriend_core" version = "0.1.0" dependencies = [ + "rand", "thiserror", ] @@ -222,6 +223,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi", +] + [[package]] name = "heck" version = "0.4.1" @@ -239,9 +252,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.152" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "linux-raw-sys" @@ -281,6 +294,15 @@ dependencies = [ "libc", ] +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.95" @@ -299,6 +321,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radix_trie" version = "0.2.1" @@ -309,6 +337,35 @@ dependencies = [ "nibble_vec", ] +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + [[package]] name = "rustix" version = "0.38.30" @@ -417,6 +474,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "winapi" version = "0.3.9" @@ -504,3 +570,32 @@ name = "windows_x86_64_msvc" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] +name = "zerocopy" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/core/Cargo.toml b/core/Cargo.toml index 0905978..26d0835 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,4 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +rand = "0.9.1" thiserror = "2" diff --git a/core/src/lib.rs b/core/src/lib.rs index 6edd924..dcb42a2 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -3,6 +3,7 @@ pub mod colors; pub mod coordinates; pub mod pieces; +pub mod random; pub mod shapes; mod macros; diff --git a/core/src/random.rs b/core/src/random.rs new file mode 100644 index 0000000..29b357c --- /dev/null +++ b/core/src/random.rs @@ -0,0 +1,44 @@ +// Eryn Wells + +use rand::{rngs::StdRng, RngCore, SeedableRng}; + +pub struct RandomNumberGenerator { + rng: StdRng, +} + +impl RandomNumberGenerator { + /// A default value for hashing chess games. + /// + /// This value is the SHA-256 hash of a PGN I downloaded from the internet + /// of the six games Kasparov played against Deep Blue in 1996. + #[rustfmt::skip] + const DEFAULT_SEED_VALUE: [u8; 32] = [ + 0x22, 0x0b, 0xae, 0xd5, 0xc5, 0xb8, 0x20, 0xb1, + 0xee, 0x05, 0x4b, 0x72, 0x73, 0x4c, 0x1a, 0xf9, + 0xc2, 0xb7, 0x5d, 0x87, 0xc8, 0xa9, 0x44, 0x87, + 0x01, 0xda, 0xdb, 0xe0, 0x8e, 0xf8, 0xe8, 0x77, + ]; + + #[must_use] + pub fn new(seed: ::Seed) -> Self { + let rng = StdRng::from_seed(seed); + + Self { rng } + } + + #[must_use] + pub fn rand(&mut self) -> &mut StdRng { + &mut self.rng + } + + pub fn next_u64(&mut self) -> u64 { + self.rng.next_u64() + } +} + +impl Default for RandomNumberGenerator { + fn default() -> Self { + let rng = StdRng::from_seed(Self::DEFAULT_SEED_VALUE); + Self { rng } + } +}