Skip to content

Commit 3c005c0

Browse files
committed
add tests
1 parent 440e22b commit 3c005c0

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

src/tree_interface.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ pub struct TreeInterface {
1515
num_nodes: tsk_size_t,
1616
array_len: tsk_size_t,
1717
flags: TreeFlags,
18-
nodes: crate::NodeTable,
1918
}
2019

2120
impl TreeInterface {
@@ -25,16 +24,11 @@ impl TreeInterface {
2524
array_len: tsk_size_t,
2625
flags: TreeFlags,
2726
) -> Self {
28-
let nodes = crate::NodeTable::new_from_table(
29-
&mut unsafe { *(*non_owned_pointer.as_ref().tree_sequence).tables }.nodes,
30-
)
31-
.expect("null pointer to tsk_node_table_t");
3227
Self {
3328
non_owned_pointer,
3429
num_nodes,
3530
array_len,
3631
flags,
37-
nodes,
3832
}
3933
}
4034

@@ -495,9 +489,9 @@ impl TreeInterface {
495489
/// (and the tree sequence from which it came).
496490
///
497491
/// This is a convenience function for accessing node times, etc..
498-
fn node_table(&self) -> &crate::NodeTable {
499-
&self.nodes
500-
}
492+
// fn node_table(&self) -> &crate::NodeTable {
493+
// &self.nodes
494+
// }
501495

502496
/// Calculate the total length of the tree via a preorder traversal.
503497
///
@@ -509,13 +503,19 @@ impl TreeInterface {
509503
///
510504
/// [`TskitError`] may be returned if a node index is out of range.
511505
pub fn total_branch_length(&self, by_span: bool) -> Result<Time, TskitError> {
512-
let nt = self.node_table();
506+
let time: &[Time] = sys::generate_slice(
507+
unsafe {
508+
(*(*(*self.non_owned_pointer.as_ptr()).tree_sequence).tables)
509+
.nodes
510+
.time
511+
},
512+
self.num_nodes,
513+
);
513514
let mut b = Time::from(0.);
514515
for n in self.traverse_nodes(NodeTraversalOrder::Preorder) {
515516
let p = self.parent(n).ok_or(TskitError::IndexError {})?;
516517
if p != NodeId::NULL {
517-
b += nt.time(p).ok_or(TskitError::IndexError {})?
518-
- nt.time(n).ok_or(TskitError::IndexError {})?;
518+
b += time[p.as_usize()] - time[n.as_usize()]
519519
}
520520
}
521521

tests/book_trees.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,23 @@ fn initialize_from_table_collection() {
149149
total_branch_lengths.push(tree.total_branch_length(false).unwrap());
150150
}
151151

152+
let mut tree_iterator = treeseq.tree_iterator(TreeFlags::default()).unwrap();
153+
let mut total_branch_lengths_ll = vec![];
154+
let mut x = 0.0;
155+
while let Some(tree) = tree_iterator.next() {
156+
let l =
157+
unsafe { tskit::bindings::tsk_tree_get_total_branch_length(tree.as_ptr(), -1, &mut x) };
158+
assert!(l >= 0);
159+
total_branch_lengths_ll.push(x);
160+
}
161+
162+
for (i, j) in total_branch_lengths
163+
.iter()
164+
.zip(total_branch_lengths_ll.iter())
165+
{
166+
assert_eq!(i, j, "{} {}", i, j);
167+
}
168+
152169
// ANCHOR: iterate_edge_differences
153170
if let Ok(mut edge_diff_iterator) = treeseq.edge_differences_iter() {
154171
while let Some(diffs) = edge_diff_iterator.next() {

0 commit comments

Comments
 (0)