criterion/plot/gnuplot_backend/
t_test.rs

1use std::iter;
2use std::process::Child;
3
4use criterion_plot::prelude::*;
5
6use super::*;
7use crate::kde;
8use crate::report::{BenchmarkId, ComparisonData, MeasurementData, ReportContext};
9
10pub(crate) fn t_test(
11    id: &BenchmarkId,
12    context: &ReportContext,
13    _measurements: &MeasurementData<'_>,
14    comparison: &ComparisonData,
15    size: Option<Size>,
16) -> Child {
17    let t = comparison.t_value;
18    let (xs, ys) = kde::sweep(&comparison.t_distribution, KDE_POINTS, None);
19    let zero = iter::repeat(0);
20
21    let mut figure = Figure::new();
22    figure
23        .set(Font(DEFAULT_FONT))
24        .set(size.unwrap_or(SIZE))
25        .set(Title(format!(
26            "{}: Welch t test",
27            gnuplot_escape(id.as_title())
28        )))
29        .configure(Axis::BottomX, |a| a.set(Label("t score")))
30        .configure(Axis::LeftY, |a| a.set(Label("Density")))
31        .configure(Key, |k| {
32            k.set(Justification::Left)
33                .set(Order::SampleText)
34                .set(Position::Outside(Vertical::Top, Horizontal::Right))
35        })
36        .plot(
37            FilledCurve {
38                x: &*xs,
39                y1: &*ys,
40                y2: zero,
41            },
42            |c| {
43                c.set(DARK_BLUE)
44                    .set(Label("t distribution"))
45                    .set(Opacity(0.25))
46            },
47        )
48        .plot(
49            Lines {
50                x: &[t, t],
51                y: &[0, 1],
52            },
53            |c| {
54                c.set(Axes::BottomXRightY)
55                    .set(DARK_BLUE)
56                    .set(LINEWIDTH)
57                    .set(Label("t statistic"))
58                    .set(LineType::Solid)
59            },
60        );
61
62    let path = context.report_path(id, "change/t-test.svg");
63    debug_script(&path, &figure);
64    figure.set(Output(path)).draw().unwrap()
65}