extern crate self as snowball;
#[allow(dead_code)]
mod among;
#[allow(dead_code)]
mod snowball_env;
pub(crate) use among::Among;
pub(crate) use snowball_env::SnowballEnv;
#[allow(unused_assignments)]
pub(crate) mod algorithms;
mod algorithm;
mod dispatch;
mod error;
mod stemmer;
#[doc(inline)]
pub use algorithm::Algorithm;
#[doc(inline)]
pub use error::UnknownAlgorithm;
#[doc(inline)]
pub use stemmer::Stemmer;
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg(feature = "english")]
fn english_stem_basic() {
let s = Stemmer::new(Algorithm::English);
assert_eq!(s.stem("fruitlessly"), "fruitless");
assert_eq!(s.stem("connections"), "connect");
assert_eq!(s.stem("consign"), "consign");
}
#[test]
#[cfg(feature = "english")]
fn from_name_aliases() {
assert_eq!(Algorithm::from_name("en").unwrap(), Algorithm::English);
assert_eq!(Algorithm::from_name("ENG").unwrap(), Algorithm::English);
assert_eq!(Algorithm::from_name("english").unwrap(), Algorithm::English);
let s = Stemmer::try_from_name("en").unwrap();
assert_eq!(s.algorithm(), Algorithm::English);
assert_eq!(s.stem("running"), "run");
}
#[test]
fn unknown_algorithm() {
let err = Algorithm::from_name("not-a-lang").unwrap_err();
assert_eq!(err.name, "not-a-lang");
}
#[test]
fn all_algorithms_non_empty_with_defaults() {
assert!(!Algorithm::all().is_empty());
for algo in Algorithm::all() {
let stemmer = Stemmer::new(*algo);
let _ = stemmer.stem("");
let _ = stemmer.stem("a");
assert_eq!(stemmer.algorithm(), *algo);
assert_eq!(Algorithm::from_name(algo.name()).unwrap(), *algo);
}
}
#[test]
#[cfg(feature = "german")]
fn german_smoke() {
let s = Stemmer::new(Algorithm::German);
assert_eq!(s.stem("automaten"), "automat");
}
#[test]
#[cfg(feature = "porter")]
fn porter_distinct_from_english() {
let p = Stemmer::new(Algorithm::Porter);
assert_eq!(p.algorithm().name(), "porter");
let _ = p.stem("connection");
}
}