11#[ cfg( test) ]
22mod 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.
73 use crate :: simplify_tables_without_state;
84 use crate :: tsdef:: { IdType , Position , Time } ;
95 use crate :: wright_fisher:: * ;
@@ -12,25 +8,7 @@ mod test {
128 use crate :: SimplificationFlags ;
139 use crate :: SimplificationOutput ;
1410 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 ;
3412
3513 fn simulate_data (
3614 num_generations : Time ,
@@ -111,52 +89,44 @@ mod test {
11189 * i = 1 ;
11290 }
11391
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 (
11593 & tables,
11694 & is_sample,
11795 crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
11896 true ,
11997 ) ;
12098
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 ( ) ;
133109
134110 // 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 ) ;
160130 }
161131
162132 #[ test]
@@ -192,38 +162,30 @@ mod test {
192162 let sum_times_buffered: Time = tables_buffered. nodes_ . iter ( ) . map ( |x| x. time ) . sum ( ) ;
193163 assert_eq ! ( sum_times_sorted, sum_times_buffered) ;
194164
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 (
196166 & tables_sorted,
197167 & is_sample_sorted,
198168 crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
199169 true ,
200170 ) ;
201171
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 (
203173 & tables_buffered,
204174 & is_sample_buffered,
205175 crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
206176 true ,
207177 ) ;
208178
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 ) ;
227189 }
228190
229191 // The KC distance code will barf on trees where samples
@@ -264,31 +226,28 @@ mod test {
264226 let sum_times_buffered: Time = tables_buffered. nodes_ . iter ( ) . map ( |x| x. time ) . sum ( ) ;
265227 assert_eq ! ( sum_times_sorted, sum_times_buffered) ;
266228
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 (
268230 & tables_sorted,
269231 & is_sample_sorted,
270232 crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
271233 true ,
272234 ) ;
273235
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 (
275237 & tables_buffered,
276238 & is_sample_buffered,
277239 crate :: tskit_tools:: simple_time_reverser ( num_generations) ,
278240 true ,
279241 ) ;
280242
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( ) ) ;
293252 }
294253}
0 commit comments