diff --git a/exercises/14_generics/generics2.rs b/exercises/14_generics/generics2.rs index 8908725bf9..11688ea502 100644 --- a/exercises/14_generics/generics2.rs +++ b/exercises/14_generics/generics2.rs @@ -1,31 +1,36 @@ +// generics2.rs +// // This powerful wrapper provides the ability to store a positive integer value. -// TODO: Rewrite it using a generic so that it supports wrapping ANY type. -struct Wrapper { - value: u32, +// Rewrite it using generics so that it supports wrapping ANY type. +// + +struct Wrapper { + value: T } -// TODO: Adapt the struct's implementation to be generic over the wrapped value. -impl Wrapper { - fn new(value: u32) -> Self { +impl Wrapper { + pub fn new(value: T) -> Self { Wrapper { value } } } -fn main() { - // You can optionally experiment here. -} - #[cfg(test)] mod tests { use super::*; #[test] fn store_u32_in_wrapper() { - assert_eq!(Wrapper::new(42).value, 42); + assert_eq!(Wrapper::new(42u32).value, 42u32); + } + + #[test] + fn store_string_in_wrapper() { + let x = Wrapper::new(String::from("Foo")); + assert_eq!(x.value, String::from("Foo")); } #[test] - fn store_str_in_wrapper() { - assert_eq!(Wrapper::new("Foo").value, "Foo"); + fn store_f64_in_wrapper() { + assert_eq!(Wrapper::new(42.0_f64).value, 42.0_f64); } }