blob: a308ee0b33a1ea333a4ba46f5c40946bfd532afb [file] [log] [blame]
// 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);
}