From efd8617e3667e9ad859a04a920fd41d77374306a Mon Sep 17 00:00:00 2001 From: patchwright <292882882+patchwright@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:48:48 +0200 Subject: [PATCH] Fix Mongolian ordinal IndexError on zero MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit num2words(0, lang='mn', to='ordinal') and to='ordinal_num' raised IndexError because _get_ordinal_suffix indexed number_str[-2] on the single-character string '0'. The base contract accepts 0 (English returns 'zeroth'/'0th'; Dutch was fixed the same way in #365), so the Mongolian module should honour it too. Guard the tens-digit branch with a length check so 0 falls through to the default 'дугаар' suffix. --- num2words/lang_MN.py | 2 +- tests/test_mn.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/num2words/lang_MN.py b/num2words/lang_MN.py index d7cc3d40..e38bd9e8 100644 --- a/num2words/lang_MN.py +++ b/num2words/lang_MN.py @@ -240,7 +240,7 @@ def _get_ordinal_suffix(self, number): if number_str[-1] != '0': if number_str[-1] in ('1', '4', '9'): suffix = 'дүгээр' - elif number_str[-2] != '0': + elif len(number_str) > 1 and number_str[-2] != '0': if number_str[-2] in ('4', '9'): suffix = 'дүгээр' return suffix diff --git a/tests/test_mn.py b/tests/test_mn.py index 79c9ff87..a8bfc005 100644 --- a/tests/test_mn.py +++ b/tests/test_mn.py @@ -86,6 +86,15 @@ def test_to_ordinal(self): "нэг мянга дугаар" ) + def test_to_ordinal_zero(self): + # ordinal(0) must not crash; base.verify_ordinal accepts 0 (English + # returns "zeroth") and Mongolian should honour the same contract, + # falling back to the default "дугаар" suffix. + self.assertEqual( + num2words(0, lang='mn', to='ordinal'), + "тэг дугаар" + ) + def test_to_ordinal_num(self): self.assertEqual( num2words(105, lang='mn', to='ordinal_num'), @@ -97,6 +106,13 @@ def test_to_ordinal_num(self): "489 дүгээр" ) + def test_to_ordinal_num_zero(self): + # ordinal_num(0) must not crash; see test_to_ordinal_zero. + self.assertEqual( + num2words(0, lang='mn', to='ordinal_num'), + "0 дугаар" + ) + def test_to_year(self): self.assertEqual( num2words(2005, lang='mn', to="year"),