abjad 0.5.0

Calculate the numerical abjad value of Arabic-script text
Documentation
use abjad::{Abjad, AbjadPrefs, LetterOrder};

#[test]
fn all() {
    let input = "ابجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ";

    let prefs_mashriqi = AbjadPrefs::default();
    let prefs_maghribi = AbjadPrefs {
        letter_order: LetterOrder::Maghribi,
        ..AbjadPrefs::default()
    };

    let total_mashriqi = input.abjad_strict(prefs_mashriqi).unwrap();
    let total_maghribi = input.abjad_strict(prefs_maghribi).unwrap();

    assert_eq!(total_mashriqi, 5_995);
    assert_eq!(total_mashriqi, total_maghribi);
}

#[test]
fn baha_count() {
    let input = "بهاء";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 9);
}

#[test]
fn baha_ignore() {
    let input = "بهاء";
    let prefs = AbjadPrefs {
        ignore_lone_hamzah: true,
        ..AbjadPrefs::default()
    };

    assert_eq!(input.abjad_strict(prefs).unwrap(), 8);
}

#[test]
fn basmala() {
    let input = "بسم الله الرحمن الرحيم";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 786);
}

#[test]
fn humayun() {
    let input = "همایون پادشاه از بام افتاد";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 962);
}

#[test]
fn latin() {
    let input = "the quick brown fox";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad(prefs), 0);
}

#[test]
fn latin_report() {
    let input = "the quick brown fox";
    let prefs = AbjadPrefs::default();

    let (total, errors) = input.abjad_collect_errors(prefs);

    assert_eq!(total, 0);
    assert_eq!(errors.len(), 16);
}

#[test]
fn mixture() {
    let input = "روح الله tapdancing خمینی";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad(prefs), 990);
}

#[test]
fn mixture_fail() {
    let input = "روح الله tapdancing خمینی";
    let prefs = AbjadPrefs::default();

    assert!(input.abjad_strict(prefs).is_err());
}

#[test]
fn mixture_report() {
    let input = "روح الله tapdancing خمینی";
    let prefs = AbjadPrefs::default();

    let (total, errors) = input.abjad_collect_errors(prefs);

    assert_eq!(total, 990);
    assert_eq!(errors.len(), 10);
}

#[test]
fn shaddah() {
    let input = "رئیس مؤسّس دانشگاه";
    let prefs = AbjadPrefs {
        count_shaddah: true,
        ..AbjadPrefs::default()
    };

    assert_eq!(input.abjad_strict(prefs).unwrap(), 887);
}

#[test]
fn tammamtu() {
    let input = "قد تمّمته";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 989);
}

#[test]
fn vahshi() {
    let input = "وفات وحشی مسکین";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 991);
}

#[test]
fn zwnj() {
    let input = "عادت می‌کنیم";
    let prefs = AbjadPrefs::default();

    assert_eq!(input.abjad_strict(prefs).unwrap(), 645);
}