X-Git-Url: https://git.ralfj.de/rust-101.git/blobdiff_plain/41c94f98f6cf8b5a05a8c3eb8d13bb73fc4fda3f..816ab35bec9dec1571988fcf97e57a38a32f5ff5:/src/part03.rs diff --git a/src/part03.rs b/src/part03.rs index cb0807b..d4805e7 100644 --- a/src/part03.rs +++ b/src/part03.rs @@ -30,10 +30,9 @@ trait Minimum : Copy { fn min(a: Self, b: Self) -> Self; } -fn vec_min(v: &Vec) -> SomethingOrNothing { +fn vec_min(v: Vec) -> SomethingOrNothing { let mut min = Nothing; for e in v { - let e = *e; min = Something(match min { Nothing => e, Something(n) => T::min(n, e) @@ -48,20 +47,34 @@ impl Minimum for i32 { } } -use std::fmt; -impl fmt::Display for SomethingOrNothing { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +impl SomethingOrNothing { + fn print(self) { match self { - &Something(ref t) => t.fmt(f), - &Nothing => "Nothing".fmt(f), - } + Nothing => println!("The number is: "), + Something(n) => println!("The number is: {}", n), + }; } } - pub fn part_main() { let vec = read_vec(); - let min = vec_min(&vec); - println!("The minimum is: {}", min); + let min = vec_min(vec); + min.print(); +} + +impl SomethingOrNothing { + fn equals(self, other: Self) -> bool { + match (self, other) { + (Nothing , Nothing ) => true, + (Something(n), Something (m)) => n == m, + _ => false, + } + } +} + +#[test] +fn tes_vec_min() { + assert!(vec_min(vec![6,325,33,532,5,7]).equals(Something(5))); + assert!(vec_min(vec![]).equals(Nothing)); } // [index](main.html) | [previous](part02.html) | next