#[test]
fn simple_table_collection_creation_with_newtype() {
let sequence_length = tskit::Position::from(100.0);
if let Ok(tables) = tskit::TableCollection::new(sequence_length) {
assert_eq!(tables.sequence_length(), sequence_length);
assert_eq!(tables.sequence_length(), 100.0);
} else {
panic!(
"TableCollection creation sequence length = {} failed",
sequence_length
);
}
}
#[test]
fn simple_table_collection_creation() {
let tables = tskit::TableCollection::new(100.0).unwrap();
assert_eq!(tables.sequence_length(), 100.0);
}
#[test]
fn add_node_without_metadata() {
{
let mut tables = tskit::TableCollection::new(100.0).unwrap();
if let Ok(node_id) = tables.add_node(
0, tskit::Time::from(0.0), tskit::PopulationId::NULL, tskit::IndividualId::NULL, ) {
assert_eq!(node_id, 0);
}
}
{
let mut tables = tskit::TableCollection::new(100.0).unwrap();
let node_id = tables.add_node(0, 0.0, -1, -1).unwrap();
assert_eq!(node_id, 0);
}
}
#[test]
fn add_node_handle_error() {
let mut tables = tskit::TableCollection::new(100.0).unwrap();
tables.add_edge(-1.0, 110.0, 0, 1).unwrap();
match tables.check_integrity(tskit::TableIntegrityCheckFlags::default()) {
Ok(code) => panic!("expected Err(e) but got code: {}", code),
Err(e) => println!("{}", e),
}
assert!(tables
.check_integrity(tskit::TableIntegrityCheckFlags::default())
.is_err());
}
#[test]
fn get_data_from_edge_table() {
use rand::distributions::Distribution;
use tskit::prelude::*;
let sequence_length = tskit::Position::from(100.0);
let mut rng = rand::thread_rng();
let random_pos = rand::distributions::Uniform::new::<f64, f64>(0., sequence_length.into());
let mut tables = tskit::TableCollection::new(sequence_length).unwrap();
let child = tables.add_node(0, 0.0, -1, -1).unwrap();
let parent = tables.add_node(0, 1.0, -1, -1).unwrap();
let mut left = tskit::Position::from(random_pos.sample(&mut rng));
let mut right = tskit::Position::from(random_pos.sample(&mut rng));
if left > right {
std::mem::swap(&mut left, &mut right);
}
if let Ok(edge_id) = tables.add_edge(left, right, parent, child) {
let edges = tables.edges();
if let Some(p) = edges.parent(edge_id) {
assert_eq!(p, parent);
}
if let Some(c) = edges.child(edge_id) {
assert_eq!(c, child);
}
if let Some(l) = edges.left(edge_id) {
assert_eq!(l, left);
}
if let Some(r) = edges.right(edge_id) {
assert_eq!(r, right);
}
} else {
panic!("that should have worked...");
}
assert!(tables.edges().parent(tskit::EdgeId::NULL).is_none());
let edge_id = tskit::EdgeId::from(0);
if let Some(row) = tables.edges().row(edge_id) {
assert_eq!(row.id, 0);
assert_eq!(row.left, left);
assert_eq!(row.right, right);
assert_eq!(row.parent, parent);
assert_eq!(row.child, child);
} else {
panic!("that should have worked...");
}
if let Some(row_view) = tables.edges().row_view(edge_id) {
assert_eq!(row_view.id, 0);
assert_eq!(row_view.left, left);
assert_eq!(row_view.right, right);
assert_eq!(row_view.parent, parent);
assert_eq!(row_view.child, child);
} else {
panic!("that should have worked...");
}
let mut edge_table_lending_iter = tables.edges().lending_iter();
while let Some(row_view) = edge_table_lending_iter.next() {
assert_eq!(row_view.id, 0);
assert_eq!(row_view.left, left);
assert_eq!(row_view.right, right);
assert_eq!(row_view.parent, parent);
assert_eq!(row_view.child, child);
assert!(row_view.metadata.is_none()); }
assert!(tables
.check_integrity(tskit::TableIntegrityCheckFlags::default())
.is_ok());
for row in tables.edges_iter() {
assert_eq!(row.id, 0);
assert_eq!(row.left, left);
assert_eq!(row.right, right);
assert_eq!(row.parent, parent);
assert_eq!(row.child, child);
}
assert!(tables
.check_integrity(tskit::TableIntegrityCheckFlags::default())
.is_ok());
}