Skip to content

Commit ee1a20e

Browse files
committed
Implement From<RangeInclusive> for Uniform
Fixes #556.
1 parent f8fd39d commit ee1a20e

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Random number generators and other randomness functionality.
1212
"""
1313
keywords = ["random", "rng"]
1414
categories = ["algorithms", "no-std"]
15+
build = "build.rs"
1516

1617
[badges]
1718
travis-ci = { repository = "rust-lang-nursery/rand" }
@@ -53,5 +54,8 @@ fuchsia-zircon = { version = "0.3.2", optional = true }
5354
stdweb = { version = "0.4", optional = true }
5455
wasm-bindgen = { version = "0.2.12", optional = true }
5556

57+
[build-dependencies]
58+
rustc_version = "0.2"
59+
5660
[package.metadata.docs.rs]
5761
all-features = true

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ optional features are available:
117117
- `alloc` can be used instead of `std` to provide `Vec` and `Box`.
118118
- `i128_support` enables support for generating `u128` and `i128` values.
119119
- `log` enables some logging via the `log` crate.
120-
- `nightly` enables all unstable features (`i128_support`).
120+
- `nightly` enables all unstable features (`i128_support`, `simd_support`).
121121
- `serde1` enables serialization for some types, via Serde version 1.
122122
- `stdweb` enables support for `OsRng` on `wasm32-unknown-unknown` via `stdweb`
123123
combined with `cargo-web`.

build.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
extern crate rustc_version;
2+
use rustc_version::{version, Version};
3+
4+
fn main() {
5+
if version().unwrap() >= Version::parse("1.27.0").unwrap() {
6+
println!("cargo:rustc-cfg=rust_1_27");
7+
}
8+
}

src/distributions/uniform.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,13 @@ impl<X: SampleUniform> From<::core::ops::Range<X>> for Uniform<X> {
276276
}
277277
}
278278

279+
#[cfg(rust_1_27)]
280+
impl<X: SampleUniform> From<::core::ops::RangeInclusive<X>> for Uniform<X> {
281+
fn from(r: ::core::ops::RangeInclusive<X>) -> Uniform<X> {
282+
Uniform::new_inclusive(r.start(), r.end())
283+
}
284+
}
285+
279286
/// Helper trait similar to [`Borrow`] but implemented
280287
/// only for SampleUniform and references to SampleUniform in
281288
/// order to resolve ambiguity issues.
@@ -1060,4 +1067,16 @@ mod tests {
10601067
assert_eq!(r.inner.low, 2.0);
10611068
assert_eq!(r.inner.scale, 5.0);
10621069
}
1070+
1071+
#[cfg(rust_1_27)]
1072+
#[test]
1073+
fn test_uniform_from_std_range_inclusive() {
1074+
let r = Uniform::from(2u32..=6);
1075+
assert_eq!(r.inner.low, 2);
1076+
assert_eq!(r.inner.range, 5);
1077+
let r = Uniform::from(2.0f64..=7.0);
1078+
assert_eq!(r.inner.low, 2.0);
1079+
assert!(r.inner.scale > 5.0);
1080+
assert!(r.inner.scale < 5.0 + 1e-14);
1081+
}
10631082
}

0 commit comments

Comments
 (0)