Skip to content

Commit 7c68f28

Browse files
authored
fix: error during construction if sequence_length is not finite (#707)
1 parent a331968 commit 7c68f28

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/sys/table_collection.rs

+21
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ pub struct TableCollection(TskBox<tsk_table_collection_t>);
1616

1717
impl TableCollection {
1818
pub fn new(sequence_length: f64) -> Result<Self, TskitError> {
19+
if !sequence_length.is_finite() || sequence_length <= 0.0 {
20+
return Err(TskitError::ValueError {
21+
got: sequence_length.to_string(),
22+
expected: "sequence_length >= 0.0".to_string(),
23+
});
24+
}
1925
let mut tsk = TskBox::new(|tc: *mut tsk_table_collection_t| unsafe {
2026
tsk_table_collection_init(tc, 0)
2127
})?;
@@ -114,3 +120,18 @@ impl TableCollection {
114120
self.0.into_raw()
115121
}
116122
}
123+
124+
#[test]
125+
fn test_nan_sequence_length() {
126+
assert!(TableCollection::new(f64::NAN).is_err())
127+
}
128+
129+
#[test]
130+
fn test_inf_sequence_length() {
131+
assert!(TableCollection::new(f64::INFINITY).is_err())
132+
}
133+
134+
#[test]
135+
fn test_neg_inf_sequence_length() {
136+
assert!(TableCollection::new(f64::NEG_INFINITY).is_err())
137+
}

src/table_collection.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,7 @@ impl TableCollection {
8787
/// let tables = tskit::TableCollection::new(-55.0).unwrap();
8888
/// ```
8989
pub fn new<P: Into<Position>>(sequence_length: P) -> Result<Self, TskitError> {
90-
let sequence_length = sequence_length.into();
91-
if sequence_length <= 0. {
92-
return Err(TskitError::ValueError {
93-
got: f64::from(sequence_length).to_string(),
94-
expected: "sequence_length >= 0.0".to_string(),
95-
});
96-
}
97-
let mut inner = LLTableCollection::new(sequence_length.into())?;
90+
let mut inner = LLTableCollection::new(sequence_length.into().into())?;
9891
let views = crate::table_views::TableViews::new_from_ll_table_collection(&mut inner)?;
9992
Ok(Self {
10093
inner,

0 commit comments

Comments
 (0)