@@ -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]
6063fn 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]
7299fn test_collect_edge_diff_iterators ( ) {
73100 let ts = make_treeseq ( ) ;
0 commit comments