extern crate crfsuite; use crfsuite::{Attribute, CrfError, Model}; #[test] fn test_open_model() { let model = Model::from_file("tests/model.crfsuite").unwrap(); let tagger = model.tagger().unwrap(); let _labels = tagger.labels().unwrap(); } #[test] fn test_open_not_existing_model_does_not_panic() { let ret = Model::from_file("tests/does-not-exists.crfsuite"); match ret { Err(CrfError::InvalidModel(..)) => {} _ => panic!("test fail"), } } #[test] fn test_dump_model() { let model = Model::from_file("tests/model.crfsuite").unwrap(); model.dump_file("tests/model.dump").unwrap(); } #[test] fn test_create_model_from_memory() { let model_memory = include_bytes!("model.crfsuite"); let model = Model::from_memory(&model_memory[..]).unwrap(); let mut tagger = model.tagger().unwrap(); let xseq = vec![ vec![Attribute::new("walk", 1.0), Attribute::new("shop", 0.5)], vec![Attribute::new("walk", 1.0)], vec![Attribute::new("walk", 1.0), Attribute::new("clean", 0.5)], vec![Attribute::new("shop", 0.5), Attribute::new("clean", 0.5)], vec![Attribute::new("walk", 0.5), Attribute::new("clean", 1.0)], vec![Attribute::new("clean", 1.0), Attribute::new("shop", 0.1)], vec![Attribute::new("walk", 1.0), Attribute::new("shop", 0.5)], vec![], vec![Attribute::new("clean", 1.0)], ]; let yseq = [ "sunny", "sunny", "sunny", "rainy", "rainy", "rainy", "sunny", "sunny", "rainy", ]; let res = tagger.tag(&xseq).unwrap(); assert_eq!(res, yseq); tagger.probability(&yseq).unwrap(); tagger.marginal("sunny", 1i32).unwrap(); } #[test] fn test_create_model_from_memory_invalid_model() { let ret = Model::from_memory(b""); match ret { Err(CrfError::InvalidModel(..)) => {} _ => panic!("test fail"), } let ret = Model::from_memory(b"abcdefg"); match ret { Err(CrfError::InvalidModel(..)) => {} _ => panic!("test fail"), } let ret = Model::from_memory(b"lCRF"); match ret { Err(CrfError::InvalidModel(..)) => {} _ => panic!("test fail"), } let ret = Model::from_memory(b"lCRFabcdefg"); match ret { Err(CrfError::InvalidModel(..)) => {} _ => panic!("test fail"), } } #[test] fn test_tag() { let model = Model::from_file("tests/model.crfsuite").unwrap(); let mut tagger = model.tagger().unwrap(); let xseq = vec![ vec![Attribute::new("walk", 1.0), Attribute::new("shop", 0.5)], vec![Attribute::new("walk", 1.0)], vec![Attribute::new("walk", 1.0), Attribute::new("clean", 0.5)], vec![Attribute::new("shop", 0.5), Attribute::new("clean", 0.5)], vec![Attribute::new("walk", 0.5), Attribute::new("clean", 1.0)], vec![Attribute::new("clean", 1.0), Attribute::new("shop", 0.1)], vec![Attribute::new("walk", 1.0), Attribute::new("shop", 0.5)], vec![], vec![Attribute::new("clean", 1.0)], ]; let yseq = [ "sunny", "sunny", "sunny", "rainy", "rainy", "rainy", "sunny", "sunny", "rainy", ]; let res = tagger.tag(&xseq).unwrap(); assert_eq!(res, yseq); tagger.probability(&yseq).unwrap(); tagger.marginal("sunny", 1i32).unwrap(); }