# [−][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. |