| // Fearless Abstraction |
| |
| #![allow(dead_code)] |
| #![allow(unused_imports)] |
| |
| use rust_tutorial::*; |
| |
| /// Run this to see the disassembly of `compute_sum_of_squares_{1,2}`: |
| /// |
| /// ```bash |
| /// cargo objdump --bin tut3 --release -- -d | awk -v RS= '/^([[:xdigit:]]+ )?tut2::compute_sum_of_squares/' |
| /// ``` |
| |
| #[inline(never)] |
| fn compute_sum_of_squares_1(xs: &Vec<i32>) -> i32 { |
| let mut acc = 0; |
| for x in xs { |
| acc += x * x; |
| } |
| acc |
| } |
| |
| #[inline(never)] |
| fn compute_sum_of_squares_2(xs: &Vec<i32>) -> i32 { |
| xs.iter() |
| .map(|x| x * x) |
| .fold(0, |acc, x| acc + x) |
| } |
| |
| #[test] |
| fn test_compute_sum_of_squares() { |
| let numbers = vec![1, 2, 3, 4, 5]; |
| assert_eq!(compute_sum_of_squares_1(&numbers), compute_sum_of_squares_2(&numbers)); |
| } |
| |
| fn main() { |
| let numbers = vec![1, 2, 3, 4, 5]; |
| |
| let sum_of_squares_1 = compute_sum_of_squares_1(&numbers); |
| let sum_of_squares_2 = compute_sum_of_squares_2(&numbers); |
| |
| println!("sum #1 = {}", sum_of_squares_1); |
| println!("sum #2 = {}", sum_of_squares_2); |
| } |