use chrono_probe::{
input::{distribution::Exponential, InputBuilder},
measurements::measure_mut,
plot::time_plot,
};
use chrono_probe::plot::PlotConfig;
use crate::algorithms::{merge_sort_input, quick_sort_input};
mod algorithms;
mod input;
fn main() {
let length_distribution = Exponential::new(1000..=500_000);
let vector_builder = InputBuilder::new(length_distribution, ());
let mut vectors = vector_builder.build_with_repetitions(200, 10);
let algorithms: &[(fn(&mut input::InputVec), &str); 2] = &[
(merge_sort_input, "Merge sort"),
(quick_sort_input, "Quick sort"),
];
let results = measure_mut(&mut vectors, algorithms, 0.001);
let result_clone = results.clone();
result_clone.serialize_json("results.json");
let file_name = "results/sorting.svg";
let config = PlotConfig::default()
.with_title("Sorting algorithms")
.with_caption("The time plot of sorting algorithms");
time_plot(file_name, results, &config);
}