#![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),
"сто двадцять третє"
);
}