1pub fn sqrt(y: u128) -> u128 {
2 if y > 3u128 {
3 let mut z = y;
4 let mut x: u128 = y / 2 + 1;
5 while x < z {
6 z = x;
7 x = (y / x + x) / 2;
8 }
9 z
10 } else if y != 0 {
11 let z = 1;
12 z
13 } else {
14 y
15 }
16}
17
18pub fn min(x: u128, y: u128) -> u128 {
19 let z = match x < y {
20 true => x,
21 _ => y,
22 };
23 z
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 #[test]
30 fn sqrt_works() {
31 assert_eq!(2, sqrt(4));
32 }
33
34 #[test]
35 fn min_works() {
36 assert_eq!(1, min(1, 3));
37 }
38}