Skip to content

Commit f8fd39d

Browse files
authored
Merge pull request #557 from vks/xorshift-crate
Move `XorShiftRng` to its own crate
2 parents 686ba14 + b846c30 commit f8fd39d

File tree

20 files changed

+391
-42
lines changed

20 files changed

+391
-42
lines changed

.travis.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,25 @@ matrix:
1414
# TODO: use --tests instead of --lib on more recent compiler
1515
- cargo test --lib --no-default-features
1616
- cargo test --package rand_core --no-default-features
17+
- cargo test --package rand_isaac --features serde1
18+
- cargo test --package rand_xorshift --features serde1
1719
- cargo test --features serde1,log
1820
- rust: stable
1921
os: osx
2022
install:
2123
script:
2224
- cargo test --tests --no-default-features
2325
- cargo test --package rand_core --no-default-features
26+
- cargo test --package rand_isaac --features serde1
27+
- cargo test --package rand_xorshift --features serde1
2428
- cargo test --features serde1,log
2529
- rust: beta
2630
install:
2731
script:
2832
- cargo test --tests --no-default-features
2933
- cargo test --package rand_core --no-default-features
34+
- cargo test --package rand_isaac --features serde1
35+
- cargo test --package rand_xorshift --features serde1
3036
- cargo test --features serde1,log
3137
- rust: nightly
3238
install:

Cargo.toml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,17 @@ std = ["rand_core/std", "alloc", "libc", "winapi", "cloudabi", "fuchsia-zircon"]
2424
alloc = ["rand_core/alloc"] # enables Vec and Box support (without std)
2525
i128_support = [] # enables i128 and u128 support
2626
simd_support = [] # enables SIMD support
27-
serde1 = ["serde", "serde_derive", "rand_core/serde1"] # enables serialization for PRNGs
27+
serde1 = ["rand_core/serde1", "rand_isaac/serde1", "rand_xorshift/serde1"] # enables serialization for PRNGs
2828

2929
[workspace]
30-
members = ["rand_core", "rand_isaac"]
30+
members = ["rand_core", "rand_isaac", "rand_xorshift"]
3131

3232
[dependencies]
3333
rand_core = { path = "rand_core", version = "0.2", default-features = false }
3434
# only for deprecations and benches:
35-
rand_isaac = { path = "rand_isaac", version = "0.1", default-features = false }
35+
rand_isaac = { path = "rand_isaac", version = "0.1" }
36+
rand_xorshift = { path = "rand_xorshift", version = "0.1" }
3637
log = { version = "0.4", optional = true }
37-
serde = { version = "1", optional = true }
38-
serde_derive = { version = "1", optional = true }
3938

4039
[target.'cfg(unix)'.dependencies]
4140
libc = { version = "0.2", optional = true }
@@ -54,10 +53,5 @@ fuchsia-zircon = { version = "0.3.2", optional = true }
5453
stdweb = { version = "0.4", optional = true }
5554
wasm-bindgen = { version = "0.2.12", optional = true }
5655

57-
[dev-dependencies]
58-
# This is for testing serde, unfortunately we can't specify feature-gated dev
59-
# deps yet, see: https://github.com/rust-lang/cargo/issues/1596
60-
bincode = "1.0"
61-
6256
[package.metadata.docs.rs]
6357
all-features = true

benches/distributions.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ use std::mem::size_of;
1111
use test::Bencher;
1212

1313
use rand::{Rng, FromEntropy};
14-
use rand::prng::XorShiftRng;
14+
use rand::rngs::SmallRng;
1515
use rand::distributions::*;
1616

1717
macro_rules! distr_int {
1818
($fnn:ident, $ty:ty, $distr:expr) => {
1919
#[bench]
2020
fn $fnn(b: &mut Bencher) {
21-
let mut rng = XorShiftRng::from_entropy();
21+
let mut rng = SmallRng::from_entropy();
2222
let distr = $distr;
2323

2424
b.iter(|| {
@@ -38,7 +38,7 @@ macro_rules! distr_float {
3838
($fnn:ident, $ty:ty, $distr:expr) => {
3939
#[bench]
4040
fn $fnn(b: &mut Bencher) {
41-
let mut rng = XorShiftRng::from_entropy();
41+
let mut rng = SmallRng::from_entropy();
4242
let distr = $distr;
4343

4444
b.iter(|| {
@@ -58,7 +58,7 @@ macro_rules! distr {
5858
($fnn:ident, $ty:ty, $distr:expr) => {
5959
#[bench]
6060
fn $fnn(b: &mut Bencher) {
61-
let mut rng = XorShiftRng::from_entropy();
61+
let mut rng = SmallRng::from_entropy();
6262
let distr = $distr;
6363

6464
b.iter(|| {
@@ -126,7 +126,7 @@ macro_rules! gen_range_int {
126126
($fnn:ident, $ty:ident, $low:expr, $high:expr) => {
127127
#[bench]
128128
fn $fnn(b: &mut Bencher) {
129-
let mut rng = XorShiftRng::from_entropy();
129+
let mut rng = SmallRng::from_entropy();
130130

131131
b.iter(|| {
132132
let mut high = $high;
@@ -155,7 +155,7 @@ macro_rules! gen_range_float {
155155
($fnn:ident, $ty:ident, $low:expr, $high:expr) => {
156156
#[bench]
157157
fn $fnn(b: &mut Bencher) {
158-
let mut rng = XorShiftRng::from_entropy();
158+
let mut rng = SmallRng::from_entropy();
159159

160160
b.iter(|| {
161161
let mut high = $high;
@@ -179,7 +179,7 @@ gen_range_float!(gen_range_f64, f64, 123.456f64, 7890.12);
179179

180180
#[bench]
181181
fn dist_iter(b: &mut Bencher) {
182-
let mut rng = XorShiftRng::from_entropy();
182+
let mut rng = SmallRng::from_entropy();
183183
let distr = Normal::new(-2.71828, 3.14159);
184184
let mut iter = distr.sample_iter(&mut rng);
185185

benches/generators.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
extern crate test;
44
extern crate rand;
55
extern crate rand_isaac;
6+
extern crate rand_xorshift;
67

78
const RAND_BENCH_N: u64 = 1000;
89
const BYTES_LEN: usize = 1024;
@@ -11,11 +12,12 @@ use std::mem::size_of;
1112
use test::{black_box, Bencher};
1213

1314
use rand::prelude::*;
14-
use rand::prng::{XorShiftRng, Hc128Rng, ChaChaRng};
15+
use rand::prng::{Hc128Rng, ChaChaRng};
1516
use rand::prng::hc128::Hc128Core;
1617
use rand::rngs::adapter::ReseedingRng;
1718
use rand::rngs::{OsRng, JitterRng, EntropyRng};
1819
use rand_isaac::{IsaacRng, Isaac64Rng};
20+
use rand_xorshift::XorShiftRng;
1921

2022
macro_rules! gen_bytes {
2123
($fnn:ident, $gen:expr) => {

rand_isaac/Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@ travis-ci = { repository = "rust-lang-nursery/rand" }
1818
appveyor = { repository = "alexcrichton/rand" }
1919

2020
[features]
21-
serde1 = ["serde", "serde_derive"] # enables serde for BlockRng wrapper
21+
serde1 = ["serde", "serde_derive", "rand_core/serde1"]
2222

2323
[dependencies]
2424
rand_core = { path = "../rand_core", version = "0.2", default-features=false }
2525
serde = { version = "1", optional = true }
2626
serde_derive = { version = "^1.0.38", optional = true }
27+
28+
[dev-dependencies]
29+
# This is for testing serde, unfortunately we can't specify feature-gated dev
30+
# deps yet, see: https://github.com/rust-lang/cargo/issues/1596
31+
bincode = "1"

rand_isaac/src/isaac.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ mod test {
453453
}
454454

455455
#[test]
456-
#[cfg(all(feature="serde1", feature="std"))]
456+
#[cfg(feature="serde1")]
457457
fn test_isaac_serde() {
458458
use bincode;
459459
use std::io::{BufWriter, BufReader};

rand_isaac/src/isaac64.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ mod test {
445445
}
446446

447447
#[test]
448-
#[cfg(all(feature="serde1", feature="std"))]
448+
#[cfg(feature="serde1")]
449449
fn test_isaac64_serde() {
450450
use bincode;
451451
use std::io::{BufWriter, BufReader};

rand_isaac/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818
#![deny(missing_debug_implementations)]
1919
#![doc(test(attr(allow(unused_variables), deny(warnings))))]
2020

21-
#![no_std]
21+
#![cfg_attr(not(all(feature="serde1", test)), no_std)]
2222

2323
extern crate rand_core;
2424

25-
#[cfg(test)] #[cfg(feature="serde1")] extern crate bincode;
2625
#[cfg(feature="serde1")] extern crate serde;
2726
#[cfg(feature="serde1")] #[macro_use] extern crate serde_derive;
2827

28+
// To test serialization we need bincode and the standard library
29+
#[cfg(all(feature="serde1", test))] extern crate bincode;
30+
#[cfg(all(feature="serde1", test))] extern crate std as core;
31+
2932
pub mod isaac;
3033
pub mod isaac64;
3134

rand_xorshift/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Changelog
2+
All notable changes to this project will be documented in this file.
3+
4+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6+
7+
## [0.1.0] - 2018-07-16
8+
- Initial release

rand_xorshift/Cargo.toml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
[package]
2+
name = "rand_xorshift"
3+
version = "0.1.0" # NB: When modifying, also modify html_root_url in lib.rs
4+
authors = ["The Rust Project Developers"]
5+
license = "MIT/Apache-2.0"
6+
readme = "README.md"
7+
repository = "https://github.com/rust-lang-nursery/rand"
8+
documentation = "https://docs.rs/rand_isaac"
9+
homepage = "https://crates.io/crates/rand_isaac"
10+
description = """
11+
Xorshift random number generator
12+
"""
13+
keywords = ["random", "rng", "xorshift"]
14+
categories = ["algorithms", "no-std"]
15+
16+
[badges]
17+
travis-ci = { repository = "rust-lang-nursery/rand" }
18+
appveyor = { repository = "alexcrichton/rand" }
19+
20+
[features]
21+
serde1 = ["serde", "serde_derive"]
22+
23+
[dependencies]
24+
rand_core = { path = "../rand_core", version = "0.2", default-features=false }
25+
serde = { version = "1", optional = true }
26+
serde_derive = { version = "^1.0.38", optional = true }
27+
28+
[dev-dependencies]
29+
# This is for testing serde, unfortunately we can't specify feature-gated dev
30+
# deps yet, see: https://github.com/rust-lang/cargo/issues/1596
31+
bincode = "1"

0 commit comments

Comments
 (0)