# [−][src]Crate microbench

A micro-benchmarking library.

# Overview

`microbench` uses linear regression to estimate the execution time of code segments. For example, the following table might represent data collected by `microbench` about a code segment.

Iterations Time (ns)
1 19
2 25
3 37
4 47
5 56

`microbench` of course takes many more than 5 samples and the number of iterations grows geometrically rather than linearly, but the idea remains the same. After collecting data like this, `microbench` uses ordinary least squares (OLS) linear regression to estimate the actual execution time of the code segment. Using OLS with the above data would yield an estimated execution time of `9.6` nanoseconds with a goodness of fit (R²) of `0.992`.

# Example

```use microbench::{self, Options};

fn fibonacci_iterative(n: u64) -> u64 {
let (mut x, mut y, mut z) = (0, 1, 1);
for _ in 0..n { x = y; y = z; z = x + y; }
x
}

fn fibonacci_recursive(n: u64) -> u64 {
if n < 2 {
n
} else {
fibonacci_recursive(n - 2) + fibonacci_recursive(n - 1)
}
}

let options = Options::default();
microbench::bench(&options, "iterative_16", || fibonacci_iterative(16));
microbench::bench(&options, "recursive_16", || fibonacci_recursive(16));```

Example output:

``````iterative_16 (5.0s) ...                  281.733 ns/iter (0.998 R²)
recursive_16 (5.0s) ...                9_407.020 ns/iter (0.997 R²)
``````

## Modules

 statistics Statistics-related utilities. time Time-related utilities.

## Structs

 Analysis A statistical analysis of a set of execution time samples. Bytes A number of bytes. Options A set of benchmarking options. Sample A sample of the execution time of a function.

## Functions

 bench Benchmarks the supplied function and prints the results. bench_drop Benchmarks the supplied function ignoring drop time and prints the results. bench_setup Benchmarks the supplied function ignoring setup time and prints the results. measure Measures the execution time of the supplied function. measure_drop Measures the execution time of the supplied function ignoring drop time. measure_setup Measures the execution time of the supplied function ignoring setup time. retain A function that prevents the optimizer from eliminating the supplied value.