Skip to content

Commit 5ad489e

Browse files
committed
Add tests for Extend<(T, U)> for (ExtendT, ExtendU)
ordering of side-effects to `coretest`.
1 parent 2b50f11 commit 5ad489e

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#[test]
2+
fn test_extend_tuple_side_effects() {
3+
use std::cell::RefCell;
4+
use std::iter::zip;
5+
6+
struct TrackingExtender<'a, T>(
7+
&'static str,
8+
&'a RefCell<Vec<(&'static str, Vec<T>)>>,
9+
Vec<T>,
10+
);
11+
impl<T: Clone> Extend<T> for TrackingExtender<'_, T> {
12+
fn extend<I: IntoIterator<Item = T>>(&mut self, i: I) {
13+
let items = Vec::from_iter(i);
14+
self.1.borrow_mut().push((self.0, items.clone()));
15+
self.2.extend(items);
16+
}
17+
}
18+
19+
let effects = RefCell::new(vec![]);
20+
let l = TrackingExtender("l", &effects, vec![]);
21+
let r = TrackingExtender("r", &effects, vec![]);
22+
let mut p = ((l, r), ());
23+
p.extend(zip([(1, 2), (3, 4)], [(), ()]));
24+
let effects = effects.into_inner();
25+
assert_eq!(
26+
effects,
27+
[
28+
("l", vec![1]),
29+
("r", vec![2]),
30+
("l", vec![3]),
31+
("r", vec![4]),
32+
],
33+
);
34+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod accum;
2+
mod collect;
23
mod double_ended;
34
mod iterator;
45
mod step;

0 commit comments

Comments
 (0)