use criterion::{Criterion, criterion_group, criterion_main};
use std::sync::atomic::{AtomicU64, Ordering};
use tempfile::TempDir;
use turbovault_git::{Changeset, VaultRepo};
fn open_born_repo() -> (TempDir, VaultRepo) {
let tmp = TempDir::new().unwrap();
let mut opts = git2::RepositoryInitOptions::new();
opts.initial_head("main");
git2::Repository::init_opts(tmp.path(), &opts).unwrap();
let vr = VaultRepo::open(tmp.path()).unwrap();
vr.commit_changeset(&Changeset::new("seed").create("seed.md", "S"))
.unwrap();
(tmp, vr)
}
fn single_write_create(c: &mut Criterion) {
let (_tmp, vr) = open_born_repo();
let counter = AtomicU64::new(0);
c.bench_function("commit_changeset/create_one", |b| {
b.iter(|| {
let n = counter.fetch_add(1, Ordering::Relaxed);
let path = format!("file_{n}.md");
vr.commit_changeset(&Changeset::new("c").create(path, "content"))
.unwrap();
});
});
}
criterion_group!(benches, single_write_create);
criterion_main!(benches);