diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 443865b2..ee63773e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,8 @@ name: Build on: - pull_request: push: - tags-ignore: - - 'v*' + workflow_dispatch: permissions: contents: write @@ -18,10 +16,11 @@ jobs: matrix: java: ['8', '11', '17'] + name: Run tests for Java ${{ matrix.java }} steps: - uses: actions/checkout@v3 - - name: Set up ${{ matrix.java }} + - name: Set up Java ${{ matrix.java }} uses: actions/setup-java@v3 with: distribution: 'temurin' @@ -41,19 +40,19 @@ jobs: - name: Upload coverage to Codecov if: matrix.Java == '17' uses: codecov/codecov-action@v3 - + dependabot: runs-on: ubuntu-latest if: ${{ github.event_name == 'pull_request' && github.actor == 'dependabot[bot]' }} needs: build - + steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@v1.6.0 with: github-token: "${{ secrets.GITHUB_TOKEN }}" - + - name: Enable auto-merge for Dependabot PRs run: gh pr merge --auto --merge "$PR_URL" env: diff --git a/README.md b/README.md index 6dcaedb7..e4eb4efc 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy * 🇧🇬 Bulgarian * 🇭🇷 Croatian * 🇨🇿 Czech +* 🇳🇱 Dutch * 🇬🇧 English * 🇫🇷 French * 🇩🇪 German diff --git a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java index 3ab0493d..ad426d65 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/MoneyConverters.java @@ -23,6 +23,7 @@ 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 { @@ -43,7 +44,8 @@ public enum MoneyConverters { SERBIAN_BANKING_MONEY_VALUE(serbianContainer().getBankingMoneyConverter()), SERBIAN_CYRILLIC_BANKING_MONEY_VALUE(serbianCyrillicContainer().getBankingMoneyConverter()), FRENCH_BANKING_MONEY_VALUE(frenchContainer().getBankingMoneyConverter()), - BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()); + BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()), + DUTCH_BANKING_MONEY_VALUE(dutchContainer().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 60bf4107..2ba6e94c 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java +++ b/src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java @@ -26,6 +26,8 @@ import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer; 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 ValueConverters { @@ -45,7 +47,8 @@ public enum ValueConverters { SERBIAN_CYRILLIC_INTEGER(serbianCyrillicContainer().getIntegerConverter(), getLanguageCodeFor("sr", "Cyrl")), BULGARIAN_INTEGER(bulgarianContainer().getIntegerConverter(), "bg"), FRENCH_INTEGER(frenchContainer().getIntegerConverter(), "fr"), - TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr"); + TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr"), + DUTCH_INTEGER(dutchContainer().getIntegerConverter(), "nl"); 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 09137dcf..f4b44f41 100644 --- a/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/Container.java @@ -9,6 +9,9 @@ import pl.allegro.finance.tradukisto.internal.languages.czech.CzechIntegerToWordsConverter; import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValues; import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValuesForSmallNumbers; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchIntegerToWordsConverter; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchThousandToWordsConverter; +import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchValues; import pl.allegro.finance.tradukisto.internal.languages.english.AmericanEnglishValues; import pl.allegro.finance.tradukisto.internal.languages.english.EnglishValues; import pl.allegro.finance.tradukisto.internal.languages.french.FrenchNumberToWordsConverter; @@ -152,6 +155,23 @@ public static Container germanContainer() { return new Container(converter, null, bigDecimalBankingMoneyValueConverter); } + public static Container dutchContainer() { + + DutchValues values = new DutchValues(); + + DutchThousandToWordsConverter dutchThousandToWordsConverter = new DutchThousandToWordsConverter( + values.baseNumbers()); + + IntegerToStringConverter converter = new DutchIntegerToWordsConverter( + new NumberToWordsConverter(dutchThousandToWordsConverter, values.pluralForms()), values.exceptions(), + dutchThousandToWordsConverter); + + BigDecimalToStringConverter bigDecimalBankingMoneyValueConverter = new BigDecimalToBankingMoneyConverter( + converter, values.currency()); + + return new Container(converter, null, bigDecimalBankingMoneyValueConverter); + } + public static Container italianContainer() { ItalianValues values = new ItalianValues(); diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java new file mode 100644 index 00000000..97260421 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchIntegerToWordsConverter.java @@ -0,0 +1,35 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import java.util.Map; + +import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.IntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.NumberProcessor; + +public class DutchIntegerToWordsConverter implements IntegerToStringConverter { + + private final IntegerToStringConverter bigNumbersConverter; + private final Map exceptions; + private final GenderAwareIntegerToStringConverter smallNumbersConverter; + + public DutchIntegerToWordsConverter(IntegerToStringConverter bigNumbersConverter, + Map exceptions, + GenderAwareIntegerToStringConverter smallNumbersConverter) { + this.bigNumbersConverter = bigNumbersConverter; + this.exceptions = exceptions; + this.smallNumbersConverter = smallNumbersConverter; + } + + @Override + public String asWords(Integer value) { + if (exceptions.containsKey(value)) { + return exceptions.get(value); + } + + Integer bigNumber = value / 1000000; + Integer smallNumber = value % 1000000; + + return new NumberProcessor(bigNumbersConverter, smallNumbersConverter).process(bigNumber, smallNumber); + } + +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java new file mode 100644 index 00000000..0e94712f --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchPluralForms.java @@ -0,0 +1,26 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import pl.allegro.finance.tradukisto.internal.languages.GenderType; +import pl.allegro.finance.tradukisto.internal.languages.PluralForms; + +/** + * @author Dilaver Demirel + */ +public class DutchPluralForms implements PluralForms { + + private final String form; + + public DutchPluralForms(String form) { + this.form = form; + } + + @Override + public String formFor(Integer value) { + return form; + } + + @Override + public GenderType genderType() { + return GenderType.NON_APPLICABLE; + } +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java new file mode 100644 index 00000000..c112f5dd --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverter.java @@ -0,0 +1,78 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import pl.allegro.finance.tradukisto.internal.support.Range; +import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter; +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.GenderType; + +import java.util.Map; + +import static java.lang.String.format; +public class DutchThousandToWordsConverter implements GenderAwareIntegerToStringConverter { + + private final Map baseValues; + + public DutchThousandToWordsConverter(Map baseValues) { + this.baseValues = baseValues; + } + + @Override + public String asWords(Integer value, GenderType genderType) { + if (baseValues.containsKey(value)) { + return baseValues.get(value).formFor(genderType); + } else if (Range.closed(21, 99).contains(value)) { + return twoDigitsNumberAsString(value, genderType); + } else if (Range.closed(101, 999).contains(value)) { + return threeDigitsNumberAsString(value, genderType); + } else if (Range.closed(1000, 999999).contains(value)) { + return thousandsAsString(value, genderType); + } + + throw new IllegalArgumentException(format("Can't convert %d", value)); + } + + private String twoDigitsNumberAsString(Integer value, GenderType genderType) { + Integer units = value % 10; + Integer tens = value - units; + + // When units are 2 or 3, between the tens and the units + if (units == 2 || units == 3) { + return format("%sën%s", asWords(units, genderType), asWords(tens, genderType)); + } else { + return format("%sen%s", asWords(units, genderType), asWords(tens, genderType)); + } + } + + private String threeDigitsNumberAsString(Integer value, GenderType genderType) { + Integer tensWithUnits = value % 100; + Integer hundreds = value - tensWithUnits; + + return format("%s%s", asWords(hundreds, genderType), asWords(tensWithUnits, genderType)); + } + + private String thousandsAsString(Integer value, GenderType genderType) { + Integer thousands = value / 1000; + Integer other = value % 1000; + + if (isOneThousand(thousands)) { + return getOneThousandAsWords(other, genderType); + } + + return getThousandsAsWords(thousands, other, genderType); + } + + private String getThousandsAsWords(Integer thousands, Integer other, GenderType genderType) { + if (other == 0) { + return format("%sduizend", asWords(thousands, genderType)); + } + return format("%sduizend%s", asWords(thousands, genderType), asWords(other, genderType)); + } + + private String getOneThousandAsWords(Integer other, GenderType genderType) { + return format("duizend%s", asWords(other, genderType)); + } + + private boolean isOneThousand(Integer thousands) { + return thousands == 1; + } +} diff --git a/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java new file mode 100644 index 00000000..8b96e423 --- /dev/null +++ b/src/main/java/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValues.java @@ -0,0 +1,72 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch; + +import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import pl.allegro.finance.tradukisto.internal.languages.GenderForms; +import pl.allegro.finance.tradukisto.internal.languages.PluralForms; + +import static java.util.Collections.singletonMap; + + +public class DutchValues { + + public Map baseNumbers() { + return baseNumbersBuilder() + .put(0, "nul") + .put(1, "één") + .put(2, "twee") + .put(3, "drie") + .put(4, "vier") + .put(5, "vijf") + .put(6, "zes") + .put(7, "zeven") + .put(8, "acht") + .put(9, "negen") + .put(10, "tien") + .put(11, "elf") + .put(12, "twaalf") + .put(13, "dertien") + .put(14, "veertien") + .put(15, "vijftien") + .put(16, "zestien") + .put(17, "zeventien") + .put(18, "achttien") + .put(19, "negentien") + .put(20, "twintig") + .put(30, "dertig") + .put(40, "veertig") + .put(50, "vijftig") + .put(60, "zestig") + .put(70, "zeventig") + .put(80, "tachtig") + .put(90, "negentig") + .put(100, "honderd") + .put(200, "tweehonderd") + .put(300, "driehonderd") + .put(400, "vierhonderd") + .put(500, "vijfhonderd") + .put(600, "zeshonderd") + .put(700, "zevenhonderd") + .put(800, "achthonderd") + .put(900, "negenhonderd") + .build(); + } + + public Map exceptions() { + return singletonMap(1000, "duizend"); + } + + public List pluralForms() { + return Arrays.asList( + new DutchPluralForms("miljoen"), + new DutchPluralForms("miljard")); + } + + public String currency() { + return "€"; + } +} diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/MoneyConvertersTest.groovy index 6d526111..807368ea 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_CYRILLIC_BAN import static pl.allegro.finance.tradukisto.MoneyConverters.SLOVAK_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 class MoneyConvertersTest extends Specification { @@ -34,6 +35,7 @@ class MoneyConvertersTest extends Specification { "Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE || "mil duzentos e trinta e quatro R\$ 56/100" "Bulgarian" | BULGARIAN_BANKING_MONEY_VALUE || "хиляда двеста тридесет четири лв 56/100" "Czech" | CZECH_BANKING_MONEY_VALUE || "jeden tisíc dvě stě třicet čtyři Kč 56/100" + "Dutch" | DUTCH_BANKING_MONEY_VALUE || "duizendtweehonderdvierendertig € 56/100" "English" | ENGLISH_BANKING_MONEY_VALUE || "one thousand two hundred thirty-four £ 56/100" "French" | FRENCH_BANKING_MONEY_VALUE || "mille deux cent trente-quatre € 56/100" "German" | GERMAN_BANKING_MONEY_VALUE || "eintausendzweihundertvierunddreißig € 56/100" diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/ValueConvertersTest.groovy index 923c574f..14ddc70d 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_INTEGER import static pl.allegro.finance.tradukisto.ValueConverters.SLOVAK_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 import static pl.allegro.finance.tradukisto.ValueConverters.getByLanguageCodeOrDefault import static pl.allegro.finance.tradukisto.ValueConverters.getByLocaleOrDefault @@ -34,6 +35,7 @@ class ValueConvertersTest extends Specification { "Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_INTEGER || "mil duzentos e trinta e quatro" "Bulgarian" | BULGARIAN_INTEGER || "хиляда двеста тридесет четири" "Czech" | CZECH_INTEGER || "jeden tisíc dvě stě třicet čtyři" + "Dutch" | DUTCH_INTEGER || "duizendtweehonderdvierendertig" "English" | ENGLISH_INTEGER || "one thousand two hundred thirty-four" "French" | FRENCH_INTEGER || "mille deux cent trente-quatre" "German" | GERMAN_INTEGER || "eintausendzweihundertvierunddreißig" @@ -88,6 +90,7 @@ class ValueConvertersTest extends Specification { new Locale("sk") || SLOVAK_INTEGER new Locale("tr") || TURKISH_INTEGER new Locale("uk") || UKRAINIAN_INTEGER + new Locale("nl") || DUTCH_INTEGER } def "should return supplied default converter when locale is unknown"() { @@ -118,6 +121,7 @@ class ValueConvertersTest extends Specification { "pt" || BRAZILIAN_PORTUGUESE_INTEGER "bg" || BULGARIAN_INTEGER "cs" || CZECH_INTEGER + "nl" || DUTCH_INTEGER "en" || ENGLISH_INTEGER "fr" || FRENCH_INTEGER "it" || ITALIAN_INTEGER diff --git a/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy new file mode 100644 index 00000000..ef08170d --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchThousandToWordsConverterTest.groovy @@ -0,0 +1,53 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch + +import pl.allegro.finance.tradukisto.internal.languages.GenderType +import spock.lang.Specification + +import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForm + +class DutchThousandToWordsConverterTest extends Specification { + + def "should convert value from list of base values"() { + given: + def converter = new DutchThousandToWordsConverter([1: genderForm("één")]) + + expect: + converter.asWords(1, GenderType.NON_APPLICABLE) == "één" + } + + def "should convert two digits number"() { + given: + def converter = new DutchThousandToWordsConverter([20: genderForm("twintig"), 1: genderForm("één")]) + + expect: + converter.asWords(21, GenderType.NON_APPLICABLE) == "éénentwintig" + } + + def "should convert three digits number"() { + given: + def converter = new DutchThousandToWordsConverter([600: genderForm("zeshonderd"), 60: genderForm("zestig"), 6: genderForm("zes")]) + + expect: + converter.asWords(666, GenderType.NON_APPLICABLE) == "zeshonderdzesenzestig" + } + + def "should convert more that three digits number"() { + given: + def converter = new DutchThousandToWordsConverter([600: genderForm("zeshonderd"), 60: genderForm("zestig"), 6: genderForm("zes")]) + + expect: + converter.asWords(66666, GenderType.NON_APPLICABLE) == "zesenzestigduizendzeshonderdzesenzestig" + } + + def "should throw IllegalArgumentException when given number is not supported"() { + given: + def converter = new DutchThousandToWordsConverter([1: genderForm("één")]) + + 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/dutch/DutchValuesTest.groovy b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy new file mode 100644 index 00000000..ce6690d9 --- /dev/null +++ b/src/test/groovy/pl/allegro/finance/tradukisto/internal/languages/dutch/DutchValuesTest.groovy @@ -0,0 +1,134 @@ +package pl.allegro.finance.tradukisto.internal.languages.dutch + +import spock.lang.Ignore +import spock.lang.Specification +import spock.lang.Unroll + +import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer + +class DutchValuesTest extends Specification { + + static intConverter = dutchContainer().getIntegerConverter() + static longConverter = dutchContainer().getLongConverter() + + @Unroll + def "should convert #value to '#words' in Dutch"() { + expect: + intConverter.asWords(value) == words + + where: + value | words + 0 | "nul" + 1 | "één" + 2 | "twee" + 3 | "drie" + 4 | "vier" + 5 | "vijf" + 6 | "zes" + 7 | "zeven" + 8 | "acht" + 9 | "negen" + + 11 | "elf" + 12 | "twaalf" + 13 | "dertien" + 14 | "veertien" + 15 | "vijftien" + 16 | "zestien" + 17 | "zeventien" + 18 | "achttien" + 19 | "negentien" + + 10 | "tien" + 20 | "twintig" + 30 | "dertig" + 40 | "veertig" + 50 | "vijftig" + 60 | "zestig" + 70 | "zeventig" + 80 | "tachtig" + 90 | "negentig" + + 21 | "éénentwintig" + 37 | "zevenendertig" + 43 | "drieënveertig" + 58 | "achtenvijftig" + 62 | "tweeënzestig" + 69 | "negenenzestig" + 76 | "zesenzeventig" + 82 | "tweeëntachtig" + 95 | "vijfennegentig" + + 100 | "honderd" + 200 | "tweehonderd" + 300 | "driehonderd" + 400 | "vierhonderd" + 500 | "vijfhonderd" + 600 | "zeshonderd" + 700 | "zevenhonderd" + 800 | "achthonderd" + 900 | "negenhonderd" + + 111 | "honderdelf" + 272 | "tweehonderdtweeënzeventig" + 387 | "driehonderdzevenentachtig" + 448 | "vierhonderdachtenveertig" + 569 | "vijfhonderdnegenenzestig" + 625 | "zeshonderdvijfentwintig" + 782 | "zevenhonderdtweeëntachtig" + 895 | "achthonderdvijfennegentig" + 999 | "negenhonderdnegenennegentig" + + 1000 | "duizend" + 1001 | "duizendéén" + 2000 | "tweeduizend" + 3000 | "drieduizend" + 4000 | "vierduizend" + 5000 | "vijfduizend" + 7634 | "zevenduizendzeshonderdvierendertig" + + 11000 | "elfduizend" + 15000 | "vijftienduizend" + 21000 | "éénentwintigduizend" + 24190 | "vierentwintigduizendhonderdnegentig" + 24191 | "vierentwintigduizendhonderdéénennegentig" + 653000 | "zeshonderddrieënvijftigduizend" + 123454 | "honderddrieëntwintigduizendvierhonderdvierenvijftig" + 700000 | "zevenhonderdduizend" + 999999 | "negenhonderdnegenennegentigduizendnegenhonderdnegenennegentig" + + 1000000 | "één miljoen" + 2000000 | "twee miljoen" + 5000000 | "vijf miljoen" + 23437219 | "drieëntwintig miljoen vierhonderdzevenendertigduizendtweehonderdnegentien" + 100000000 | "honderd miljoen" + 123456789 | "honderddrieëntwintig miljoen vierhonderdzesenvijftigduizendzevenhonderdnegenentachtig" + 322089890 | "driehonderdtweeëntwintig miljoen negenentachtigduizendachthonderdnegentig" + + 1000000000 | "één miljard" + 2147483647 | "twee miljard honderdzevenenveertig miljoen vierhonderddrieëntachtigduizendzeshonderdzevenenveertig" + } + + @Ignore("Needs Dutch long converter and values for trillion, quadrillion, quintillion") + @Unroll + def "should convert long #value to '#words' in Dutch"() { + expect: + longConverter.asWords(value) == words + + where: + value | words + 5_000_000_000 | "" + + 1_000_000_000_000 | "" + 2_000_000_000_000 | "" + 5_000_000_000_000 | "" + + 1_000_000_000_000_000 | "" + 2_000_000_000_000_000 | "" + 5_000_000_000_000_000 | "" + + 1_000_000_000_000_000_000 | "" + 2_000_000_000_000_000_000 | "" + Long.MAX_VALUE | "" + } +}