Skip to content

Commit dabb80d

Browse files
committed
progress
1 parent 4a484fc commit dabb80d

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

tests/test_edge_difference_iteration.rs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,45 @@ fn make_treeseq() -> tskit::TreeSequence {
5656
.unwrap()
5757
}
5858

59+
// A fundamental property of iterators is that their Items
60+
// are collectible into objects that are valid to use later.
61+
5962
#[test]
6063
fn test_collected_edge_insertions() {
6164
let ts = make_treeseq();
65+
// The ergonomics here seem a bit ugly but it is a corner case?
6266
let insertions = ts
6367
.edge_differences_iter()
6468
.flat_map(|d| d.insertions().collect::<Vec<_>>())
6569
.collect::<Vec<_>>();
6670
assert_eq!(insertions.len(), ts.edge_insertion_order().len());
71+
for (i, j) in insertions.iter().zip(ts.edge_insertion_order().iter()) {
72+
assert_eq!(
73+
i.parent(),
74+
ts.tables().edges().parent_column()[j.as_usize()]
75+
);
76+
assert_eq!(i.child(), ts.tables().edges().child_column()[j.as_usize()]);
77+
assert_eq!(i.left(), ts.tables().edges().left_column()[j.as_usize()]);
78+
assert_eq!(i.right(), ts.tables().edges().right_column()[j.as_usize()]);
79+
}
80+
81+
// Better ergonomics
82+
let mut insertions = vec![];
83+
for diffs in ts.edge_differences_iter() {
84+
insertions.extend(diffs.insertions());
85+
}
86+
assert_eq!(insertions.len(), ts.edge_insertion_order().len());
87+
for (i, j) in insertions.iter().zip(ts.edge_insertion_order().iter()) {
88+
assert_eq!(
89+
i.parent(),
90+
ts.tables().edges().parent_column()[j.as_usize()]
91+
);
92+
assert_eq!(i.child(), ts.tables().edges().child_column()[j.as_usize()]);
93+
assert_eq!(i.left(), ts.tables().edges().left_column()[j.as_usize()]);
94+
assert_eq!(i.right(), ts.tables().edges().right_column()[j.as_usize()]);
95+
}
6796
}
6897

69-
// A fundamental property of iterators is that their Items
70-
// are collectible into objects that are valid to use later.
7198
#[test]
7299
fn test_collect_edge_diff_iterators() {
73100
let ts = make_treeseq();

0 commit comments

Comments
 (0)