Skip to content

Commit aabfa49

Browse files
committed
#194 - Implement an alternative seed source via js-sys crate for WASM random numbers.
1 parent 77e0277 commit aabfa49

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

bracket-random/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ lazy_static = { version = "1.4.0", optional = true }
2626
serde_crate = { version = "~1.0.110", features = ["derive"], optional = true, package = "serde" }
2727
rand = { version = "0.8.3", default-features = false }
2828

29+
[target.wasm32-unknown-unknown.dependencies]
30+
js-sys = "0.3.47"
31+
2932
[dev-dependencies]
3033
criterion = "0.3.4"
3134
serde_json = "~1.0"

bracket-random/src/random.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ use rand_xorshift::XorShiftRng;
66
#[cfg(feature = "serde")]
77
use serde_crate::{Deserialize, Serialize};
88

9+
10+
#[cfg(target_arch = "wasm32")]
11+
fn unix_now() -> f64 {
12+
js_sys::Date::now()
13+
}
14+
915
#[derive(Clone)]
1016
#[cfg_attr(
1117
feature = "serde",
@@ -19,6 +25,7 @@ pub struct RandomNumberGenerator {
1925
impl RandomNumberGenerator {
2026
/// Creates a new RNG from a randomly generated seed
2127
#[allow(clippy::new_without_default)] // XorShiftRng doesn't have a Default, so we don't either
28+
#[cfg(not(target_arch = "wasm32"))]
2229
pub fn new() -> RandomNumberGenerator {
2330
use std::time::{SystemTime, UNIX_EPOCH};
2431
let rng: XorShiftRng = SeedableRng::seed_from_u64(
@@ -30,6 +37,15 @@ impl RandomNumberGenerator {
3037
RandomNumberGenerator { rng }
3138
}
3239

40+
#[cfg(target_arch = "wasm32")]
41+
#[allow(clippy::new_without_default)] // XorShiftRng doesn't have a Default, so we don't either
42+
pub fn new() -> RandomNumberGenerator {
43+
let rng: XorShiftRng = SeedableRng::seed_from_u64(
44+
unix_now() as u64
45+
);
46+
RandomNumberGenerator { rng }
47+
}
48+
3349
/// Creates a new RNG from a specific seed
3450
pub fn seeded(seed: u64) -> RandomNumberGenerator {
3551
let rng: XorShiftRng = SeedableRng::seed_from_u64(seed);

0 commit comments

Comments
 (0)