1
1
#[ cfg( test) ]
2
2
mod test {
3
- // NOTE: Currently, these tests are both testing
4
- // stuff from tskit and forrusts, which isn't great.
5
- // We'll clean this up later when we get better abstractions
6
- // into tskit.
7
3
use crate :: simplify_tables_without_state;
8
4
use crate :: tsdef:: { IdType , Position , Time } ;
9
5
use crate :: wright_fisher:: * ;
@@ -12,25 +8,7 @@ mod test {
12
8
use crate :: SimplificationFlags ;
13
9
use crate :: SimplificationOutput ;
14
10
use crate :: TableCollection ;
15
- use std:: mem:: MaybeUninit ;
16
- use tskit:: bindings as tskr;
17
- use tskit:: ffi:: TskitType ;
18
-
19
- fn tables_to_treeseq ( tables : & mut tskit:: TableCollection ) -> MaybeUninit < tskr:: tsk_treeseq_t > {
20
- let mut tsk_ts: MaybeUninit < tskr:: tsk_treeseq_t > = MaybeUninit :: uninit ( ) ;
21
- unsafe {
22
- let rv = tskr:: tsk_table_collection_build_index ( tables. as_mut_ptr ( ) , 0 ) ;
23
- assert_eq ! ( rv, 0 ) ;
24
- let rv = tskr:: tsk_treeseq_init (
25
- tsk_ts. as_mut_ptr ( ) ,
26
- tables. as_ptr ( ) ,
27
- tskr:: TSK_SAMPLE_LISTS ,
28
- ) ;
29
- assert_eq ! ( rv, 0 ) ;
30
- }
31
-
32
- tsk_ts
33
- }
11
+ use tskit:: TableAccess ;
34
12
35
13
fn simulate_data (
36
14
num_generations : Time ,
@@ -111,52 +89,44 @@ mod test {
111
89
* i = 1 ;
112
90
}
113
91
114
- let mut simplified_rust_tables = crate :: tskit_tools:: convert_to_tskit_minimal (
92
+ let simplified_rust_tables = crate :: tskit_tools:: convert_to_tskit_minimal (
115
93
& tables,
116
94
& is_sample,
117
95
crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
118
96
true ,
119
97
) ;
120
98
121
- unsafe {
122
- let rv = tskr:: tsk_table_collection_sort ( tsk_tables. as_mut_ptr ( ) , std:: ptr:: null ( ) , 0 ) ;
123
- assert ! ( rv == 0 ) ;
124
- let rv = tskr:: tsk_table_collection_simplify (
125
- tsk_tables. as_mut_ptr ( ) ,
126
- samples. samples . as_ptr ( ) ,
127
- samples. samples . len ( ) as u32 ,
128
- 0 ,
129
- std:: ptr:: null_mut ( ) ,
130
- ) ;
131
- assert ! ( rv == 0 ) ;
132
- }
99
+ tsk_tables
100
+ . full_sort ( tskit:: TableSortOptions :: default ( ) )
101
+ . unwrap ( ) ;
102
+ tsk_tables
103
+ . simplify (
104
+ & samples. samples ,
105
+ tskit:: SimplificationOptions :: default ( ) ,
106
+ false ,
107
+ )
108
+ . unwrap ( ) ;
133
109
134
110
// Get tree sequences now
135
- let mut tsk_ts = tables_to_treeseq ( & mut tsk_tables) ;
136
- let mut rust_ts = tables_to_treeseq ( & mut simplified_rust_tables) ;
137
-
138
- unsafe {
139
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( tsk_ts. as_ptr( ) ) ) ;
140
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( rust_ts. as_ptr( ) ) ) ;
141
- let ne = tskr:: tsk_treeseq_get_num_edges ( tsk_ts. as_ptr ( ) ) ;
142
- let ne2 = tskr:: tsk_treeseq_get_num_edges ( rust_ts. as_ptr ( ) ) ;
143
- assert_eq ! ( ne, ne2) ;
144
- let nn = tskr:: tsk_treeseq_get_num_nodes ( tsk_ts. as_ptr ( ) ) ;
145
- let nn2 = tskr:: tsk_treeseq_get_num_nodes ( rust_ts. as_ptr ( ) ) ;
146
- assert_eq ! ( nn, nn2) ;
147
-
148
- // We expect the rv to be 0,
149
- // so let's init it to something else
150
- let mut kc: f64 = -1. ;
151
- let kcp: * mut f64 = & mut kc;
152
- let rv =
153
- tskr:: tsk_treeseq_kc_distance ( tsk_ts. as_mut_ptr ( ) , rust_ts. as_mut_ptr ( ) , 0. , kcp) ;
154
- assert_eq ! ( rv, 0 ) ;
155
- assert ! ( ( kc - 0. ) . abs( ) < f64 :: EPSILON ) ;
156
-
157
- tskr:: tsk_treeseq_free ( tsk_ts. as_mut_ptr ( ) ) ;
158
- tskr:: tsk_treeseq_free ( rust_ts. as_mut_ptr ( ) ) ;
159
- }
111
+ let tsk_ts = tsk_tables
112
+ . tree_sequence ( tskit:: TreeSequenceFlags :: BUILD_INDEXES )
113
+ . unwrap ( ) ;
114
+
115
+ let rust_ts = simplified_rust_tables
116
+ . tree_sequence ( tskit:: TreeSequenceFlags :: BUILD_INDEXES )
117
+ . unwrap ( ) ;
118
+
119
+ assert_eq ! ( 500 , tsk_ts. num_samples( ) ) ;
120
+ assert_eq ! ( 500 , rust_ts. num_samples( ) ) ;
121
+ let ne = tsk_ts. edges ( ) . num_rows ( ) ;
122
+ let ne2 = rust_ts. edges ( ) . num_rows ( ) ;
123
+ assert_eq ! ( ne, ne2) ;
124
+ let nn = tsk_ts. nodes ( ) . num_rows ( ) ;
125
+ let nn2 = rust_ts. nodes ( ) . num_rows ( ) ;
126
+ assert_eq ! ( nn, nn2) ;
127
+
128
+ let kc = tsk_ts. kc_distance ( & & rust_ts, 0. ) . unwrap ( ) ;
129
+ assert ! ( ( kc - 0. ) . abs( ) < f64 :: EPSILON ) ;
160
130
}
161
131
162
132
#[ test]
@@ -192,38 +162,30 @@ mod test {
192
162
let sum_times_buffered: Time = tables_buffered. nodes_ . iter ( ) . map ( |x| x. time ) . sum ( ) ;
193
163
assert_eq ! ( sum_times_sorted, sum_times_buffered) ;
194
164
195
- let mut tables_sorted_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
165
+ let tables_sorted_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
196
166
& tables_sorted,
197
167
& is_sample_sorted,
198
168
crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
199
169
true ,
200
170
) ;
201
171
202
- let mut tables_buffered_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
172
+ let tables_buffered_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
203
173
& tables_buffered,
204
174
& is_sample_buffered,
205
175
crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
206
176
true ,
207
177
) ;
208
178
209
- let mut sorted_ts = tables_to_treeseq ( & mut tables_sorted_tskit) ;
210
- let mut buffered_ts = tables_to_treeseq ( & mut tables_buffered_tskit) ;
211
- unsafe {
212
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( sorted_ts. as_ptr( ) ) ) ;
213
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( buffered_ts. as_ptr( ) ) ) ;
214
- let mut kc: f64 = -1. ;
215
- let kcp: * mut f64 = & mut kc;
216
- let rv = tskr:: tsk_treeseq_kc_distance (
217
- sorted_ts. as_mut_ptr ( ) ,
218
- buffered_ts. as_mut_ptr ( ) ,
219
- 0. ,
220
- kcp,
221
- ) ;
222
- assert_eq ! ( rv, 0 ) ;
223
- assert ! ( ( kc - 0. ) . abs( ) < f64 :: EPSILON ) ;
224
- tskr:: tsk_treeseq_free ( sorted_ts. as_mut_ptr ( ) ) ;
225
- tskr:: tsk_treeseq_free ( buffered_ts. as_mut_ptr ( ) ) ;
226
- }
179
+ let sorted_ts = tables_sorted_tskit
180
+ . tree_sequence ( tskit:: TreeSequenceFlags :: default ( ) )
181
+ . unwrap ( ) ;
182
+ let buffered_ts = tables_buffered_tskit
183
+ . tree_sequence ( tskit:: TreeSequenceFlags :: default ( ) )
184
+ . unwrap ( ) ;
185
+ assert_eq ! ( 500 , sorted_ts. num_samples( ) ) ;
186
+ assert_eq ! ( 500 , buffered_ts. num_samples( ) ) ;
187
+ let kc = sorted_ts. kc_distance ( & & buffered_ts, 0. ) . unwrap ( ) ;
188
+ assert ! ( ( kc - 0. ) . abs( ) < f64 :: EPSILON ) ;
227
189
}
228
190
229
191
// The KC distance code will barf on trees where samples
@@ -264,31 +226,28 @@ mod test {
264
226
let sum_times_buffered: Time = tables_buffered. nodes_ . iter ( ) . map ( |x| x. time ) . sum ( ) ;
265
227
assert_eq ! ( sum_times_sorted, sum_times_buffered) ;
266
228
267
- let mut tables_sorted_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
229
+ let tables_sorted_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
268
230
& tables_sorted,
269
231
& is_sample_sorted,
270
232
crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
271
233
true ,
272
234
) ;
273
235
274
- let mut tables_buffered_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
236
+ let tables_buffered_tskit = crate :: tskit_tools:: convert_to_tskit_minimal (
275
237
& tables_buffered,
276
238
& is_sample_buffered,
277
239
crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
278
240
true ,
279
241
) ;
280
242
281
- let mut sorted_ts = tables_to_treeseq ( & mut tables_sorted_tskit) ;
282
- let mut buffered_ts = tables_to_treeseq ( & mut tables_buffered_tskit) ;
283
- unsafe {
284
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( sorted_ts. as_ptr( ) ) ) ;
285
- assert_eq ! ( 500 , tskr:: tsk_treeseq_get_num_samples( buffered_ts. as_ptr( ) ) ) ;
286
- assert_eq ! (
287
- tskr:: tsk_treeseq_get_num_trees( sorted_ts. as_ptr( ) ) ,
288
- tskr:: tsk_treeseq_get_num_trees( buffered_ts. as_ptr( ) )
289
- ) ;
290
- tskr:: tsk_treeseq_free ( sorted_ts. as_mut_ptr ( ) ) ;
291
- tskr:: tsk_treeseq_free ( buffered_ts. as_mut_ptr ( ) ) ;
292
- }
243
+ let sorted_ts = tables_sorted_tskit
244
+ . tree_sequence ( tskit:: TreeSequenceFlags :: default ( ) )
245
+ . unwrap ( ) ;
246
+ let buffered_ts = tables_buffered_tskit
247
+ . tree_sequence ( tskit:: TreeSequenceFlags :: default ( ) )
248
+ . unwrap ( ) ;
249
+ assert_eq ! ( 500 , sorted_ts. num_samples( ) ) ;
250
+ assert_eq ! ( 500 , buffered_ts. num_samples( ) ) ;
251
+ assert_eq ! ( sorted_ts. num_trees( ) , buffered_ts. num_trees( ) ) ;
293
252
}
294
253
}
0 commit comments