Skip to content

Commit af8df13

Browse files
committed
Add unit tests for site::average
1 parent 4f7ac01 commit af8df13

File tree

1 file changed

+77
-1
lines changed

1 file changed

+77
-1
lines changed

site/src/average.rs

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ where
4343
}
4444
Some(point) => {
4545
count += 1;
46-
sum += point.value().expect("present");
46+
sum += point
47+
.value()
48+
.expect("Uninterpolated iterators are not supported");
4749
i += 1;
4850
if let Some(t) = &mut first {
4951
if point.interpolated() {
@@ -75,3 +77,77 @@ where
7577
}
7678
}
7779
}
80+
81+
#[cfg(test)]
82+
mod tests {
83+
use super::average;
84+
85+
#[test]
86+
fn test_no_interpolation_average() {
87+
// Test that averaging works without interpolation.
88+
use crate::db::Point;
89+
90+
let v = vec![
91+
vec![("a", 0.0), ("b", 200.0)],
92+
vec![("a", 100.0), ("b", 300.0)],
93+
];
94+
95+
let iterators: Vec<_> = v.into_iter().map(|v| v.into_iter()).collect();
96+
let mut average = average(iterators);
97+
98+
let a = average.next().unwrap();
99+
assert_eq!(a, ("a", 50.0));
100+
assert_eq!(a.interpolated(), false);
101+
102+
let b = average.next().unwrap();
103+
assert_eq!(b, ("b", 250.0));
104+
assert_eq!(b.interpolated(), false);
105+
106+
assert!(average.next().is_none());
107+
}
108+
109+
#[test]
110+
fn test_interpolation_average() {
111+
// Test that averaging works with interpolation.
112+
use crate::db::Point;
113+
use crate::interpolate::{Interpolate, Interpolated};
114+
115+
let v = vec![
116+
vec![("a", Some(0.0)), ("b", Some(200.0))],
117+
vec![("a", Some(100.0)), ("b", None)],
118+
];
119+
120+
let iterators: Vec<_> = v
121+
.into_iter()
122+
.map(|v| Interpolate::new(v.into_iter()))
123+
.collect();
124+
125+
let mut average = average(iterators);
126+
127+
let a = average.next().unwrap();
128+
assert_eq!(a, (("a", Some(50.0)), Interpolated::No));
129+
assert_eq!(a.interpolated(), false);
130+
131+
let b = average.next().unwrap();
132+
assert_eq!(b, (("b", Some(150.0)), Interpolated::Yes));
133+
assert_eq!(b.interpolated(), true);
134+
135+
assert!(average.next().is_none());
136+
}
137+
138+
#[test]
139+
#[should_panic(expected = "Uninterpolated iterators are not supported")]
140+
fn test_uninterpolated_iterator() {
141+
let v = vec![vec![("a", Some(1.0)), ("b", Some(2.0))], vec![("a", None)]];
142+
let iterators: Vec<_> = v.into_iter().map(|v| v.into_iter()).collect();
143+
let _ = average(iterators).next();
144+
}
145+
146+
#[test]
147+
#[should_panic(expected = "Not all iterators of the same length")]
148+
fn test_unequal_length_iterators() {
149+
let v = vec![vec![("a", 1.0), ("b", 2.0)], vec![("a", 3.0)]];
150+
let iterators: Vec<_> = v.into_iter().map(|v| v.into_iter()).collect();
151+
for _ in average(iterators) {}
152+
}
153+
}

0 commit comments

Comments
 (0)