use rwer::{cer, process_chars};
#[test]
fn cer_basic() {
assert!(cer("hello", "hello") < 1e-10);
}
#[test]
fn cer_substitution() {
let result = cer("abc", "axc");
assert!((result - 1.0 / 3.0).abs() < 1e-10);
}
#[test]
fn cer_deletion() {
let result = cer("abc", "ac");
assert!((result - 1.0 / 3.0).abs() < 1e-10);
}
#[test]
fn cer_insertion() {
let result = cer("ac", "abc");
assert!((result - 1.0 / 2.0).abs() < 1e-10);
}
#[test]
fn cer_emoji() {
assert!(cer("hello ππ", "hello ππ") < 1e-10);
}
#[test]
fn cer_composed_vs_decomposed() {
let result = cer("\u{00E9}", "e\u{0301}");
assert!(result < 1e-10);
}
#[test]
fn cer_process_chars() {
let output = process_chars("abc", "axc");
assert!((output.cer - 1.0 / 3.0).abs() < 1e-10);
assert_eq!(output.ref_len, 3);
}
#[test]
fn cer_empty() {
assert!(cer("", "") < 1e-10);
assert!(cer("", "hello") < 1e-10);
}
#[test]
fn cer_cjk() {
assert!(cer("δ½ ε₯½", "δ½ ε₯½") < 1e-10);
let result = cer("δ½ ε₯½δΈη", "δ½ ε₯½ε°η");
assert!((result - 0.5).abs() < 1e-10);
}
#[test]
fn cer_longer_text() {
let result = cer("the quick brown fox", "the quick red fox");
assert!(result > 0.0 && result < 1.0);
}
#[test]
fn cer_consistency_with_process() {
let ref_text = "hello world";
let hyp_text = "hello earth";
assert!((cer(ref_text, hyp_text) - process_chars(ref_text, hyp_text).cer).abs() < 1e-10);
}