#[cfg(test)]
mod tests {
use super::super::utils::*;
#[test]
fn test_contains_thinking_tags() {
assert!(contains_thinking_tags("Hello <think>"));
assert!(contains_thinking_tags("</think> Hello"));
assert!(contains_thinking_tags("<think>thinking</think>"));
assert!(!contains_thinking_tags("Hello world"));
assert!(!contains_thinking_tags(""));
}
#[test]
fn test_extract_thinking_content() {
let input = "<think>This is thinking</think>Hello world";
let result = extract_thinking_content(input);
assert_eq!(result, Some("This is thinking".to_string()));
let input = "<think>\nThis is\nmultiline thinking\n</think>Hello world";
let result = extract_thinking_content(input);
assert_eq!(result, Some("This is\nmultiline thinking".to_string()));
let input = "Hello world";
let result = extract_thinking_content(input);
assert_eq!(result, None);
let input = "<think></think>Hello world";
let result = extract_thinking_content(input);
assert_eq!(result, None);
let input = "<think> </think>Hello world";
let result = extract_thinking_content(input);
assert_eq!(result, None);
}
#[test]
fn test_filter_thinking_content() {
let input = "<think>This is thinking</think>Hello world";
let result = filter_thinking_content(input);
assert_eq!(result, "Hello world");
let input = "<think>First</think>Hello<think>Second</think>World";
let result = filter_thinking_content(input);
assert_eq!(result, "HelloWorld");
let input = "<think>\nThis is\nmultiline thinking\n</think>Hello world";
let result = filter_thinking_content(input);
assert_eq!(result, "Hello world");
let input = "Hello world";
let result = filter_thinking_content(input);
assert_eq!(result, "Hello world");
let input = "<think>Only thinking</think>";
let result = filter_thinking_content(input);
assert_eq!(result, "");
}
#[test]
fn test_extract_content_without_thinking() {
let input = "<think>This is thinking</think>Hello world";
let result = extract_content_without_thinking(input);
assert_eq!(result, "Hello world");
let input = "Hello world";
let result = extract_content_without_thinking(input);
assert_eq!(result, "Hello world");
}
#[test]
fn test_deepseek_style_thinking() {
let input = r#"<think>
用户询问了一个关于编程的问题。
我需要:
1. 分析问题的核心
2. 提供清晰的解释
3. 给出实用的示例
</think>
这是一个很好的编程问题。让我来解释一下..."#;
let thinking = extract_thinking_content(input);
assert!(thinking.is_some());
assert!(thinking.unwrap().contains("用户询问了一个关于编程的问题"));
let filtered = filter_thinking_content(input);
assert!(!filtered.contains("<think>"));
assert!(filtered.contains("这是一个很好的编程问题"));
}
#[test]
fn test_edge_cases() {
let input = "<think>Incomplete thinking";
let result = extract_thinking_content(input);
assert_eq!(result, None);
let input = "<think>Outer <think>Inner</think> thinking</think>";
let result = extract_thinking_content(input);
assert!(result.is_some());
let result = extract_thinking_content("");
assert_eq!(result, None);
let result = filter_thinking_content("");
assert_eq!(result, "");
}
}