(documentation in progress) This is a multi-language repository, demonstrating C-Rust-Node.js-Web interoperability/portability.
It utilizes Rust as a build system, in order to compile the original C implemetations by Robin Whittle. A faithful Rust port is also included, cross-compilable to asm.js and WebAssembly via Emscripten, for use in Node.js and browsers.
Add with npm i --save --only=production park-miller-carta-prng
.
index.js: ```js let {prng, asmjs, wasm} = require("park-miller-carta-prng"); let assert = require('assert');
// use asm.js version let generator = prng(asmjs)(1);
assert(generator.getInteger() === 16807); generator.destroy();
// use wasm version generator = prng(wasm)(1);
assert(generator.getInteger() === 16807);
generator.destroy();
``
You should always call
destroy()` when you are done using the generator.
Available methods:
prng
, takes either the supplied asmjs
, or wasm
modules, generated by emcc
.
Then, it must be supplied with a positive seed integer.getInteger
, getFloat
and destroy
methods, are self explanatory.Add park-miller-carta-prng
to [dependencies]
in Cargo.toml
main.rs: ```rust extern crate prng; use prng::PRNG;
fn main() { let mut prng = PRNG::new(1); let randomfloat = prng.nextunsignedfloat(); asserteq!(0.000007826369, random_float);
let random_int = prng.next_unsigned_integer();
assert_eq!(282475249, random_int);
} ```
git clone https://github.com/kenOfYugen/park-miller-carta-prng
cd park-miller-carta-prng
--release
flag for optimized builds)
cargo b
cargo b --target asmjs-unknown-emscripten
cargo b --target wasm32-unknown-emscripter
npm i && npm run build:all
emscripten
emscripten
--target wasm32-unknown-unknown