Update the rand crate to 0.9.x

- `thread_rng` becomes just `rng`.
- `gen` is renamed to `random`, `gen_range` to `random_range`.
- Avoid using the `rand` feature of the not yet updated crate `lowdim`.
This commit is contained in:
Juergen Stuber
2026-01-16 20:48:51 +01:00
parent 299c494f73
commit ae8d17e34b
10 changed files with 57 additions and 55 deletions

View File

@@ -11,9 +11,9 @@ license = "MIT OR Apache-2.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
rand = "0.8.4"
chrono = "0.4.6" chrono = "0.4.6"
lowdim = { version = "0.6.0", features = ["random"] } lowdim = { version = "0.6.0" }
primal = "0.3.3" primal = "0.3.3"
rand = "0.9.2"
serde = { version = "1.0.215", features = ["derive"] } serde = { version = "1.0.215", features = ["derive"] }
serde_json = "1.0.132" serde_json = "1.0.132"

View File

@@ -7,7 +7,7 @@ use std::iter::repeat;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use pixelfoo_apps::color::Color; use pixelfoo_apps::color::Color;
@@ -53,7 +53,7 @@ fn main() -> std::io::Result<()> {
let t_frame = 0.040; // s let t_frame = 0.040; // s
let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32);
let mut rng = thread_rng(); let mut rng = rng();
let colors = vec![ let colors = vec![
Color::black(), Color::black(),
@@ -70,24 +70,24 @@ fn main() -> std::io::Result<()> {
.collect::<Vec<_>>(); .collect::<Vec<_>>();
for x in 0..(x_size / 8) { for x in 0..(x_size / 8) {
for y in 0..(y_size / 8) { for y in 0..(y_size / 8) {
let fg = colors[rng.gen_range(0..colors.len())] let fg = colors[rng.random_range(0..colors.len())]
.interpolate(Color::black(), 0.8 * rng.gen::<f64>()); .interpolate(Color::black(), 0.8 * rng.random::<f64>());
let bg = colors[rng.gen_range(0..colors.len())] let bg = colors[rng.random_range(0..colors.len())]
.interpolate(Color::black(), 0.8 * rng.gen::<f64>()); .interpolate(Color::black(), 0.8 * rng.random::<f64>());
let start_index = rng.gen_range(0..buffer.len() / 8) * 8; let start_index = rng.random_range(0..buffer.len() / 8) * 8;
let bitmap = &buffer[start_index..(start_index + 8)]; let bitmap = &buffer[start_index..(start_index + 8)];
paint_char(&mut frame, x, y, bitmap, fg, bg); paint_char(&mut frame, x, y, bitmap, fg, bg);
} }
} }
loop { loop {
if rng.gen::<f64>() < 0.02 { if rng.random::<f64>() < 0.02 {
let x = rng.gen_range(0..x_size / 8); let x = rng.random_range(0..x_size / 8);
let y = rng.gen_range(0..y_size / 8); let y = rng.random_range(0..y_size / 8);
let fg = colors[rng.gen_range(0..colors.len())] let fg = colors[rng.random_range(0..colors.len())]
.interpolate(Color::black(), 0.8 * rng.gen::<f64>()); .interpolate(Color::black(), 0.8 * rng.random::<f64>());
let bg = colors[rng.gen_range(0..colors.len())] let bg = colors[rng.random_range(0..colors.len())]
.interpolate(Color::black(), 0.8 * rng.gen::<f64>()); .interpolate(Color::black(), 0.8 * rng.random::<f64>());
let start_index = rng.gen_range(0..buffer.len() / 8) * 8; let start_index = rng.random_range(0..buffer.len() / 8) * 8;
let bitmap = &buffer[start_index..(start_index + 8)]; let bitmap = &buffer[start_index..(start_index + 8)];
paint_char(&mut frame, x, y, bitmap, fg, bg); paint_char(&mut frame, x, y, bitmap, fg, bg);
} }

View File

@@ -5,7 +5,7 @@ use std::iter::repeat_with;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use pixelfoo_apps::color::Color; use pixelfoo_apps::color::Color;
@@ -28,12 +28,12 @@ impl Palette {
where where
R: Rng, R: Rng,
{ {
let r = rng.gen::<f64>(); let r = rng.random::<f64>();
let mut p_sum = 0.0; let mut p_sum = 0.0;
for &(p, c0, c1) in &self.0 { for &(p, c0, c1) in &self.0 {
p_sum += p; p_sum += p;
if r < p_sum { if r < p_sum {
return c0.interpolate(c1, rng.gen::<f64>().powf(2.0)); return c0.interpolate(c1, rng.random::<f64>().powf(2.0));
} }
} }
Color::black() Color::black()
@@ -58,7 +58,7 @@ fn main() -> std::io::Result<()> {
let t_frame = 0.040; // s let t_frame = 0.040; // s
let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32);
let mut rng = thread_rng(); let mut rng = rng();
let palette_29 = Palette(vec![ let palette_29 = Palette(vec![
(0.04, Color::new(86, 197, 208), Color::new(86, 197, 208)), (0.04, Color::new(86, 197, 208), Color::new(86, 197, 208)),
@@ -164,8 +164,8 @@ fn main() -> std::io::Result<()> {
.take(y_size) .take(y_size)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
loop { loop {
let x = rng.gen_range(0..x_size); let x = rng.random_range(0..x_size);
let y = rng.gen_range(0..y_size); let y = rng.random_range(0..y_size);
let c = palette.pick(&mut rng); let c = palette.pick(&mut rng);
frame[y][x] = c; frame[y][x] = c;

View File

@@ -5,7 +5,7 @@ use std::io::Write;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -137,7 +137,7 @@ const E12: &[[Ring; 2]; 12] = &[
]; ];
fn random_element<'a, T, R: Rng>(elements: &'a [T], rng: &mut R) -> &'a T { fn random_element<'a, T, R: Rng>(elements: &'a [T], rng: &mut R) -> &'a T {
let i = rng.gen_range(0..elements.len()); let i = rng.random_range(0..elements.len());
&elements[i] &elements[i]
} }
@@ -154,7 +154,7 @@ fn main() -> Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let frame_size = x_size * y_size * COLORS; let frame_size = x_size * y_size * COLORS;
@@ -226,11 +226,11 @@ fn main() -> Result<()> {
loop { loop {
if t == 0 { if t == 0 {
// Pick a new resistor. // Pick a new resistor.
if rng.gen::<f64>() < p_pruefungsfragen { if rng.random::<f64>() < p_pruefungsfragen {
r = random_element(&pruefungsfragen, &mut rng).clone(); r = random_element(&pruefungsfragen, &mut rng).clone();
body_color = carbon_body_color; body_color = carbon_body_color;
} else { } else {
let is_five_ring = rng.gen::<f64>() < 0.5; let is_five_ring = rng.random::<f64>() < 0.5;
body_color = if is_five_ring { body_color = if is_five_ring {
// A turquise blue metal film resistor. // A turquise blue metal film resistor.

View File

@@ -9,7 +9,7 @@ use std::time::Duration;
use chrono::Local; use chrono::Local;
use chrono::Timelike; use chrono::Timelike;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -235,7 +235,7 @@ where
open.push(Move { open.push(Move {
from, from,
dir, dir,
prio: prio * 100 + rng.gen_range(0..1000), prio: prio * 100 + rng.random_range(0..1000),
}); });
} }
} }
@@ -255,7 +255,7 @@ fn main() -> std::io::Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let t_frame = 0.040; // s let t_frame = 0.040; // s
let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32);

View File

@@ -4,7 +4,7 @@ use std::io::Write;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -75,7 +75,7 @@ fn main() -> std::io::Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let bbox = bb2d(0..x_size as i64, 0..y_size as i64); let bbox = bb2d(0..x_size as i64, 0..y_size as i64);
let p_alive_init = 0.125; let p_alive_init = 0.125;
@@ -83,7 +83,7 @@ fn main() -> std::io::Result<()> {
let mut board = Board::with(bbox, |_p| { let mut board = Board::with(bbox, |_p| {
// Initialize board randomly. // Initialize board randomly.
let r = rng.gen::<f64>(); let r = rng.random::<f64>();
if r < p_alive_init { if r < p_alive_init {
Square::Alive Square::Alive
} else { } else {
@@ -110,7 +110,7 @@ fn main() -> std::io::Result<()> {
} else { } else {
if p.y() < bbox.y_min() || p.y() > bbox.y_max() { if p.y() < bbox.y_min() || p.y() > bbox.y_max() {
// The invisible long edge is filled randomly. // The invisible long edge is filled randomly.
let r = rng.gen::<f64>(); let r = rng.random::<f64>();
if r < p_alive_edge { if r < p_alive_edge {
Square::Alive Square::Alive
} else { } else {

View File

@@ -5,7 +5,7 @@ use std::iter::repeat;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use pixelfoo_apps::color::Color; use pixelfoo_apps::color::Color;
@@ -35,7 +35,7 @@ fn main() -> std::io::Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let t_frame = 0.040; // s let t_frame = 0.040; // s
let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32);
@@ -65,7 +65,7 @@ fn main() -> std::io::Result<()> {
let b = 27.0; let b = 27.0;
let c = 8.0 / 3.0; let c = 8.0 / 3.0;
let mut x = rng.gen::<f64>() - 0.5; let mut x = rng.random::<f64>() - 0.5;
let mut y = 0.0; let mut y = 0.0;
let mut z = zc; let mut z = zc;

View File

@@ -12,7 +12,7 @@ use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use std::time::Instant; use std::time::Instant;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -75,11 +75,11 @@ impl RunningState {
self.t += 1; self.t += 1;
let y = usize::try_from(self.head_y()).unwrap(); let y = usize::try_from(self.head_y()).unwrap();
if y >= self.brightnesses.len() { if y >= self.brightnesses.len() {
self.brightnesses.push(0.5 + 0.5 * rng.gen::<f64>()); self.brightnesses.push(0.5 + 0.5 * rng.random::<f64>());
} }
if rng.gen::<f64>() < 0.2 { if rng.random::<f64>() < 0.2 {
let y = rng.gen_range(0..self.brightnesses.len()); let y = rng.random_range(0..self.brightnesses.len());
self.brightnesses[y] = 0.5 + 0.5 * rng.gen::<f64>(); self.brightnesses[y] = 0.5 + 0.5 * rng.random::<f64>();
} }
} }
fn head_y(&self) -> i64 { fn head_y(&self) -> i64 {
@@ -198,7 +198,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let bbox = bb2d(0..x_size as i64, 0..y_size as i64); let bbox = bb2d(0..x_size as i64, 0..y_size as i64);
let frame_duration = Duration::from_millis(50); let frame_duration = Duration::from_millis(50);
@@ -226,16 +226,16 @@ fn main() -> Result<(), Box<dyn error::Error>> {
// Update the animation // Update the animation
for animation in &mut animations { for animation in &mut animations {
if animation.is_idle() { if animation.is_idle() {
if rng.gen::<f64>() < p_new_animation { if rng.random::<f64>() < p_new_animation {
let frames_per_step = { let frames_per_step = {
if rng.gen::<f64>() < p_slow_animation { if rng.random::<f64>() < p_slow_animation {
frames_per_step_slow frames_per_step_slow
} else { } else {
frames_per_step_normal frames_per_step_normal
} }
}; };
if frame_count % frames_per_step == 0 { if frame_count % frames_per_step == 0 {
let size = rng.gen_range(15..=30); let size = rng.random_range(15..=30);
animation.start(frames_per_step, size, 15, i64::try_from(y_size)?); animation.start(frames_per_step, size, 15, i64::try_from(y_size)?);
} }
} }

View File

@@ -9,7 +9,7 @@ use std::time::Duration;
use chrono::Local; use chrono::Local;
use chrono::Timelike; use chrono::Timelike;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -234,7 +234,7 @@ where
open.push(Move { open.push(Move {
from, from,
dir, dir,
prio: prio * 100 + rng.gen_range(0..1000), prio: prio * 100 + rng.random_range(0..1000),
}); });
} }
} }
@@ -254,7 +254,7 @@ fn main() -> std::io::Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let t_frame = 0.040; // s let t_frame = 0.040; // s
let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32); let delay = Duration::new(0, (1_000_000_000.0 * t_frame) as u32);

View File

@@ -4,7 +4,7 @@ use std::io::Write;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rand::thread_rng; use rand::rng;
use rand::Rng; use rand::Rng;
use lowdim::bb2d; use lowdim::bb2d;
@@ -83,14 +83,14 @@ fn main() -> std::io::Result<()> {
}; };
eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg); eprintln!("screen size {}x{}, arg {}", x_size, y_size, arg);
let mut rng = thread_rng(); let mut rng = rng();
let bbox = bb2d(0..x_size, 0..y_size); let bbox = bb2d(0..x_size, 0..y_size);
let p_empty = 0.25; let p_empty = 0.25;
let p_grass = 0.25; let p_grass = 0.25;
let p_rabbit = 0.25; let p_rabbit = 0.25;
let mut board = Board::new(bbox, || { let mut board = Board::new(bbox, || {
let p = rng.gen::<f64>(); let p = rng.random::<f64>();
if p < p_empty { if p < p_empty {
Square::Empty Square::Empty
} else if p < p_empty + p_grass { } else if p < p_empty + p_grass {
@@ -114,7 +114,9 @@ fn main() -> std::io::Result<()> {
loop { loop {
for _ in 0..arg { for _ in 0..arg {
let pos = bbox.random_point(&mut rng); let x = rng.random_range(bbox.x_range());
let y = rng.random_range(bbox.y_range());
let pos = p2d(x, y);
let sq = board.get(pos); let sq = board.get(pos);
let dx = (pos.x() as f64 - x_mid as f64) / r as f64; let dx = (pos.x() as f64 - x_mid as f64) / r as f64;
let dy = (pos.y() as f64 - y_mid as f64) / r as f64; let dy = (pos.y() as f64 - y_mid as f64) / r as f64;
@@ -125,7 +127,7 @@ fn main() -> std::io::Result<()> {
Square::Rabbit => p0, Square::Rabbit => p0,
Square::Fox => 0.8 * p0, Square::Fox => 0.8 * p0,
}; };
let new_sq = if rng.gen::<f64>() < p_survive { let new_sq = if rng.random::<f64>() < p_survive {
sq sq
} else { } else {
Square::Empty Square::Empty