ukraine 1.1.0

Glory to Ukraine. Library for transliterating Ukrainian Cyrillic text into Latin script representation
Documentation
#![cfg(feature = "numbers")]

use ukraine::numbers::{to_ordinal_words, to_words, OrdinalGender};

#[test]
fn converts_basic_values() {
    assert_eq!(to_words(0), "нуль");
    assert_eq!(to_words(18), "вісімнадцять");
    assert_eq!(to_words(73), "сімдесят три");
}

#[test]
fn converts_thousands() {
    assert_eq!(to_words(3_204), "три тисячі двісті чотири");
}

#[test]
fn converts_large_numbers() {
    assert_eq!(
        to_words(12_345_678),
        "дванадцять мільйонів триста сорок п'ять тисяч шістсот сімдесят вісім"
    );
}

#[test]
fn converts_large_numbers_one_more_test() {
    assert_eq!(to_words(1_000_000_000_000), "один трильйон");
}

#[test]
fn zero() {
    assert_eq!(to_words(0), "нуль");
}

#[test]
fn basic_numbers() {
    assert_eq!(to_words(7), "сім");
    assert_eq!(to_words(11), "одинадцять");
    assert_eq!(to_words(42), "сорок два");
    assert_eq!(to_words(100), "сто");
    assert_eq!(to_words(101), "сто один");
    assert_eq!(to_words(215), "двісті п'ятнадцять");
}

#[test]
fn thousands() {
    assert_eq!(to_words(1_000), "одна тисяча");
    assert_eq!(to_words(2_500), "дві тисячі п'ятсот");
    assert_eq!(to_words(5_015), "п'ять тисяч п'ятнадцять");
}

#[test]
fn millions() {
    assert_eq!(
        to_words(1_234_567),
        "один мільйон двісті тридцять чотири тисячі п'ятсот шістдесят сім"
    );
}

#[test]
fn billions_and_trillions() {
    assert_eq!(to_words(5_000_000_000), "п'ять мільярдів");
    assert_eq!(to_words(1_000_000_000_100), "один трильйон сто");
}

#[test]
fn ordinal_basic_forms() {
    assert_eq!(to_ordinal_words(1, OrdinalGender::Masculine), "перший");
    assert_eq!(to_ordinal_words(2, OrdinalGender::Feminine), "друга");
    assert_eq!(to_ordinal_words(3, OrdinalGender::Neuter), "третє");
    assert_eq!(to_ordinal_words(0, OrdinalGender::Masculine), "нульовий");
}

#[test]
fn ordinal_compound_numbers() {
    assert_eq!(
        to_ordinal_words(21, OrdinalGender::Masculine),
        "двадцять перший"
    );
    assert_eq!(to_ordinal_words(45, OrdinalGender::Feminine), "сорок п'ята");
    assert_eq!(
        to_ordinal_words(112, OrdinalGender::Neuter),
        "сто дванадцяте"
    );
    assert_eq!(
        to_ordinal_words(256, OrdinalGender::Masculine),
        "двісті п'ятдесят шостий"
    );
}

#[test]
fn ordinal_round_numbers() {
    assert_eq!(to_ordinal_words(10, OrdinalGender::Masculine), "десятий");
    assert_eq!(to_ordinal_words(40, OrdinalGender::Feminine), "сорокова");
    assert_eq!(to_ordinal_words(90, OrdinalGender::Neuter), "дев'яносте");
    assert_eq!(
        to_ordinal_words(300, OrdinalGender::Masculine),
        "трьохсотий"
    );
}

#[test]
#[should_panic]
fn ordinal_unsupported_range_panics() {
    let _ = to_ordinal_words(1_000, OrdinalGender::Masculine);
}

#[test]
fn ordinal_with_words() {
    assert_eq!(
        to_ordinal_words(123, OrdinalGender::Feminine),
        "сто двадцять третя"
    );
    assert_eq!(
        to_ordinal_words(123, OrdinalGender::Masculine),
        "сто двадцять третій"
    );
    assert_eq!(
        to_ordinal_words(123, OrdinalGender::Neuter),
        "сто двадцять третє"
    );
}