Changed save to return Result

This commit is contained in:
Andrew Kane
2021-10-16 17:48:17 -07:00
parent 26160cfb9a
commit 616067367f
3 changed files with 18 additions and 5 deletions

View File

@@ -25,9 +25,14 @@ impl Model {
unsafe { mf_predict(self.model, row_index, column_index) }
}
pub fn save(&self, path: &str) {
pub fn save(&self, path: &str) -> Result<(), Error> {
let cpath = CString::new(path).expect("CString::new failed");
unsafe { mf_save_model(self.model, cpath.as_ptr()); }
let status = unsafe { mf_save_model(self.model, cpath.as_ptr()) };
if status != 0 {
Err(Error("Cannot save model".to_string()))
} else {
Ok(())
}
}
pub fn rows(&self) -> i32 {
@@ -137,7 +142,7 @@ mod tests {
let data = generate_data();
let model = Model::params().quiet(true).fit(&data).unwrap();
model.save("/tmp/model.txt");
model.save("/tmp/model.txt").unwrap();
let model = Model::load("/tmp/model.txt").unwrap();
model.p_factors();
@@ -145,6 +150,14 @@ mod tests {
model.bias();
}
#[test]
fn test_save_missing() {
let data = generate_data();
let model = Model::params().quiet(true).fit(&data).unwrap();
let result = model.save("/tmp/missing/model.txt");
assert!(result.is_err());
}
#[test]
fn test_load_missing() {
let result = Model::load("/tmp/missing.txt");