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

@@ -1,7 +1,7 @@
## 0.2.0 (unreleased)
- Changed pattern for fitting models - use `Model::params()` instead of `Model::new()`
- Changed `fit`, `fit_eval`, and `load` to return `Result`
- Changed `fit`, `fit_eval`, `save`, and `load` to return `Result`
## 0.1.1 (2021-07-27)

View File

@@ -51,7 +51,7 @@ model.bias();
Save the model to a file
```rust
model.save("model.txt");
model.save("model.txt").unwrap();
```
Load the model from a file

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");