1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//! `reproducible` helps Rust projects generate reproducible
//! accuracy and benchmark reports.
//!
//! ## Quick Start
//!
//! ```
//! use reproducible::prelude::*;
//! use reproducible::metrics;
//!
//! // 1. Define the functions we want to evaluate
//!
//! let fn_add = |inputs: &[f64]| vec![inputs[0] + inputs[1] + 5.0 * f64::EPSILON];
//! let fn_sub = |inputs: &[f64]| vec![inputs[0] - inputs[1] - 10.0 * f64::EPSILON];
//!
//! // 2. Compose the report
//!
//! let report = Report::new()
//!
//! // Add columns for metrics and statistics
//! .with_column(
//! Column::<f64>::accuracy("Mean Relative Error (eps)")
//! .with_metric(metrics::rel_err_eps)
//! )
//! .with_column(
//! Column::<f64>::accuracy("Max Absolute Error")
//! .with_metric(metrics::abs_err)
//! .with_stat(ColumnStat::Max)
//! )
//! .with_column(Column::<f64>::perf("Latency"))
//!
//! // Add rows corresponding to each function you want to evaluate
//! .with_row(Row::new("math/add", fn_add).with_test_cases(vec![
//! TestCase { inputs: vec![1.0, 2.0], expected: vec![3.0] },
//! ]))
//! .with_row(Row::new("math/sub", fn_sub).with_test_cases(vec![
//! TestCase { inputs: vec![1.0, 2.0], expected: vec![-1.0] },
//! ]));
//!
//! // 3. Render to Markdown
//!
//! println!("{}", report.render_markdown());
//! # assert!(report.render_markdown() == "| Function | Mean Relative Error (eps) | Max Absolute Error | Latency |\n|----------|---------------------------|--------------------|---------|\n| math/add | 1.33 | 8.88e-16 | 9.3 ns |\n| math/sub | 10.00 | 2.22e-15 | 9.7 ns |");
//! ```
//!
//! Output:
//! ```text
//! | Function | Mean Relative Error (eps) | Max Absolute Error | Latency |
//! |----------|---------------------------|--------------------|---------|
//! | math/add | 1.33 | 8.88e-16 | 9.3 ns |
//! | math/sub | 10.00 | 2.22e-15 | 9.7 ns |
//! ```
extern crate self as reproducible;
pub use ;
use Serialize;
/// Serialize report rows to pretty JSON for machine-friendly artifacts.