From aa4818e9e7cb91a9b5385352502874eaea17689f Mon Sep 17 00:00:00 2001 From: Rowan Torbitzky-Lane Date: Mon, 31 Mar 2025 13:16:34 -0500 Subject: [PATCH] ch13.02 done --- ch13/iterators/src/lib.rs | 47 +++++++++++++++++++++++++++++++++++++- ch13/iterators/src/main.rs | 5 ++-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/ch13/iterators/src/lib.rs b/ch13/iterators/src/lib.rs index 31c8b90..ee9b9e4 100644 --- a/ch13/iterators/src/lib.rs +++ b/ch13/iterators/src/lib.rs @@ -1,6 +1,51 @@ +// Using Closures that capture their environment +#[derive(PartialEq, Debug)] +struct Shoe { + size: u32, + style: String, +} + +fn shoes_in_size(shoes: Vec, shoe_size: u32) -> Vec { + shoes.into_iter().filter(|s| s.size == shoe_size).collect() +} + #[cfg(test)] mod tests { - // use super::*; + use super::*; + + #[test] + fn filters_by_size() { + let shoes = vec![ + Shoe { + size: 10, + style: String::from("sneaker"), + }, + Shoe { + size: 13, + style: String::from("sandal"), + }, + Shoe { + size: 10, + style: String::from("boot"), + }, + ]; + + let in_my_size = shoes_in_size(shoes, 10); + + assert_eq!( + in_my_size, + vec![ + Shoe { + size: 10, + style: String::from("sneaker") + }, + Shoe { + size: 10, + style: String::from("boot") + }, + ] + ); + } #[test] fn iterator_demonstration() { diff --git a/ch13/iterators/src/main.rs b/ch13/iterators/src/main.rs index ed5ed1f..d362f1d 100644 --- a/ch13/iterators/src/main.rs +++ b/ch13/iterators/src/main.rs @@ -14,8 +14,9 @@ fn main() { let v1: Vec = vec![1, 2, 3]; v1.iter().map(|x| x + 1); - // stopped here: - // https://rust-book.cs.brown.edu/ch13-02-iterators.html#methods-that-produce-other-iterators + let v1: Vec = vec![1, 2, 3]; + let v2: Vec<_> = v1.iter().map(|x| x + 1).collect(); + assert_eq!(v2, vec![2, 3, 4]); } // the iterator trait and the next method