phonetics 0.1.0

Phonetic algorithms for encoding and comparing strings.
Documentation
use phonetics::{
    Metaphone,
    metaphone::{metaphone, metaphone_metric},
};

#[test]
fn test_metaphone() {
    let m = Metaphone::new();
    assert_eq!(m.encode("smith").unwrap(), "sm0");
    assert_eq!(m.encode("Schmidt").unwrap(), "skhmtt");
    assert_eq!(m.encode("johnson").unwrap(), "jhnsn");
    assert_eq!(m.encode("Jones").unwrap(), "jns");
    assert_eq!(m.encode("white").unwrap(), "wt");
}

#[test]
fn test_metaphone_compare() {
    let m = Metaphone::new();
    assert!(m.compare("smith", "Schmidt").unwrap() == false);
    assert!(m.compare("johnson", "Johnston").unwrap() == false);
    assert!(m.compare("white", "wight").unwrap() == false);
    assert!(m.compare("knight", "night").unwrap() == true);
}

#[test]
fn test_function_api() {
    assert_eq!(metaphone("phone").unwrap(), "fn");
    assert_eq!(metaphone("knight").unwrap(), "nht");
    assert_eq!(metaphone("psychology").unwrap(), "psxlj");
    assert_eq!(metaphone("beautiful").unwrap(), "btfl");

    assert!(metaphone_metric("white", "wight").unwrap() == false);
    assert!(metaphone_metric("knight", "night").unwrap() == true);
}

#[test]
fn test_de_duplicate() {
    let m = Metaphone::new();
    assert_eq!(m.de_duplicate("aabbbbc"), "abc");
    assert_eq!(m.de_duplicate("hello"), "helo");
    assert_eq!(m.de_duplicate("bookkeeper"), "bokeper");
}

#[test]
fn test_error_handling() {
    let m = Metaphone::new();
    assert!(m.encode("").is_err());
    assert!(m.encode("123").is_err());
    assert!(m.compare("", "test").is_err());
    assert!(m.compare("test", "123").is_err());
}