blob: a308ee0b33a1ea333a4ba46f5c40946bfd532afb [file] [log] [blame]
Matthias Benkard848739c2019-02-28 13:59:58 +01001// Fearless Abstraction
2
Matthias Benkardf3a3b302019-02-28 12:13:56 +01003#![allow(dead_code)]
4#![allow(unused_imports)]
5
6use rust_tutorial::*;
7
8/// Run this to see the disassembly of `compute_sum_of_squares_{1,2}`:
9///
10/// ```bash
Matthias Benkard848739c2019-02-28 13:59:58 +010011/// cargo objdump --bin tut3 --release -- -d | awk -v RS= '/^([[:xdigit:]]+ )?tut2::compute_sum_of_squares/'
Matthias Benkardf3a3b302019-02-28 12:13:56 +010012/// ```
13
14#[inline(never)]
15fn compute_sum_of_squares_1(xs: &Vec<i32>) -> i32 {
16 let mut acc = 0;
17 for x in xs {
18 acc += x * x;
19 }
20 acc
21}
22
23#[inline(never)]
24fn compute_sum_of_squares_2(xs: &Vec<i32>) -> i32 {
25 xs.iter()
26 .map(|x| x * x)
27 .fold(0, |acc, x| acc + x)
28}
29
30#[test]
31fn test_compute_sum_of_squares() {
32 let numbers = vec![1, 2, 3, 4, 5];
33 assert_eq!(compute_sum_of_squares_1(&numbers), compute_sum_of_squares_2(&numbers));
34}
35
36fn main() {
37 let numbers = vec![1, 2, 3, 4, 5];
38
39 let sum_of_squares_1 = compute_sum_of_squares_1(&numbers);
40 let sum_of_squares_2 = compute_sum_of_squares_2(&numbers);
41
42 println!("sum #1 = {}", sum_of_squares_1);
43 println!("sum #2 = {}", sum_of_squares_2);
44}