@@ -71,18 +71,58 @@ mod test_adding_rows_without_metadata {
71
71
Err ( e) => panic!( "Err from tables.{}: {:?}" , stringify!( adder) , e)
72
72
}
73
73
assert_eq!( tables. $table( ) . iter( ) . count( ) , 2 ) ;
74
+ tables
74
75
}
75
76
} } ;
76
77
}
77
78
79
+ macro_rules! compare_column_to_raw_column {
80
+ ( $table: expr, $col: ident, $raw: ident) => {
81
+ assert_eq!(
82
+ $table. $col( ) . len( ) ,
83
+ usize :: try_from( $table. num_rows( ) ) . unwrap( )
84
+ ) ;
85
+ assert_eq!(
86
+ $table. $raw( ) . len( ) ,
87
+ usize :: try_from( $table. num_rows( ) ) . unwrap( )
88
+ ) ;
89
+ assert!( $table
90
+ . $col( )
91
+ . iter( )
92
+ . zip( $table. $raw( ) . iter( ) )
93
+ . all( |( a, b) | a == b) )
94
+ } ;
95
+ }
96
+
97
+ macro_rules! compare_column_to_row {
98
+ ( $table: expr, $col: ident, $target: ident) => {
99
+ assert!( $table
100
+ . $col( )
101
+ . iter( )
102
+ . zip( $table. iter( ) )
103
+ . all( |( c, r) | c == & r. $target) ) ;
104
+ } ;
105
+ }
106
+
78
107
// NOTE: all functions arguments for adding rows are Into<T>
79
108
// where T is one of our new types.
80
109
// Further, functions taking multiple inputs of T are defined
81
110
// as X: Into<T>, X2: Into<T>, etc., allowing mix-and-match.
82
111
83
112
#[ test]
84
113
fn test_adding_edge ( ) {
85
- add_row_without_metadata ! ( edges, add_edge, 0.1 , 0.5 , 0 , 1 ) ; // left, right, parent, child
114
+ {
115
+ let tables = add_row_without_metadata ! ( edges, add_edge, 0.1 , 0.5 , 0 , 1 ) ; // left, right, parent, child
116
+ compare_column_to_raw_column ! ( tables. edges( ) , left_slice, left_slice_raw) ;
117
+ compare_column_to_raw_column ! ( tables. edges( ) , right_slice, right_slice_raw) ;
118
+ compare_column_to_raw_column ! ( tables. edges( ) , parent_slice, parent_slice_raw) ;
119
+ compare_column_to_raw_column ! ( tables. edges( ) , child_slice, child_slice_raw) ;
120
+
121
+ compare_column_to_row ! ( tables. edges( ) , left_slice, left) ;
122
+ compare_column_to_row ! ( tables. edges( ) , right_slice, right) ;
123
+ compare_column_to_row ! ( tables. edges( ) , parent_slice, parent) ;
124
+ compare_column_to_row ! ( tables. edges( ) , child_slice, child) ;
125
+ }
86
126
add_row_without_metadata ! ( edges, add_edge, tskit:: Position :: from( 0.1 ) , 0.5 , 0 , 1 ) ; // left, right, parent, child
87
127
add_row_without_metadata ! ( edges, add_edge, 0.1 , tskit:: Position :: from( 0.5 ) , 0 , 1 ) ; // left, right, parent, child
88
128
add_row_without_metadata ! (
@@ -105,8 +145,30 @@ mod test_adding_rows_without_metadata {
105
145
106
146
#[ test]
107
147
fn test_adding_node ( ) {
108
- add_row_without_metadata ! ( nodes, add_node, 0 , 0.1 , -1 , -1 ) ; // flags, time, population,
109
- // individual
148
+ {
149
+ let tables =
150
+ add_row_without_metadata ! ( nodes, add_node, tskit:: TSK_NODE_IS_SAMPLE , 0.1 , -1 , -1 ) ; // flags, time, population,
151
+ // individual
152
+ assert ! ( tables
153
+ . nodes( )
154
+ . flags_slice( )
155
+ . iter( )
156
+ . zip( tables. nodes( ) . flags_slice_raw( ) . iter( ) )
157
+ . all( |( a, b) | a. bits( ) == * b) ) ;
158
+ compare_column_to_raw_column ! ( tables. nodes( ) , time_slice, time_slice_raw) ;
159
+ compare_column_to_raw_column ! ( tables. nodes( ) , population_slice, population_slice_raw) ;
160
+ compare_column_to_raw_column ! ( tables. nodes( ) , individual_slice, individual_slice_raw) ;
161
+
162
+ assert ! ( tables
163
+ . nodes( )
164
+ . flags_slice( )
165
+ . iter( )
166
+ . zip( tables. nodes( ) . iter( ) )
167
+ . all( |( c, r) | c == & r. flags) ) ;
168
+ compare_column_to_row ! ( tables. nodes( ) , time_slice, time) ;
169
+ compare_column_to_row ! ( tables. nodes( ) , population_slice, population) ;
170
+ compare_column_to_row ! ( tables. nodes( ) , individual_slice, individual) ;
171
+ }
110
172
add_row_without_metadata ! (
111
173
nodes,
112
174
add_node,
@@ -120,7 +182,11 @@ mod test_adding_rows_without_metadata {
120
182
#[ test]
121
183
fn test_adding_site ( ) {
122
184
// No ancestral state
123
- add_row_without_metadata ! ( sites, add_site, 2. / 3. , None ) ;
185
+ {
186
+ let tables = add_row_without_metadata ! ( sites, add_site, 2. / 3. , None ) ;
187
+ compare_column_to_raw_column ! ( tables. sites( ) , position_slice, position_slice_raw) ;
188
+ compare_column_to_row ! ( tables. sites( ) , position_slice, position) ;
189
+ }
124
190
add_row_without_metadata ! ( sites, add_site, tskit:: Position :: from( 2. / 3. ) , None ) ;
125
191
add_row_without_metadata ! ( sites, add_site, 2. / 3. , Some ( & [ 1_u8 ] ) ) ;
126
192
add_row_without_metadata ! (
@@ -136,14 +202,40 @@ mod test_adding_rows_without_metadata {
136
202
// site, node, parent mutation, time, derived_state
137
203
// Each value is a different Into<T> so we skip doing
138
204
// permutations
139
- add_row_without_metadata ! ( mutations, add_mutation, 0 , 0 , -1 , 0.0 , None ) ;
205
+ {
206
+ let tables = add_row_without_metadata ! ( mutations, add_mutation, 0 , 0 , -1 , 0.0 , None ) ;
207
+ compare_column_to_raw_column ! ( tables. mutations( ) , node_slice, node_slice_raw) ;
208
+ compare_column_to_raw_column ! ( tables. mutations( ) , time_slice, time_slice_raw) ;
209
+ compare_column_to_raw_column ! ( tables. mutations( ) , site_slice, site_slice_raw) ;
210
+ compare_column_to_raw_column ! ( tables. mutations( ) , parent_slice, parent_slice_raw) ;
211
+
212
+ compare_column_to_row ! ( tables. mutations( ) , node_slice, node) ;
213
+ compare_column_to_row ! ( tables. mutations( ) , time_slice, time) ;
214
+ compare_column_to_row ! ( tables. mutations( ) , site_slice, site) ;
215
+ compare_column_to_row ! ( tables. mutations( ) , parent_slice, parent) ;
216
+ }
217
+
140
218
add_row_without_metadata ! ( mutations, add_mutation, 0 , 0 , -1 , 0.0 , Some ( & [ 23_u8 ] ) ) ;
141
219
}
142
220
143
221
#[ test]
144
222
fn test_adding_individual ( ) {
145
223
// flags, location, parents
146
- add_row_without_metadata ! ( individuals, add_individual, 0 , None , None ) ;
224
+ {
225
+ let tables = add_row_without_metadata ! ( individuals, add_individual, 0 , None , None ) ;
226
+ assert ! ( tables
227
+ . individuals( )
228
+ . flags_slice( )
229
+ . iter( )
230
+ . zip( tables. individuals( ) . flags_slice_raw( ) . iter( ) )
231
+ . all( |( a, b) | a. bits( ) == * b) ) ;
232
+ assert ! ( tables
233
+ . individuals( )
234
+ . flags_slice( )
235
+ . iter( )
236
+ . zip( tables. individuals( ) . iter( ) )
237
+ . all( |( c, r) | c == & r. flags) ) ;
238
+ }
147
239
add_row_without_metadata ! (
148
240
individuals,
149
241
add_individual,
@@ -179,7 +271,23 @@ mod test_adding_rows_without_metadata {
179
271
fn test_adding_migration ( ) {
180
272
// migration table
181
273
// (left, right), node, (source, dest), time
182
- add_row_without_metadata ! ( migrations, add_migration, ( 0. , 1. ) , 0 , ( 0 , 1 ) , 0.0 ) ;
274
+ {
275
+ let tables =
276
+ add_row_without_metadata ! ( migrations, add_migration, ( 0. , 1. ) , 0 , ( 0 , 1 ) , 0.0 ) ;
277
+ compare_column_to_raw_column ! ( tables. migrations( ) , left_slice, left_slice_raw) ;
278
+ compare_column_to_raw_column ! ( tables. migrations( ) , right_slice, right_slice_raw) ;
279
+ compare_column_to_raw_column ! ( tables. migrations( ) , node_slice, node_slice_raw) ;
280
+ compare_column_to_raw_column ! ( tables. migrations( ) , time_slice, time_slice_raw) ;
281
+ compare_column_to_raw_column ! ( tables. migrations( ) , source_slice, source_slice_raw) ;
282
+ compare_column_to_raw_column ! ( tables. migrations( ) , dest_slice, dest_slice_raw) ;
283
+
284
+ compare_column_to_row ! ( tables. migrations( ) , left_slice, left) ;
285
+ compare_column_to_row ! ( tables. migrations( ) , right_slice, right) ;
286
+ compare_column_to_row ! ( tables. migrations( ) , node_slice, node) ;
287
+ compare_column_to_row ! ( tables. migrations( ) , time_slice, time) ;
288
+ compare_column_to_row ! ( tables. migrations( ) , source_slice, source) ;
289
+ compare_column_to_row ! ( tables. migrations( ) , dest_slice, dest) ;
290
+ }
183
291
add_row_without_metadata ! (
184
292
migrations,
185
293
add_migration,
0 commit comments