// 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);
}
