diff --git a/README.md b/README.md index d65bcaf5..e44eb9ea 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy * 🇷🇸 Serbian (Latin) * 🇸🇰 Slovak * 🇪🇸 Spanish +* 🇸🇪 Swedish * 🇹🇷 Turkish * 🇺🇦 Ukrainian diff --git a/src/main/java/pl/allegro/finance/tradukisto/LongValueConverters.java b/src/main/java/pl/allegro/finance/tradukisto/LongValueConverters.java index 45f6faff..3f52bb4d 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/LongValueConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/LongValueConverters.java @@ -7,13 +7,15 @@ import static pl.allegro.finance.tradukisto.internal.Container.englishContainer; import static pl.allegro.finance.tradukisto.internal.Container.polishContainer; import static pl.allegro.finance.tradukisto.internal.Container.hindiContainer; +import static pl.allegro.finance.tradukisto.internal.Container.swedishContainer; public enum LongValueConverters { CROATIAN_LONG(croatianContainer().getLongConverter()), ENGLISH_LONG(englishContainer().getLongConverter()), POLISH_LONG(polishContainer().getLongConverter()), - HINDI_LONG(hindiContainer().getLongConverter()); + HINDI_LONG(hindiContainer().getLongConverter()), + SWEDISH_LONG(swedishContainer().getLongConverter()); private final LongToStringConverter converter; diff --git a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java index c0132f2f..c7d45793 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java @@ -22,10 +22,12 @@ import static pl.allegro.finance.tradukisto.internal.Container.serbianContainer; import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer; import static pl.allegro.finance.tradukisto.internal.Container.spanishContainer; +import static pl.allegro.finance.tradukisto.internal.Container.swedishContainer; import static pl.allegro.finance.tradukisto.internal.Container.turkishContainer; import static pl.allegro.finance.tradukisto.internal.Container.ukrainianContainer; import static pl.allegro.finance.tradukisto.internal.Container.bulgarianContainer; import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer; + public enum MoneyConverters { BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE(brazilianPortugueseContainer().getBankingMoneyConverter()), @@ -48,8 +50,8 @@ public enum MoneyConverters { BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()), DUTCH_BANKING_MONEY_VALUE(dutchContainer().getBankingMoneyConverter()), SPANISH_BANKING_MONEY_VALUE(spanishContainer().getBankingMoneyConverter()), - HINDI_BANKING_MONEY_VALUE(Container.hindiContainer().getBankingMoneyConverter()); - + HINDI_BANKING_MONEY_VALUE(Container.hindiContainer().getBankingMoneyConverter()), + SWEDISH_BANKING_MONEY_VALUE(swedishContainer().getBankingMoneyConverter()); private final BigDecimalToStringConverter converter; diff --git a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java index 1d8a936e..893ee46e 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java @@ -31,7 +31,8 @@ public enum ValueConverters { TURKISH_INTEGER(Container.turkishContainer().getIntegerConverter(), "tr"), DUTCH_INTEGER(Container.dutchContainer().getIntegerConverter(), "nl"), SPANISH_INTEGER(Container.spanishContainer().getIntegerConverter(), "es"), - HINDI_INTEGER(Container.hindiContainer().getIntegerConverter(), "hi"); + HINDI_INTEGER(Container.hindiContainer().getIntegerConverter(), "hi"), + SWEDISH_INTEGER(Container.swedishContainer().getIntegerConverter(), "sv"); private final IntegerToStringConverter converter; private final List languageCodes; diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java index 12fd90a5..4c95252b 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java @@ -41,6 +41,8 @@ import pl.allegro.finance.tradukisto.internal.languages.spanish.SpanishIntegerToWordsConverterAdapter; import pl.allegro.finance.tradukisto.internal.languages.spanish.SpanishThousandToWordsConverter; import pl.allegro.finance.tradukisto.internal.languages.spanish.SpanishValues; +import pl.allegro.finance.tradukisto.internal.languages.swedish.SwedishHundredToWordsConverter; +import pl.allegro.finance.tradukisto.internal.languages.swedish.SwedishValues; import pl.allegro.finance.tradukisto.internal.languages.turkish.TurkishBigDecimalToBankingMoneyConverter; import pl.allegro.finance.tradukisto.internal.languages.turkish.TurkishIntegerToWordsConverter; import pl.allegro.finance.tradukisto.internal.languages.turkish.TurkishSmallNumbersToWordsConverter; @@ -248,7 +250,7 @@ public static Container hindiContainer() { return new Container(integerToStringConverter, longValueConverters, bigDecimalConverter); } - + public static Container spanishContainer() { SpanishValues values = new SpanishValues(); @@ -264,6 +266,23 @@ public static Container spanishContainer() { return new Container(converter, null, bigDecimalBankingMoneyValueConverter); } + + public static Container swedishContainer() { + SwedishValues swedishBaseValues = new SwedishValues(); + + SwedishHundredToWordsConverter swedishHundredsToStringConverter = + new SwedishHundredToWordsConverter(swedishBaseValues.baseNumbers()); + + NumberToWordsConverter swedishNumberToWordsConverter = new NumberToWordsConverter( + swedishHundredsToStringConverter, + swedishBaseValues.pluralForms()); + + BigDecimalToStringConverter swedishBigDecimalConverter = new BigDecimalToBankingMoneyConverter( + swedishNumberToWordsConverter, + swedishBaseValues.currency()); + + return new Container(swedishNumberToWordsConverter, swedishNumberToWordsConverter, swedishBigDecimalConverter); + } private final IntegerToStringConverter integerConverter; private final LongToStringConverter longConverter; diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverter.java new file mode 100644 index 00000000..9ad86233 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverter.java @@ -0,0 +1,43 @@ +package pl.allegro.finance.tradukisto.internal.languages.swedish; + +import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.GenderType; +import pl.allegro.finance.tradukisto.internal.support.Range; + +import java.util.Map; + +import static java.lang.String.format; + +public class SwedishHundredToWordsConverter implements GenderAwareIntegerToStringConverter { + + private final Map swedishBaseValues; + + public SwedishHundredToWordsConverter(Map swedishBaseValues) { + this.swedishBaseValues = swedishBaseValues; + } + + @Override + public String asWords(Integer value, GenderType swedishGenderType) { + if (this.swedishBaseValues.containsKey(value)) { + return this.swedishBaseValues.get(value).formFor(swedishGenderType); + } else if (Range.closed(21, 99).contains(value)) { + return twoDigitsNumberAsString(value, swedishGenderType); + } else if (Range.closed(101, 999).contains(value)) { + return threeDigitsNumberAsString(value, swedishGenderType); + } + throw new IllegalArgumentException(format("Can't convert %d", value)); + } + + private String twoDigitsNumberAsString(Integer value, GenderType genderType) { + Integer units = value % 10; + Integer tens = value - units; + return format("%s%s", asWords(tens, genderType), asWords(units, genderType)); + } + + private String threeDigitsNumberAsString(Integer value, GenderType genderType) { + Integer tensWithUnits = value % 100; + Integer hundreds = value - tensWithUnits; + return format("%s och %s", asWords(hundreds, genderType), asWords(tensWithUnits, genderType)); + } +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishValues.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishValues.java new file mode 100644 index 00000000..a06986c9 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishValues.java @@ -0,0 +1,77 @@ +package pl.allegro.finance.tradukisto.internal.languages.swedish; + +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.GenderType; +import pl.allegro.finance.tradukisto.internal.languages.PluralForms; +import pl.allegro.finance.tradukisto.internal.languages.RegularPluralForms; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForms; +import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder; + +public class SwedishValues { + + // Note: Swedish uses 'common' and 'neuter' gender types, but these seem to transfer nicely for numbers to existing + // masculine and feminine gender types for common, and neuter and non-applicable gender types for neuter. + // Regarding base numbers, only 1 has multiple gender types: 1 and 100 being neuter ('ett'), otherwise common ('en') + public Map baseNumbers() { + return baseNumbersBuilder() + .put(0, "noll") + .put(1, genderForms("en", "en", "ett", "ett")) + .put(2, "två") + .put(3, "tre") + .put(4, "fyra") + .put(5, "fem") + .put(6, "sex") + .put(7, "sju") + .put(8, "åtta") + .put(9, "nio") + .put(10, "tio") + .put(11, "elva") + .put(12, "tolv") + .put(13, "tretton") + .put(14, "fjorton") + .put(15, "femton") + .put(16, "sexton") + .put(17, "sjutton") + .put(18, "arton") + .put(19, "nitton") + .put(20, "tjugo") + .put(30, "trettio") + .put(40, "fyrtio") + .put(50, "femtio") + .put(60, "sextio") + .put(70, "sjuttio") + .put(80, "åttio") + .put(90, "nittio") + .put(100, "ett hundra") + .put(200, "två hundra") + .put(300, "tre hundra") + .put(400, "fyra hundra") + .put(500, "fem hundra") + .put(600, "sex hundra") + .put(700, "sju hundra") + .put(800, "åtta hundra") + .put(900, "nio hundra") + .build(); + } + + public List pluralForms() { + // Note: in Swedish there are common and neuter gender types. In this case, common is equivalent to feminine + return Arrays.asList( + new RegularPluralForms("", "", GenderType.NON_APPLICABLE), + new RegularPluralForms("tusen", "tusen", GenderType.NEUTER), // thousand + new RegularPluralForms("miljon", "miljoner", GenderType.FEMININE), // million + new RegularPluralForms("miljard", "miljarder", GenderType.FEMININE), // billion + new RegularPluralForms("biljon", "biljoner", GenderType.FEMININE), // trillion + new RegularPluralForms("biljard", "biljarder", GenderType.FEMININE), // quadrillion + new RegularPluralForms("triljon", "triljoner", GenderType.FEMININE)); // quintillion + } + + public String currency() { + return "kr"; + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/LongValueConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/LongValueConvertersTest.groovy index 3837e8f1..9bdf3bcd 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/LongValueConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/LongValueConvertersTest.groovy @@ -6,6 +6,7 @@ import spock.lang.Unroll import static pl.allegro.finance.tradukisto.LongValueConverters.ENGLISH_LONG import static pl.allegro.finance.tradukisto.LongValueConverters.HINDI_LONG import static pl.allegro.finance.tradukisto.LongValueConverters.POLISH_LONG +import static pl.allegro.finance.tradukisto.LongValueConverters.SWEDISH_LONG class LongValueConvertersTest extends Specification { @@ -19,6 +20,7 @@ class LongValueConvertersTest extends Specification { "English" | ENGLISH_LONG || "one quintillion" "Polish" | POLISH_LONG || "jeden trylion" "Hindi" | HINDI_LONG || "दस शंख" + "Swedish" | SWEDISH_LONG || "en triljon" } def "should throw exception when null given"() { diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy index 4c94e051..01d5ae51 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy @@ -20,6 +20,7 @@ import static pl.allegro.finance.tradukisto.MoneyConverters.SERBIAN_BANKING_MONE import static pl.allegro.finance.tradukisto.MoneyConverters.SERBIAN_CYRILLIC_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.SLOVAK_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.SPANISH_BANKING_MONEY_VALUE +import static pl.allegro.finance.tradukisto.MoneyConverters.SWEDISH_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.TURKISH_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.UKRAINIAN_BANKING_MONEY_VALUE import static pl.allegro.finance.tradukisto.MoneyConverters.DUTCH_BANKING_MONEY_VALUE @@ -50,6 +51,7 @@ class MoneyConvertersTest extends Specification { "Slovak" | SLOVAK_BANKING_MONEY_VALUE || "jeden tisíc dvesto tridsať štyri € 56/100" "Spanish" | SPANISH_BANKING_MONEY_VALUE || "mil doscientos treinta y cuatro € 56/100" "Russian" | RUSSIAN_BANKING_MONEY_VALUE || "одна тысяча двести тридцать четыре руб. 56/100" + "Swedish" | SWEDISH_BANKING_MONEY_VALUE || "ett tusen två hundra och trettiofyra kr 56/100" "Turkish" | TURKISH_BANKING_MONEY_VALUE || "BinİkiYüzOtuzDörtTL,ElliAltıKr." "Ukrainian" | UKRAINIAN_BANKING_MONEY_VALUE || "одна тисяча двісті тридцять чотири ₴ 56/100" "Hindi" | HINDI_BANKING_MONEY_VALUE || "एक हजार दो सौ चौंतीस ₹,छप्पन p" diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy index c78dd08f..80ee6692 100644 --- a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy +++ b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy @@ -19,6 +19,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.SERBIAN_CYRILLIC_INT import static pl.allegro.finance.tradukisto.ValueConverters.SERBIAN_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.SLOVAK_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.SPANISH_INTEGER +import static pl.allegro.finance.tradukisto.ValueConverters.SWEDISH_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.TURKISH_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.UKRAINIAN_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.DUTCH_INTEGER @@ -50,6 +51,7 @@ class ValueConvertersTest extends Specification { "Slovak" | SLOVAK_INTEGER || "jeden tisíc dvesto tridsať štyri" "Spanish" | SPANISH_INTEGER || "mil doscientos treinta y cuatro" "Russian" | RUSSIAN_INTEGER || "одна тысяча двести тридцать четыре" + "Swedish" | SWEDISH_INTEGER || "ett tusen två hundra och trettiofyra" "Turkish" | TURKISH_INTEGER || "Bin İki Yüz Otuz Dört" "Ukrainian" | UKRAINIAN_INTEGER || "одна тисяча двісті тридцять чотири" "Hindi" | HINDI_INTEGER || "एक हजार दो सौ चौंतीस" @@ -97,6 +99,7 @@ class ValueConvertersTest extends Specification { new Locale("uk") || UKRAINIAN_INTEGER new Locale("nl") || DUTCH_INTEGER new Locale("hi") || HINDI_INTEGER + new Locale("sv") || SWEDISH_INTEGER } def "should return supplied default converter when locale is unknown"() { @@ -144,6 +147,7 @@ class ValueConvertersTest extends Specification { "tr" || TURKISH_INTEGER "uk" || UKRAINIAN_INTEGER "hi" || HINDI_INTEGER + "sv" || SWEDISH_INTEGER } def "should return supplied default converter when languageCode is unknown"() { diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverterTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverterTest.groovy new file mode 100644 index 00000000..e8e1c186 --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishHundredToWordsConverterTest.groovy @@ -0,0 +1,56 @@ +package pl.allegro.finance.tradukisto.internal.languages.swedish; + +import pl.allegro.finance.tradukisto.internal.languages.GenderType +import spock.lang.Specification + +import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForm +import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForms + +class SwedishHundredToWordsConverterTest extends Specification { + + def "should convert a single value from the list of base values"() { + given: + def converter = new SwedishHundredToWordsConverter([1: genderForms("en", + "en", + "ett", + "ett")]) + + expect: + converter.asWords(1, GenderType.NON_APPLICABLE) == "ett" + } + + def "should convert a two digit number from the list of base values"() { + given: + def converter = new SwedishHundredToWordsConverter([20: genderForm("tjugo"), + 1 : genderForms("en", + "en", + "ett", + "ett")]) + + expect: + converter.asWords(21, GenderType.NON_APPLICABLE) == "tjugoett" + } + + def "should convert a three digit number from the list of base values"() { + given: + def converter = new SwedishHundredToWordsConverter([900: genderForm("nio hundra"), + 90 : genderForm("nittio"), + 9 : genderForm("nio")]) + + expect: + converter.asWords(999, GenderType.NON_APPLICABLE) == "nio hundra och nittionio" + } + + + def "should throw IllegalArgumentException when given number is not supported"() { + given: + def converter = new SwedishHundredToWordsConverter([1: genderForm("ett")]) + + when: + converter.asWords(2, GenderType.NON_APPLICABLE) + + then: + def exception = thrown(IllegalArgumentException) + exception.message == "Can't convert 2" + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishIntegerValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishIntegerValuesTest.groovy new file mode 100644 index 00000000..3b78f9f9 --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishIntegerValuesTest.groovy @@ -0,0 +1,152 @@ +package pl.allegro.finance.tradukisto.internal.languages.swedish + +import spock.lang.Specification +import spock.lang.Unroll + +import static pl.allegro.finance.tradukisto.internal.Container.swedishContainer + +class SwedishIntegerValuesTest extends Specification { + + static intConverter = swedishContainer().getIntegerConverter() + + @Unroll + def "should convert Integer #value to '#words' in Swedish"() { + expect: + intConverter.asWords(value) == words + + where: + value | words + 0 | "noll" + 1 | "ett" + 2 | "två" + 3 | "tre" + 4 | "fyra" + 5 | "fem" + 6 | "sex" + 7 | "sju" + 8 | "åtta" + 9 | "nio" + + 11 | "elva" + 12 | "tolv" + 13 | "tretton" + 14 | "fjorton" + 15 | "femton" + 16 | "sexton" + 17 | "sjutton" + 18 | "arton" + 19 | "nitton" + + 10 | "tio" + 20 | "tjugo" + 30 | "trettio" + 40 | "fyrtio" + 50 | "femtio" + 60 | "sextio" + 70 | "sjuttio" + 80 | "åttio" + 90 | "nittio" + + 21 | "tjugoett" + 32 | "trettiotvå" + 43 | "fyrtiotre" + 54 | "femtiofyra" + 65 | "sextiofem" + 76 | "sjuttiosex" + 87 | "åttiosju" + 98 | "nittioåtta" + + 100 | "ett hundra" + 200 | "två hundra" + 300 | "tre hundra" + 400 | "fyra hundra" + 500 | "fem hundra" + 600 | "sex hundra" + 700 | "sju hundra" + 800 | "åtta hundra" + 900 | "nio hundra" + + 109 | "ett hundra och nio" + 218 | "två hundra och arton" + 327 | "tre hundra och tjugosju" + 436 | "fyra hundra och trettiosex" + 545 | "fem hundra och fyrtiofem" + 654 | "sex hundra och femtiofyra" + 763 | "sju hundra och sextiotre" + 872 | "åtta hundra och sjuttiotvå" + 981 | "nio hundra och åttioett" + + 1000 | "ett tusen" + 2000 | "två tusen" + 3000 | "tre tusen" + 4000 | "fyra tusen" + 5000 | "fem tusen" + 6000 | "sex tusen" + 7000 | "sju tusen" + 8000 | "åtta tusen" + 9000 | "nio tusen" + + 1911 | "ett tusen nio hundra och elva" + 2890 | "två tusen åtta hundra och nittio" + 3789 | "tre tusen sju hundra och åttionio" + 4678 | "fyra tusen sex hundra och sjuttioåtta" + 5567 | "fem tusen fem hundra och sextiosju" + 6456 | "sex tusen fyra hundra och femtiosex" + 7345 | "sju tusen tre hundra och fyrtiofem" + 8234 | "åtta tusen två hundra och trettiofyra" + 9123 | "nio tusen ett hundra och tjugotre" + + 10000 | "tio tusen" + 11000 | "elva tusen" + 12000 | "tolv tusen" + 13000 | "tretton tusen" + 14000 | "fjorton tusen" + 15000 | "femton tusen" + 16000 | "sexton tusen" + 17000 | "sjutton tusen" + 18000 | "arton tusen" + 19000 | "nitton tusen" + + 20000 | "tjugo tusen" + 30000 | "trettio tusen" + 40000 | "fyrtio tusen" + 50000 | "femtio tusen" + 60000 | "sextio tusen" + 70000 | "sjuttio tusen" + 80000 | "åttio tusen" + 90000 | "nittio tusen" + + 100000 | "ett hundra tusen" + 200000 | "två hundra tusen" + 300000 | "tre hundra tusen" + 400000 | "fyra hundra tusen" + 500000 | "fem hundra tusen" + 600000 | "sex hundra tusen" + 700000 | "sju hundra tusen" + 800000 | "åtta hundra tusen" + + 1000000 | "en miljon" + 2000000 | "två miljoner" + 3000000 | "tre miljoner" + 4000000 | "fyra miljoner" + 5000000 | "fem miljoner" + 6000000 | "sex miljoner" + 7000000 | "sju miljoner" + 8000000 | "åtta miljoner" + 9000000 | "nio miljoner" + + 1111111 | "en miljon ett hundra och elva tusen ett hundra och elva" + 2222222 | "två miljoner två hundra och tjugotvå tusen två hundra och tjugotvå" + 3333333 | "tre miljoner tre hundra och trettiotre tusen tre hundra och trettiotre" + 4444444 | "fyra miljoner fyra hundra och fyrtiofyra tusen fyra hundra och fyrtiofyra" + 5555555 | "fem miljoner fem hundra och femtiofem tusen fem hundra och femtiofem" + 6666666 | "sex miljoner sex hundra och sextiosex tusen sex hundra och sextiosex" + 7777777 | "sju miljoner sju hundra och sjuttiosju tusen sju hundra och sjuttiosju" + 8888888 | "åtta miljoner åtta hundra och åttioåtta tusen åtta hundra och åttioåtta" + 9999999 | "nio miljoner nio hundra och nittionio tusen nio hundra och nittionio" + + 1000000000 | "en miljard" + 2000000000 | "två miljarder" + 2147483647 | "två miljarder ett hundra och fyrtiosju miljoner fyra hundra och åttiotre tusen sex hundra och fyrtiosju" + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishLongValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishLongValuesTest.groovy new file mode 100644 index 00000000..1445d39c --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/swedish/SwedishLongValuesTest.groovy @@ -0,0 +1,65 @@ +package pl.allegro.finance.tradukisto.internal.languages.swedish + +import spock.lang.Specification +import spock.lang.Unroll + +import static pl.allegro.finance.tradukisto.internal.Container.swedishContainer + +class SwedishLongValuesTest extends Specification { + + static longConverter = swedishContainer().getLongConverter() + + @Unroll + def "should convert Long #value to '#words' in Swedish"() { + expect: + longConverter.asWords(value) == words + + where: + value | words + 2147483648 | "två miljarder ett hundra och fyrtiosju miljoner fyra hundra och åttiotre tusen sex hundra och fyrtioåtta" + 3000000000 | "tre miljarder" + 4000000000 | "fyra miljarder" + 5000000000 | "fem miljarder" + 6000000000 | "sex miljarder" + 7000000000 | "sju miljarder" + 8000000000 | "åtta miljarder" + 9000000000 | "nio miljarder" + 9999999999 | "nio miljarder nio hundra och nittionio miljoner nio hundra och nittionio tusen nio hundra och nittionio" + + 1000000000000 | "en biljon" + 2000000000000 | "två biljoner" + 2222222222222 | "två biljoner två hundra och tjugotvå miljarder två hundra och tjugotvå miljoner två hundra och tjugotvå tusen två hundra och tjugotvå" + 3000000000000 | "tre biljoner" + 4000000000000 | "fyra biljoner" + 5000000000000 | "fem biljoner" + 6000000000000 | "sex biljoner" + 7000000000000 | "sju biljoner" + 8000000000000 | "åtta biljoner" + 9000000000000 | "nio biljoner" + 9999999999999 | "nio biljoner nio hundra och nittionio miljarder nio hundra och nittionio miljoner nio hundra och nittionio tusen nio hundra och nittionio" + + 1000000000000000 | "en biljard" + 2000000000000000 | "två biljarder" + 3000000000000000 | "tre biljarder" + 3333333333333333 | "tre biljarder tre hundra och trettiotre biljoner tre hundra och trettiotre miljarder tre hundra och trettiotre miljoner tre hundra och trettiotre tusen tre hundra och trettiotre" + 4000000000000000 | "fyra biljarder" + 5000000000000000 | "fem biljarder" + 6000000000000000 | "sex biljarder" + 7000000000000000 | "sju biljarder" + 8000000000000000 | "åtta biljarder" + 9000000000000000 | "nio biljarder" + 9999999999999999 | "nio biljarder nio hundra och nittionio biljoner nio hundra och nittionio miljarder nio hundra och nittionio miljoner nio hundra och nittionio tusen nio hundra och nittionio" + + 1000000000000000000 | "en triljon" + 2000000000000000000 | "två triljoner" + 3000000000000000000 | "tre triljoner" + 4000000000000000000 | "fyra triljoner" + 4444444444444444444 | "fyra triljoner fyra hundra och fyrtiofyra biljarder fyra hundra och fyrtiofyra biljoner fyra hundra och fyrtiofyra miljarder fyra hundra och fyrtiofyra miljoner fyra hundra och fyrtiofyra tusen fyra hundra och fyrtiofyra" + 5000000000000000000 | "fem triljoner" + 6000000000000000000 | "sex triljoner" + 7000000000000000000 | "sju triljoner" + 8000000000000000000 | "åtta triljoner" + 9000000000000000000 | "nio triljoner" + 9223272036854775807 | "nio triljoner två hundra och tjugotre biljarder två hundra och sjuttiotvå biljoner trettiosex miljarder åtta hundra och femtiofyra miljoner sju hundra och sjuttiofem tusen åtta hundra och sju" + } +}