# How To Setup Benchmarking Using Criterion
```
cargo new <project_name>
cd <project_name>/
```
install criterion dependency as a dev dependency
```
cargo add criterion --dev
```
create a folder in your root dir `benches/`. ensure it is not in `src/`
```
mkdir benches
touch benches/<filename_bench.rs>
e.g. touch benches/variable_bench.rs
```
```
folder structure
-------------------------------
src/
|__ main.rs
benches/
|__ variable_bench.rs
```
in your `bench/variable_bench.rs` add this code snippet for test purpose:
```
use criterion::{criterion_group, criterion_main, Criterion};
fn stack_variable(c: &mut Criterion) {
c.bench_function("stack integer", |b| {
b.iter(|| {
let x = 42;
x
})
});
}
fn heap_string(c: &mut Criterion) {
c.bench_function("heap string", |b| {
b.iter(|| {
let s = String::from("Rust");
s
})
});
}
fn clone_string(c: &mut Criterion) {
c.bench_function("clone string", |b| {
let s1 = String::from("Rust");
b.iter(|| s1.clone())
});
}
fn reference_borrow(c: &mut Criterion) {
c.bench_function("reference borrow", |b| {
let s1 = String::from("Rust");
b.iter(|| {
let s2 = &s1;
s2
})
});
}
criterion_group!(benches, stack_variable, heap_string, clone_string, reference_borrow);
criterion_main!(benches);
```
in your `cargo.toml` add the following:
```
[[bench]]
name = "variable_bench"
harness = false
```
once all is set and done: run your benchmark using the command below:
`cargo bench`