From a7f8f348f65ff990549e46e7c771c94b19167f59 Mon Sep 17 00:00:00 2001 From: Vinzent Steinberg Date: Mon, 23 Jul 2018 13:45:26 +0200 Subject: [PATCH] Implement `From` for `Uniform` Fixes #556. --- Cargo.toml | 4 ++++ README.md | 2 +- build.rs | 8 ++++++++ src/distributions/uniform.rs | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 build.rs diff --git a/Cargo.toml b/Cargo.toml index a62c636bed1..4b3d2a4b290 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ Random number generators and other randomness functionality. """ keywords = ["random", "rng"] categories = ["algorithms", "no-std"] +build = "build.rs" [badges] travis-ci = { repository = "rust-lang-nursery/rand" } @@ -54,5 +55,8 @@ fuchsia-zircon = { version = "0.3.2", optional = true } stdweb = { version = "0.4", optional = true } wasm-bindgen = { version = "0.2.12", optional = true } +[build-dependencies] +rustc_version = "0.2" + [package.metadata.docs.rs] all-features = true diff --git a/README.md b/README.md index dd1832b6bd4..57a4e063755 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ optional features are available: - `alloc` can be used instead of `std` to provide `Vec` and `Box`. - `i128_support` enables support for generating `u128` and `i128` values. - `log` enables some logging via the `log` crate. -- `nightly` enables all unstable features (`i128_support`). +- `nightly` enables all unstable features (`i128_support`, `simd_support`). - `serde1` enables serialization for some types, via Serde version 1. - `stdweb` enables support for `OsRng` on `wasm32-unknown-unknown` via `stdweb` combined with `cargo-web`. diff --git a/build.rs b/build.rs new file mode 100644 index 00000000000..2e57e56f58b --- /dev/null +++ b/build.rs @@ -0,0 +1,8 @@ +extern crate rustc_version; +use rustc_version::{version, Version}; + +fn main() { + if version().unwrap() >= Version::parse("1.27.0").unwrap() { + println!("cargo:rustc-cfg=rust_1_27"); + } +} diff --git a/src/distributions/uniform.rs b/src/distributions/uniform.rs index a1358dfef9e..9115384a7a0 100644 --- a/src/distributions/uniform.rs +++ b/src/distributions/uniform.rs @@ -276,6 +276,13 @@ impl From<::core::ops::Range> for Uniform { } } +#[cfg(rust_1_27)] +impl From<::core::ops::RangeInclusive> for Uniform { + fn from(r: ::core::ops::RangeInclusive) -> Uniform { + Uniform::new_inclusive(r.start(), r.end()) + } +} + /// Helper trait similar to [`Borrow`] but implemented /// only for SampleUniform and references to SampleUniform in /// order to resolve ambiguity issues. @@ -1060,4 +1067,16 @@ mod tests { assert_eq!(r.inner.low, 2.0); assert_eq!(r.inner.scale, 5.0); } + + #[cfg(rust_1_27)] + #[test] + fn test_uniform_from_std_range_inclusive() { + let r = Uniform::from(2u32..=6); + assert_eq!(r.inner.low, 2); + assert_eq!(r.inner.range, 5); + let r = Uniform::from(2.0f64..=7.0); + assert_eq!(r.inner.low, 2.0); + assert!(r.inner.scale > 5.0); + assert!(r.inner.scale < 5.0 + 1e-14); + } }