use super::*;
#[test]
fn falsify_st_001_idempotent() {
let stemmer = PorterStemmer::new();
let words = ["running", "studies", "easily", "caresses", "relational"];
for word in &words {
let once = stemmer.stem(word).expect("stem succeeds");
let twice = stemmer.stem(&once).expect("stem succeeds");
assert_eq!(
once, twice,
"FALSIFIED ST-001: stem({word})={once}, stem({once})={twice} — not idempotent"
);
}
}
#[test]
fn falsify_st_002_output_not_longer() {
let stemmer = PorterStemmer::new();
let words = [
"running",
"studies",
"flies",
"processing",
"generalization",
];
for word in &words {
let stemmed = stemmer.stem(word).expect("stem succeeds");
assert!(
stemmed.len() <= word.len(),
"FALSIFIED ST-002: stem({word})={stemmed} is longer ({} > {})",
stemmed.len(),
word.len()
);
}
}
#[test]
fn falsify_st_003_nonempty_output() {
let stemmer = PorterStemmer::new();
let words = ["a", "the", "running", "x"];
for word in &words {
let stemmed = stemmer.stem(word).expect("stem succeeds");
assert!(
!stemmed.is_empty(),
"FALSIFIED ST-003: stem({word}) returned empty string"
);
}
}
mod st_proptest_falsify {
use super::*;
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(20))]
#[test]
fn falsify_st_001_prop_idempotent(
seed in 0..500u32,
) {
let words = ["running", "studies", "easily", "caresses", "relational",
"flying", "happiness", "dogs", "played", "faster"];
let word = words[seed as usize % words.len()];
let stemmer = PorterStemmer::new();
let once = stemmer.stem(word).expect("stem 1");
let twice = stemmer.stem(&once).expect("stem 2");
prop_assert_eq!(
once, twice,
"FALSIFIED ST-001-prop: not idempotent for '{}'",
word
);
}
}
proptest! {
#![proptest_config(ProptestConfig::with_cases(20))]
#[test]
fn falsify_st_002_prop_not_longer(
seed in 0..500u32,
) {
let words = ["running", "studies", "easily", "caresses", "relational",
"generalization", "processing", "flies", "playing", "connected"];
let word = words[seed as usize % words.len()];
let stemmer = PorterStemmer::new();
let stemmed = stemmer.stem(word).expect("stem");
prop_assert!(
stemmed.len() <= word.len(),
"FALSIFIED ST-002-prop: stem('{}')='{}' is longer",
word, stemmed
);
}
}
}