From 0d835e37af5835a6184cf9ae8d2051205220cb76 Mon Sep 17 00:00:00 2001 From: Raymond Cheung Date: Sun, 23 Mar 2025 21:37:07 +0000 Subject: [PATCH] Update bitvec requirement from 0.22 to 1.0 --- Cargo.toml | 4 +- examples/bits.rs | 14 +- src/color.rs | 389 ++++++++++++++++++++++------------------------- src/rand.rs | 6 + 4 files changed, 197 insertions(+), 216 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b59e31b2..e0388dd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "turtle" -version = "1.0.0-rc.4" +version = "1.0.0-dev.2503" authors = ["Sunjay Varma "] description = "Learn the Rust language by creating animated drawings!" homepage = "http://turtle.rs" @@ -76,7 +76,7 @@ features = [ # Dependencies used when developing `turtle` directly, but not when using it as # a library. [dev-dependencies] -bitvec = "0.22" +bitvec = "1.0" chrono = "0.4" # Since the debug performance of turtle isn't all that great, we recommend that diff --git a/examples/bits.rs b/examples/bits.rs index dee07878..3b6a9869 100644 --- a/examples/bits.rs +++ b/examples/bits.rs @@ -100,7 +100,7 @@ fn draw_text(turtle: &mut Turtle, text: &str) { // need to select the range beginning at `start`, running for // `byte_count`. Another style of writing this that you might see in // Rust libraries is `[start ..][.. length]`. - let row: &[u8] = &text.as_bytes()[start .. start + byte_count]; + let row: &[u8] = &text.as_bytes()[start..start + byte_count]; // For each byte (`u8`), we use `bitvec` to make a view into its bits. // `bitvec` provides the `.view_bits::<_>()` method on Rust integers for @@ -203,16 +203,18 @@ fn draw_number(turtle: &mut Turtle, number: f32) { /// going to start on the correct side and be facing the correct way for this /// drawing to work. fn draw_row(turtle: &mut Turtle, row: &BitSlice) -where O: BitOrder, T: BitStore { +where + O: bitvec::store::BitStore, + T: bitvec::order::BitOrder, +{ // `&BitSlice` can iterate over bits. It is just like `&[bool]`, and so it // produces `&bool` for each loop. - for bit in row.iter().by_val() { + for bit in row.iter().by_vals() { // This checks if the bit produced by the row is `1` or `0`, and sets // the pen color to black (`1`) or light grey (`0`) if bit { turtle.set_pen_color("black"); - } - else { + } else { turtle.set_pen_color("light grey"); } @@ -225,7 +227,7 @@ where O: BitOrder, T: BitStore { turtle.forward(BIT_MARGIN); } // Rewind the turtle - for _ in 0 .. row.len() { + for _ in 0..row.len() { turtle.backward(BIT_BOX); } } diff --git a/src/color.rs b/src/color.rs index d74c8956..686521af 100644 --- a/src/color.rs +++ b/src/color.rs @@ -1,10 +1,10 @@ pub mod colors; +use std::f64::EPSILON; use std::fmt::Debug; use std::iter::repeat; -use std::f64::EPSILON; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; use crate::rand::{Random, RandomRange}; @@ -1169,8 +1169,7 @@ impl<'a> From<&'a str> for Color { }; // Use closure here as 's' cannot be captured when using nested fn form - let extract_color_value = |v| i64::from_str_radix(v, 16) - .unwrap_or_else(|_| panic!("Invalid color literal: {}", s)) as f64; + let extract_color_value = |v| i64::from_str_radix(v, 16).unwrap_or_else(|_| panic!("Invalid color literal: {}", s)) as f64; let red = extract_color_value(&color_str[0..2]); let green = extract_color_value(&color_str[2..4]); @@ -1178,8 +1177,7 @@ impl<'a> From<&'a str> for Color { Self::rgb(red, green, blue) } else { - colors::from_color_name(s) - .unwrap_or_else(|| panic!("Unknown color name: {}", s)) + colors::from_color_name(s).unwrap_or_else(|| panic!("Unknown color name: {}", s)) } } } @@ -1238,14 +1236,14 @@ mod tests { #[should_panic(expected = "Invalid color literal: #fffff")] fn invalid_color1() { // Wrong number of digits - Color::from("#fffff"); + let _ = Color::from("#fffff"); } #[test] #[should_panic(expected = "Invalid color literal: #www")] fn invalid_color2() { // Invalid hex character - Color::from("#www"); + let _ = Color::from("#www"); } #[test] @@ -1296,211 +1294,186 @@ mod tests { #[test] fn invalid_color3() { - assert!( - !Color { - red: NAN, - green: 0.0, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: NAN, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: NAN, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: NAN - }.is_valid() - ); - assert!( - !Color { - red: NAN, - green: NAN, - blue: NAN, - alpha: NAN - }.is_valid() - ); + assert!(!Color { + red: NAN, + green: 0.0, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: NAN, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: NAN, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: NAN + } + .is_valid()); + assert!(!Color { + red: NAN, + green: NAN, + blue: NAN, + alpha: NAN + } + .is_valid()); - assert!( - !Color { - red: INF, - green: 0.0, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: INF, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: INF, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: INF - }.is_valid() - ); - assert!( - !Color { - red: INF, - green: INF, - blue: INF, - alpha: INF - }.is_valid() - ); + assert!(!Color { + red: INF, + green: 0.0, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: INF, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: INF, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: INF + } + .is_valid()); + assert!(!Color { + red: INF, + green: INF, + blue: INF, + alpha: INF + } + .is_valid()); - assert!( - !Color { - red: -INF, - green: 0.0, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: -INF, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: -INF, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: -INF - }.is_valid() - ); - assert!( - !Color { - red: -INF, - green: -INF, - blue: -INF, - alpha: -INF - }.is_valid() - ); + assert!(!Color { + red: -INF, + green: 0.0, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: -INF, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: -INF, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: -INF + } + .is_valid()); + assert!(!Color { + red: -INF, + green: -INF, + blue: -INF, + alpha: -INF + } + .is_valid()); // Out of valid range - assert!( - !Color { - red: -EPSILON, - green: 0.0, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: -EPSILON, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: -EPSILON, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: -EPSILON - }.is_valid() - ); - assert!( - !Color { - red: -EPSILON, - green: -EPSILON, - blue: -EPSILON, - alpha: -EPSILON - }.is_valid() - ); + assert!(!Color { + red: -EPSILON, + green: 0.0, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: -EPSILON, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: -EPSILON, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: -EPSILON + } + .is_valid()); + assert!(!Color { + red: -EPSILON, + green: -EPSILON, + blue: -EPSILON, + alpha: -EPSILON + } + .is_valid()); - assert!( - !Color { - red: 255.0001, - green: 0.0, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 255.0001, - blue: 0.0, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 255.0001, - alpha: 0.0 - }.is_valid() - ); - assert!( - !Color { - red: 0.0, - green: 0.0, - blue: 0.0, - alpha: 1.0001 - }.is_valid() - ); - assert!( - !Color { - red: 255.0001, - green: 255.0001, - blue: 255.0001, - alpha: 1.0001 - }.is_valid() - ); + assert!(!Color { + red: 255.0001, + green: 0.0, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 255.0001, + blue: 0.0, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 255.0001, + alpha: 0.0 + } + .is_valid()); + assert!(!Color { + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: 1.0001 + } + .is_valid()); + assert!(!Color { + red: 255.0001, + green: 255.0001, + blue: 255.0001, + alpha: 1.0001 + } + .is_valid()); } #[test] diff --git a/src/rand.rs b/src/rand.rs index c6c2da88..34eb0a4a 100644 --- a/src/rand.rs +++ b/src/rand.rs @@ -52,6 +52,8 @@ //! implement [`RandomSlice`] so it can be used with the [`shuffle()`] and [`choose()`] functions. //! //! ```rust +//! #![allow(dead_code)] +//! //! use turtle::rand::RandomSlice; //! //! // This is a "newtype" wrapper around a Vec which can be represented as a slice. @@ -104,6 +106,8 @@ use std::num::Wrapping; /// [`random_range()`]: fn.random_range.html /// /// ```rust,no_run +/// #![allow(dead_code)] +/// /// use turtle::rand::{ /// random, /// Random, @@ -187,6 +191,8 @@ pub trait Random { /// value (e.g. [`Speed`], [`Color`], `f64`, `u32`, etc.). For example, if you had the type: /// /// ```rust,no_run +/// #![allow(dead_code)] +/// /// #[derive(Debug, Clone)] /// struct Product { /// price: f64,