Documentation
use std::sync::{Arc, Mutex};

use asts::params::{InputFilterParams, OupParams};
use asts::{reporter::Reporter, subreads_and_smc_generator};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use mm2::gskits::samtools::sort_by_tag;

fn subreads_and_smc_generator_benchmark(c: &mut Criterion) {
    let sbr_bam = "/data/ccs_data/speed-test/13k-5h/4cc/20241220_Sync_Y0701_01_H01_Run0001_called.adapter.filtered.bam";
    let smc_bam = "/data/ccs_data/speed-test/13k-5h/4cc/20241220_Sync_Y0701_01_H01_Run0001_called.adapter.filtered.smc_all_reads.bam";
    let input_filter_param = InputFilterParams::new();

    let sorted_sbr = sort_by_tag(sbr_bam, "ch", None);
    let sorted_smc = sort_by_tag(smc_bam, "ch", None);
    c.bench_function("subreads_and_smc_generator_benchmark", |b| {
        b.iter(|| {
            let (sender, recv) = crossbeam::channel::unbounded();
            let recv = black_box(recv);
            let reporter = Arc::new(Mutex::new(Reporter::default()));

            subreads_and_smc_generator(
                black_box(&sorted_sbr),
                black_box(&sorted_smc),
                black_box(&input_filter_param),
                black_box(&OupParams::default()),
                black_box(sender),
                reporter,
                None,
            );
        })
    });
}

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