Skip to content

Commit 3c81ea5

Browse files
committed
Fix issues raised by the tests, improve coverage
1 parent 989927e commit 3c81ea5

File tree

3 files changed

+42
-11
lines changed

3 files changed

+42
-11
lines changed

crates/analysis/src/keys.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ impl KeyBuilder {
8282
arch: if self.arch { Some(m.arch) } else { None },
8383
engine: if self.engine { Some(m.engine) } else { None },
8484
engine_flags: if self.engine_flags {
85-
m.engine_flags
85+
Some(m.engine_flags)
8686
} else {
8787
None
8888
},
@@ -96,28 +96,28 @@ impl KeyBuilder {
9696
}
9797

9898
/// A key for grouping measurements together.
99-
#[derive(PartialOrd, Ord, PartialEq, Eq, Hash)]
99+
#[derive(PartialOrd, Ord, PartialEq, Eq, Hash, Debug)]
100100
pub struct Key<'a> {
101101
pub arch: Option<Cow<'a, str>>,
102102
pub engine: Option<Cow<'a, str>>,
103+
pub engine_flags: Option<Option<Cow<'a, str>>>,
103104
pub wasm: Option<Cow<'a, str>>,
104105
pub phase: Option<Phase>,
105106
pub event: Option<Cow<'a, str>>,
106-
pub engine_flags: Option<Cow<'a, str>>,
107107
}
108108

109109
impl Key<'_> {
110110
/// Does the given measurement match this key?
111111
pub fn matches(&self, m: &Measurement) -> bool {
112112
self.arch.as_ref().is_none_or(|x| *x == m.arch)
113113
&& self.engine.as_ref().is_none_or(|x| *x == m.engine)
114-
&& self.wasm.as_ref().is_none_or(|x| *x == m.wasm)
115-
&& self.phase.as_ref().is_none_or(|x| *x == m.phase)
116-
&& self.event.as_ref().is_none_or(|x| *x == m.event)
117114
&& self
118115
.engine_flags
119116
.as_ref()
120-
.is_none_or(|x| Some(x) == m.engine_flags.as_ref())
117+
.is_none_or(|x| *x == m.engine_flags)
118+
&& self.wasm.as_ref().is_none_or(|x| *x == m.wasm)
119+
&& self.phase.as_ref().is_none_or(|x| *x == m.phase)
120+
&& self.event.as_ref().is_none_or(|x| *x == m.event)
121121
}
122122
}
123123

@@ -134,7 +134,7 @@ mod tests {
134134
wasm: Some("bench.wasm".into()),
135135
phase: Some(Phase::Compilation),
136136
event: Some("cycles".into()),
137-
engine_flags: Some("-Wfoo=bar".into()),
137+
engine_flags: Some(Some("-Wfoo=bar".into())),
138138
};
139139

140140
// More test cases are needed, but this provides a sanity check for the matched key and

crates/analysis/src/summarize.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn calculate<'a>(measurements: &[Measurement<'a>]) -> Vec<Summary<'a>> {
1515
summaries.push(Summary {
1616
arch: k.arch.unwrap(),
1717
engine: k.engine.unwrap(),
18-
engine_flags: k.engine_flags,
18+
engine_flags: k.engine_flags.unwrap(),
1919
wasm: k.wasm.unwrap(),
2020
phase: k.phase.unwrap(),
2121
event: k.event.unwrap(),
@@ -123,6 +123,7 @@ mod tests {
123123
Measurement {
124124
arch: "x86".into(),
125125
engine: "wasmtime".into(),
126+
engine_flags: None,
126127
wasm: "bench.wasm".into(),
127128
process: 42,
128129
iteration: 0,
@@ -158,6 +159,7 @@ mod tests {
158159
Measurement {
159160
arch: "x86".into(),
160161
engine: "wasmtime".into(),
162+
engine_flags: None,
161163
wasm: "bench.wasm".into(),
162164
process: 42,
163165
iteration: 0,
@@ -174,4 +176,31 @@ mod tests {
174176

175177
assert_eq!(calculate(&measurements).len(), 2);
176178
}
179+
180+
#[test]
181+
fn differing_engine_flags() {
182+
use std::borrow::Cow;
183+
184+
fn measurement<'a>(flags: Option<Cow<'a, str>>, count: u64) -> Measurement<'a> {
185+
Measurement {
186+
arch: "x86".into(),
187+
engine: "wasmtime".into(),
188+
engine_flags: flags,
189+
wasm: "bench.wasm".into(),
190+
process: 42,
191+
iteration: 0,
192+
phase: Phase::Execution,
193+
event: "cycles".into(),
194+
count,
195+
}
196+
}
197+
let measurements = vec![
198+
measurement(Some("-Wfoo=bar".into()), 0),
199+
measurement(Some("-Wfoo=bar".into()), 1),
200+
measurement(Some("-Wdead=beeef".into()), 2),
201+
measurement(None, 3),
202+
];
203+
204+
assert_eq!(calculate(&measurements).len(), 3);
205+
}
177206
}

crates/data/tests/serialize.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ fn effect_size_serialized_to_csv() {
1212
phase: Phase::Execution,
1313
event: "cycles".into(),
1414
a_engine: "control.so".into(),
15+
a_engine_flags: None,
1516
a_mean: 100.0,
1617
b_engine: "feature.so".into(),
18+
b_engine_flags: Some("-Wfoo=bar".into()),
1719
b_mean: 110.0,
1820
significance_level: 0.05,
1921
half_width_confidence_interval: 1.3,
@@ -23,7 +25,7 @@ fn effect_size_serialized_to_csv() {
2325
let csv = String::from_utf8(csv).unwrap();
2426
assert_eq!(
2527
csv,
26-
"arch,wasm,phase,event,a_engine,a_mean,b_engine,b_mean,significance_level,half_width_confidence_interval\n\
27-
x86_64,benchmark.wasm,Execution,cycles,control.so,100.0,feature.so,110.0,0.05,1.3\n"
28+
"arch,wasm,phase,event,a_engine,a_engine_flags,a_mean,b_engine,b_engine_flags,b_mean,significance_level,half_width_confidence_interval\n\
29+
x86_64,benchmark.wasm,Execution,cycles,control.so,,100.0,feature.so,-Wfoo=bar,110.0,0.05,1.3\n"
2830
);
2931
}

0 commit comments

Comments
 (0)