use std::time::Duration;

use heed::EnvOpenOptions;
use milli::Index;
use criterion::{criterion_group, criterion_main, BenchmarkId};

fn bench_search(c: &mut criterion::Criterion) {
    let database = "books-4cpu.mmdb";
    let queries = [
        "minogue kylie",
        "minogue kylie live",
    ];

    let mut options = EnvOpenOptions::new();
    options.map_size(100 * 1024 * 1024 * 1024); // 100 GB
    options.max_readers(10);
    let index = Index::new(options, database).unwrap();

    let mut group = c.benchmark_group("search");
    group.sample_size(10);
    group.measurement_time(Duration::from_secs(12));

    for query in &queries {
        group.bench_with_input(BenchmarkId::from_parameter(query), &query, |b, &query| {
            b.iter(|| {
                let rtxn = index.read_txn().unwrap();
                let _documents_ids = index.search(&rtxn).query(*query).execute().unwrap();
            });
        });
    }

    group.finish();
}

criterion_group!(benches, bench_search);
criterion_main!(benches);