use super::*;
#[test]
fn falsify_sum_001_summary_length_bound() {
let text = "First sentence about machine learning. \
Second sentence about deep learning. \
Third sentence about neural networks. \
Fourth sentence about transformers. \
Fifth sentence about attention mechanisms.";
for max in 1..=3 {
let summarizer = TextSummarizer::new(SummarizationMethod::TfIdf, max);
let summary = summarizer.summarize(text).expect("summarize");
assert!(
summary.len() <= max,
"FALSIFIED SUM-001: summary has {} sentences, max was {}",
summary.len(),
max
);
}
}
#[test]
fn falsify_sum_002_extractive_subset_tfidf() {
let text = "Machine learning trains models. \
Deep learning uses neural networks. \
Transformers use attention mechanisms. \
GPT generates text tokens.";
let summarizer = TextSummarizer::new(SummarizationMethod::TfIdf, 2);
let summary = summarizer.summarize(text).expect("summarize");
for sent in &summary {
assert!(
text.contains(sent.trim()),
"FALSIFIED SUM-002: summary sentence '{}' not found in original text",
sent
);
}
}
#[test]
fn falsify_sum_002_extractive_subset_textrank() {
let text = "Machine learning trains models. \
Deep learning uses neural networks. \
Transformers use attention mechanisms. \
GPT generates text tokens.";
let summarizer = TextSummarizer::new(SummarizationMethod::TextRank, 2);
let summary = summarizer.summarize(text).expect("summarize");
for sent in &summary {
assert!(
text.contains(sent.trim()),
"FALSIFIED SUM-002: TextRank sentence '{}' not found in original text",
sent
);
}
}
#[test]
fn falsify_sum_003_empty_input() {
let summarizer = TextSummarizer::new(SummarizationMethod::TfIdf, 2);
let summary = summarizer.summarize("").expect("summarize empty");
assert!(
summary.is_empty(),
"FALSIFIED SUM-003: empty input produced {} sentences",
summary.len()
);
}
#[test]
fn falsify_sum_004_short_text_passthrough() {
let text = "First sentence. Second sentence.";
let summarizer = TextSummarizer::new(SummarizationMethod::TfIdf, 5); let summary = summarizer.summarize(text).expect("summarize");
assert_eq!(
summary.len(),
2,
"FALSIFIED SUM-004: short text with 2 sentences returned {} sentences (max=5)",
summary.len()
);
}
#[test]
fn falsify_sum_005_determinism() {
let text = "First sentence about machine learning. \
Second sentence about deep learning. \
Third sentence about neural networks. \
Fourth sentence about transformers.";
let summarizer = TextSummarizer::new(SummarizationMethod::TfIdf, 2);
let s1 = summarizer.summarize(text).expect("first");
let s2 = summarizer.summarize(text).expect("second");
assert_eq!(
s1, s2,
"FALSIFIED SUM-005: summarization is non-deterministic"
);
}
#[test]
fn falsify_sum_006_all_methods_produce_output() {
let text = "Machine learning is powerful. \
It solves complex problems. \
Deep learning extends machine learning. \
Neural networks are the foundation.";
let methods = [
SummarizationMethod::TfIdf,
SummarizationMethod::TextRank,
SummarizationMethod::Hybrid,
];
for method in &methods {
let summarizer = TextSummarizer::new(*method, 2);
let summary = summarizer.summarize(text).expect("summarize");
assert!(
!summary.is_empty(),
"FALSIFIED SUM-006: {:?} produced empty summary for non-empty text",
method
);
}
}