#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

use Test::More;

my $tests;

BEGIN {
    use_ok('Lingua::MKD::Num2Word');
    $tests++;
}

use Lingua::MKD::Num2Word qw(num2mkd_cardinal);

my @cases = (
    [ 0,           'нула' ],
    [ 1,           'еден' ],
    [ 5,           'пет' ],
    [ 10,          'десет' ],
    [ 11,          'единаесет' ],
    [ 12,          'дванаесет' ],
    [ 19,          'деветнаесет' ],
    [ 20,          'дваесет' ],
    [ 23,          'дваесет и три' ],
    [ 50,          'педесет' ],
    [ 90,          'деведесет' ],
    [ 100,         'сто' ],
    [ 101,         'сто и еден' ],
    [ 120,         'сто и дваесет' ],
    [ 123,         'сто дваесет и три' ],
    [ 200,         'двесте' ],
    [ 300,         'триста' ],
    [ 400,         'четиристотини' ],
    [ 500,         'петстотини' ],
    [ 999,         'деветстотини деведесет и девет' ],
    [ 1000,        'илјада' ],
    [ 2000,        'две илјади' ],
    [ 3000,        'три илјади' ],
    [ 1001,        'илјада и еден' ],
    [ 1023,        'илјада и дваесет и три' ],
    [ 1100,        'илјада и сто' ],
    [ 1234,        'илјада двесте триесет и четири' ],
    [ 5678,        'пет илјади шестстотини седумдесет и осум' ],
    [ 1000000,     'еден милион' ],
    [ 2000000,     'два милиони' ],
    [ 5000000,     'пет милиони' ],
    [ 1001001,     'еден милион илјада и еден' ],
    [ 999999999,   'деветстотини деведесет и девет милиони деветстотини деведесет и девет илјади деветстотини деведесет и девет' ],
);

for my $case (@cases) {
    my ($num, $expected) = @$case;
    my $result = num2mkd_cardinal($num);
    is($result, $expected, "$num => $expected");
    $tests++;
}

# edge: croaks on invalid input
eval { num2mkd_cardinal(-1) };
ok($@, 'negative number croaks');
$tests++;

eval { num2mkd_cardinal(1_000_000_000) };
ok($@, 'number too large croaks');
$tests++;

eval { num2mkd_cardinal(undef) };
ok($@, 'undef croaks');
$tests++;

done_testing($tests);
