Skip to content

Commit 2e0b080

Browse files
committed
long tail
1 parent adf2e9e commit 2e0b080

File tree

20 files changed

+324
-112
lines changed

20 files changed

+324
-112
lines changed

Cargo.toml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ license = "MIT/Apache-2.0"
77
publish = false
88
build = "build.rs"
99

10+
[features]
11+
default = []
12+
test-rand = []
13+
1014
[dependencies]
1115
ansi_term = "0.11.0"
1216
approx = "0.3"
@@ -16,7 +20,7 @@ byteorder = "1.0"
1620
cc = "1.0"
1721
chrono = "0.4"
1822
clap = "4.5"
19-
crossbeam = "0.5"
23+
crossbeam = "0.8"
2024
crossbeam-channel = "0.3.9"
2125
csv = "1.0"
2226
data-encoding = "2.1.0"
@@ -36,8 +40,8 @@ num_cpus = "1.16"
3640
percent-encoding = "2.3"
3741
petgraph = "0.6"
3842
postgres = "0.19"
39-
rand = "0.9"
40-
rand_distr = "0.5.1"
43+
rand = "0.8"
44+
rand_distr = "0.4"
4145
rayon = "1.10"
4246
regex = "1.11"
4347
reqwest = { version = "0.12", features = ["blocking", "json", "stream"] }
@@ -65,9 +69,9 @@ walkdir = "2.5"
6569
syslog = "5.0"
6670

6771
[build-dependencies]
68-
skeptic = "0.13"
72+
skeptic = { git = "https://github.com/andygauge/rust-skeptic", branch = "rlib-patch" }
6973
walkdir = "2.5"
7074

7175
[dev-dependencies]
72-
skeptic = "0.13"
76+
skeptic = { git = "https://github.com/andygauge/rust-skeptic", branch = "rlib-patch" }
7377
walkdir = "2.5"

build.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@ const REMOVED_TESTS: &[&str] = &[
66
];
77

88
fn main() {
9+
#[cfg(feature = "test-rand")]
10+
{
11+
let rand_paths = vec![
12+
"./src/algorithms/randomness/rand.md",
13+
"./src/algorithms/randomness/rand-range.md",
14+
"./src/algorithms/randomness/rand-dist.md",
15+
"./src/algorithms/randomness/rand-custom.md",
16+
"./src/algorithms/randomness/rand-passwd.md",
17+
"./src/algorithms/randomness/rand-choose.md",
18+
];
19+
skeptic::generate_doc_tests(&rand_paths[..]);
20+
return;
21+
}
22+
923
let paths = WalkDir::new("./src/").into_iter()
1024
// convert paths to Strings
1125
.map(|p| p.unwrap().path().to_str().unwrap().to_string())

src/about.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ use rand::Rng;
6262
6363
fn main() {
6464
let mut rng = rand::thread_rng();
65-
println!("Random f64: {}", rng.gen::<f64>());
65+
let random_number: u32 = rng.gen();
66+
println!("Random number: {}", random_number);
6667
}
6768
```
6869

src/algorithms/randomness/rand-choose.md

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,29 @@
33
[![rand-badge]][rand] [![cat-os-badge]][cat-os]
44

55
Randomly generates a string of given length ASCII characters with custom
6-
user-defined bytestring, with [`random_range`].
6+
user-defined bytestring, with [`gen_range`].
77

88
```rust,edition2018
99
extern crate rand;
10+
use rand::Rng;
11+
12+
const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
13+
abcdefghijklmnopqrstuvwxyz\
14+
0123456789)(*&^%$#@!~";
15+
const PASSWORD_LEN: usize = 30;
16+
1017
fn main() {
11-
use rand::Rng;
12-
const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
13-
abcdefghijklmnopqrstuvwxyz\
14-
0123456789)(*&^%$#@!~";
15-
const PASSWORD_LEN: usize = 30;
16-
let mut rng = rand::rng();
18+
let mut rng = rand::thread_rng();
1719
1820
let password: String = (0..PASSWORD_LEN)
1921
.map(|_| {
20-
let idx = rng.random_range(0..CHARSET.len());
21-
CHARSET[idx] as char
22+
let idx = rng.gen_range(0..CHARSET.len());
23+
char::from(CHARSET[idx])
2224
})
2325
.collect();
2426
2527
println!("{:?}", password);
2628
}
2729
```
2830

29-
[`random_range`]: https://docs.rs/rand/*/rand/trait.Rng.html#method.random_range
31+
[`gen_range`]: https://docs.rs/rand/*/rand/trait.Rng.html#method.gen_range

src/algorithms/randomness/rand-custom.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ struct Point {
1818
1919
impl Distribution<Point> for Standard {
2020
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Point {
21-
let (rand_x, rand_y) = rng.random();
21+
let rand_x: i32 = rng.gen();
22+
let rand_y: i32 = rng.gen();
2223
Point {
2324
x: rand_x,
2425
y: rand_y,
@@ -27,13 +28,13 @@ impl Distribution<Point> for Standard {
2728
}
2829
2930
fn main() {
30-
let mut rng = rand::rng();
31-
let rand_tuple = rng.random::<(i32, bool, f64)>();
32-
let rand_point: Point = rng.random();
31+
let mut rng = rand::thread_rng();
32+
let rand_tuple = rng.gen::<(i32, bool, f64)>();
33+
let rand_point: Point = rng.gen();
3334
println!("Random tuple: {:?}", rand_tuple);
3435
println!("Random Point: {:?}", rand_point);
3536
}
3637
```
3738

38-
[`Distribution`]: https://docs.rs/rand/*/rand/distributions/trait.Distribution.html
39-
[`Standard`]: https://docs.rs/rand/*/rand/distributions/struct.Standard.html
39+
[Distribution]: https://docs.rs/rand/*/rand/distributions/trait.Distribution.html
40+
[Standard]: https://docs.rs/rand/*/rand/distributions/struct.Standard.html

src/algorithms/randomness/rand-dist.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,22 @@ generator [`rand::Rng`].
1212
The [distributions available are documented here][rand-distributions].
1313
An example using the [`Normal`] distribution is shown below.
1414

15-
```rust,edition2018,ignore
15+
```rust,edition2018
1616
extern crate rand;
1717
extern crate rand_distr;
18-
use rand_distr::{Distribution, Normal, NormalError};
19-
use rand::rng;
18+
use rand::thread_rng;
19+
use rand_distr::{Distribution, LogNormal, Normal};
20+
use rand::distributions::Distribution as RandDistribution;
21+
22+
fn main() {
23+
let mut rng = thread_rng();
24+
let normal = Normal::new(2.0, 3.0).unwrap();
25+
let log_normal = LogNormal::new(1.0, 0.5).unwrap();
2026
21-
fn main() -> Result<(), NormalError> {
22-
let mut rng = rng();
23-
let normal = Normal::new(2.0, 3.0)?;
2427
let v = normal.sample(&mut rng);
2528
println!("{} is from a N(2, 9) distribution", v);
26-
Ok(())
29+
let v = log_normal.sample(&mut rng);
30+
println!("{} is from an ln N(1, 0.25) distribution", v);
2731
}
2832
```
2933

src/algorithms/randomness/rand-passwd.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ a-z, 0-9`, with [`Alphanumeric`] sample.
77

88
```rust,edition2018
99
extern crate rand;
10-
use rand::{rng, Rng};
10+
use rand::{thread_rng, Rng};
1111
use rand::distributions::Alphanumeric;
1212
1313
fn main() {
14-
let rand_string: String = rng()
14+
let rand_string: String = thread_rng()
1515
.sample_iter(&Alphanumeric)
1616
.take(30)
1717
.map(char::from)

src/algorithms/randomness/rand-range.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
[![rand-badge]][rand] [![cat-science-badge]][cat-science]
44

5-
Generates a random value within half-open `[0, 10)` range (not including `10`) with [`Rng::random_range`].
5+
Generates a random value within half-open `[0, 10)` range (not including `10`) with [`Rng::gen_range`].
66

77
```rust,edition2018
88
extern crate rand;
99
use rand::Rng;
1010
1111
fn main() {
12-
let mut rng = rand::rng();
13-
println!("Integer: {}", rng.random_range(0..10));
14-
println!("Float: {}", rng.random_range(0.0..10.0));
12+
let mut rng = rand::thread_rng();
13+
println!("Integer: {}", rng.gen_range(0..10));
14+
println!("Float: {}", rng.gen_range(0.0..10.0));
1515
}
1616
```
1717

@@ -21,10 +21,12 @@ in the same range.
2121

2222
```rust,edition2018
2323
extern crate rand;
24-
use rand::distributions::{Distribution, Uniform};
24+
extern crate rand_distr;
25+
use rand::Rng;
26+
use rand_distr::{Distribution, Uniform};
2527
2628
fn main() {
27-
let mut rng = rand::rng();
29+
let mut rng = rand::thread_rng();
2830
let die = Uniform::from(1..7);
2931
3032
loop {
@@ -35,8 +37,4 @@ fn main() {
3537
}
3638
}
3739
}
38-
```
39-
40-
[`Uniform`]: https://docs.rs/rand/*/rand/distributions/uniform/struct.Uniform.html
41-
[`Rng::random_range`]: https://doc.rust-lang.org/rand/*/rand/trait.Rng.html#method.random_range
42-
[uniform distribution]: https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)
40+
```

src/algorithms/randomness/rand.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,9 @@ extern crate rand;
1313
use rand::Rng;
1414
1515
fn main() {
16-
let mut rng = rand::rng();
17-
18-
let n1: u8 = rng.random();
19-
let n2: u16 = rng.random();
20-
println!("Random u8: {}", n1);
21-
println!("Random u16: {}", n2);
22-
println!("Random u32: {}", rng.random::<u32>());
23-
println!("Random i32: {}", rng.random::<i32>());
24-
println!("Random float: {}", rng.random::<f64>());
16+
let mut rng = rand::thread_rng();
17+
let random_number: u32 = rng.gen();
18+
println!("Random number: {}", random_number);
2519
}
2620
```
2721

src/concurrency/parallel/rayon-parallel-sort.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,20 @@ exist to sort an enumerable data type, [`par_sort_unstable`]
1010
is usually faster than [stable sorting] algorithms.
1111

1212
```rust,edition2018
13-
extern crate rayon;
1413
extern crate rand;
15-
use rand::{Rng, thread_rng};
16-
use rand::distributions::Alphanumeric;
14+
extern crate rayon;
15+
use rand::Rng;
1716
use rayon::prelude::*;
1817
1918
fn main() {
20-
let mut vec = vec![String::new(); 100_000];
21-
vec.par_iter_mut().for_each(|p| {
22-
let mut rng = thread_rng();
23-
*p = (0..5).map(|_| rng.sample(&Alphanumeric) as char).collect()
24-
});
25-
vec.par_sort_unstable();
19+
let mut vec = vec![0; 1_000_000];
20+
rand::thread_rng().fill(&mut vec[..]);
21+
22+
vec.par_sort_unstable();
23+
24+
let first = vec.first().unwrap();
25+
let last = vec.last().unwrap();
26+
assert!(first <= last);
2627
}
2728
```
2829

0 commit comments

Comments
 (0)