From 91ebd1e166aced8e42a3bbf52026b5fd1252e094 Mon Sep 17 00:00:00 2001 From: Eike Thies Date: Wed, 6 Mar 2024 15:55:41 +0100 Subject: [PATCH] german language support --- package.json | 18 +++--- src/constants.ts | 58 ++++++++++++++++- src/modifiers.ts | 108 +++++++++++++++++++++++++++++++ src/parser.ts | 5 +- src/types.ts | 1 + test/dutch.spec.ts | 45 +++++++------ test/english.spec.ts | 45 +++++++------ test/german.spec.ts | 147 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 365 insertions(+), 62 deletions(-) create mode 100644 test/german.spec.ts diff --git a/package.json b/package.json index 1f9bf14..050849b 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "size": "size-limit", "analyze": "size-limit --why" }, - "peerDependencies": {}, + "type": "module", "husky": { "hooks": { "pre-commit": "tsdx lint" @@ -45,17 +45,15 @@ } ], "devDependencies": { - "@size-limit/preset-small-lib": "^7.0.8", + "@size-limit/preset-small-lib": "^11.0.2", "@types/chai": "^4.3.0", - "@types/jest": "^27.4.0", - "@types/mocha": "^9.1.0", - "husky": "^7.0.4", - "size-limit": "^7.0.8", + "@types/jest": "^29.5.12", + "@types/mocha": "^10.0.6", + "husky": "^9.0.11", + "size-limit": "^11.0.2", "tsdx": "^0.14.1", "tslib": "^2.3.1", - "typescript": "^4.5.5" - }, - "dependencies": { - "chai": "^4.3.6" + "typescript": "^5.3.3", + "chai": "^5.1.0" } } diff --git a/src/constants.ts b/src/constants.ts index 4987bc2..2487f92 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -154,6 +154,54 @@ export const DUTCH_MAGNITUDE = { quintiljard: 1000000000000000000000000000000000, }; +export const GERMAN_UNIT = { + null: 0, + ein: 1, + eins: 1, + elf: 11, + zwölf: 12, + zwei: 2, + zwo:2, + dreizehn: 13, + drei: 3, + vierzehn: 14, + vier: 4, + fünf: 5, + fünzehn: 15, + sechs: 6, + sechzehn: 16, + siebzehn: 17, + sieben: 7, + achtzehn: 18, + acht: 8, + neunzehn: 19, + neun: 9, + zehn: 10 +}; + +export const GERMAN_TEN = { + zwanzig: 20, + dreissig: 30, + dreißig: 30, + vierzig: 40, + fünfzig: 50, + sechzig: 60, + siebzig: 70, + achtzig: 80, + neunzig: 90, +}; + +export const GERMAN_MAGNITUDE = { + hundert: 100, + tausend: 1000, + million: 1000000, + millionen: 1000000, + milliarde: 1000000000, + billion: 1000000000000, + billiarde: 1000000000000000, + trillion: 1000000000000000000 +}; + export const NUMBER = { ...ENGLISH_UNIT, ...ENGLISH_TEN, @@ -161,19 +209,23 @@ export const NUMBER = { ...DUTCH_UNIT, ...DUTCH_TEN, ...DUTCH_MAGNITUDE, + ...GERMAN_UNIT, + ...GERMAN_TEN, + ...GERMAN_MAGNITUDE, }; -export const UNIT_KEYS = Object.keys({ ...ENGLISH_UNIT, ...DUTCH_UNIT }); -export const TEN_KEYS = Object.keys({ ...ENGLISH_TEN, ...DUTCH_TEN }); +export const UNIT_KEYS = Object.keys({ ...ENGLISH_UNIT, ...DUTCH_UNIT, ...GERMAN_UNIT }); +export const TEN_KEYS = Object.keys({ ...ENGLISH_TEN, ...DUTCH_TEN, ...GERMAN_TEN }); export const MAGNITUDE_KEYS = Object.keys({ ...ENGLISH_MAGNITUDE, ...DUTCH_MAGNITUDE, + ...GERMAN_MAGNITUDE, }); //@ts-ignore export const NUMBER_WORDS = [...UNIT_KEYS, ...TEN_KEYS, ...MAGNITUDE_KEYS]; -export const JOINERS = ['and', 'en']; +export const JOINERS = ['and', 'en', 'und']; export const DECIMALS = ['point', 'dot', 'komma', 'punt']; export const PUNCTUATION = [ diff --git a/src/modifiers.ts b/src/modifiers.ts index 9324836..08ad78e 100644 --- a/src/modifiers.ts +++ b/src/modifiers.ts @@ -2,6 +2,9 @@ import { DUTCH_MAGNITUDE, DUTCH_TEN, DUTCH_UNIT, + GERMAN_MAGNITUDE, + GERMAN_TEN, + GERMAN_UNIT, ENGLISH_MAGNITUDE, ENGLISH_SPECIFIC_SPLIT, ENGLISH_TEN, @@ -121,6 +124,111 @@ function predict( return { longestStart, longestEnd }; } +export const modifyGerman = (chunk: string): string | string[] => { + const units = [...Object.keys(GERMAN_UNIT)]; + const tens = [...Object.keys(GERMAN_TEN)]; + const magnitudes = [...Object.keys(GERMAN_MAGNITUDE)]; + + if ( + units.includes(chunk) || + tens.includes(chunk) || + magnitudes.includes(chunk) + ) { + return chunk; //This chunk is already a whole number that doesn't need converting + } + + const possibleUnits: string[] = units.filter(unit => chunk.includes(unit)); + const possibleTens: string[] = tens.filter(unit => chunk.includes(unit)); + const possibleMagnitudes: string[] = magnitudes.filter(unit => + chunk.includes(unit) + ); + + const possibilities: Possibility[] = calculatePossibilities( + possibleUnits, + possibleTens, + possibleMagnitudes, + chunk + ); + let numbers: Possibility[] = []; + + // Filter out smaller units + for (const possibility of possibilities) { + switch (possibility.type) { + case TOKEN_TYPE.UNIT: { + const nested = possibilities.find(p => { + return ( + p.value !== possibility.value && + p.start <= possibility.start && + p.end >= possibility.end + ); + }); + if (!nested) { + numbers.push(possibility); + } + break; + } + case TOKEN_TYPE.TEN: { + const hasAdjective = possibilities.find(p => { + return ( + p.value.includes(possibility.value) && + p.start === possibility.start && + p.end > possibility.end + ); + }); + if (!hasAdjective) numbers.push(possibility); + break; + } + default: + numbers.push(possibility); + break; + } + } + + numbers = numbers.sort((a, b) => { + return a.start - b.start; + }); + + const result: string[] = []; + for (let i = 0; i < numbers.length; i++) { + const previous = numbers[i - 1]; + const next = numbers[i + 1]; + const number = numbers[i]; + if (!previous) { + if(!next) { + result.push(number.value); + } else if ( + number.type === TOKEN_TYPE.UNIT && + next.type === TOKEN_TYPE.MAGNITUDE + ) { + result.push(number.value); + } else if ( + number.type === TOKEN_TYPE.UNIT && + next.type === TOKEN_TYPE.TEN + ) { + result.push(next.value); + } else { + result.push(number.value); + } + } else { + if (number.type === TOKEN_TYPE.TEN && previous.type === TOKEN_TYPE.UNIT) { + result.push(previous.value); + } else if ( + number.type === TOKEN_TYPE.MAGNITUDE && + previous.type === TOKEN_TYPE.UNIT + ) { + result.push(number.value); + } else if ( + number.type === TOKEN_TYPE.UNIT && + next && + next.type === TOKEN_TYPE.TEN + ) { + result.push(next.value); + } else result.push(number.value); + } + } + return result; +}; + /** * Changes the lexicongraphy of dutch chunks so the compiler understands which number * Much more difficult then the english modifiers since dutch has multiple numbers in a piece of text diff --git a/src/parser.ts b/src/parser.ts index 9058a6b..d8cc83e 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -11,7 +11,7 @@ import { TOKEN_TYPE, UNIT_KEYS, } from './constants'; -import { modifyDutch, modifyEnglish } from './modifiers'; +import { modifyDutch, modifyEnglish, modifyGerman } from './modifiers'; import { HANDLE_TOKEN, Languages, Region, SubRegion, Token } from './types'; /** @@ -274,6 +274,9 @@ export const parser = (text: string, language: Languages): Region[] => { case Languages['nl-nl']: splitted = modifyDutch(currentValue); break; + case Languages['de-de']: + splitted = modifyGerman(currentValue); + break; case Languages['en-us']: splitted = modifyEnglish(currentValue); break; diff --git a/src/types.ts b/src/types.ts index 4f73f76..f6e8849 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,6 +3,7 @@ import { TOKEN_TYPE } from './constants'; export enum Languages { 'nl-nl' = 'nl-nl', 'en-us' = 'en-us', + 'de-de' = 'de-de', } /** * Token is a 'substring' of a sentence, it includes the position of the substring and checks if this substring is 'word' that needs converting to a number. diff --git a/test/dutch.spec.ts b/test/dutch.spec.ts index e15da1b..5660c62 100644 --- a/test/dutch.spec.ts +++ b/test/dutch.spec.ts @@ -1,4 +1,3 @@ -import chai from 'chai'; import { wordsToNumbers } from '../src/index'; import { Languages } from '../src/types'; @@ -6,69 +5,67 @@ describe('Convert words to numbers', () => { it('drieëndertig', () => { const words = 'drieëndertig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(33); + expect(result).toEqual(33); }); it('vierenveertig', () => { const words = 'vierenveertig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(44); + expect(result).toEqual(44); }); it('twee miljoen zes honderd tweeëntwintig duizend drie honderd achtentachtig', () => { const words = 'twee miljoen zes honderd tweeëntwintig duizend drie honderd achtentachtig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(2622388); + expect(result).toEqual(2622388); }); it('tweeëntwintig duizend', () => { const words = 'tweeëntwintig duizend'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(22000); + expect(result).toEqual(22000); }); it('vijf komma zevenenzestig', () => { const words = 'vijf komma zevenenzestig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(5.67); + expect(result).toEqual(5.67); }); it('negen miljoen zeven honderd drieënzestig duizend vier honderd vierenveertig', () => { const words = 'negen miljoen zeven honderd drieënzestig duizend vier honderd vierenveertig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(9763444); + expect(result).toEqual(9763444); }); it('vijf punt eenentwintig', () => { const words = 'vijf punt eenentwintig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(5.21); + expect(result).toEqual(5.21); }); it('vijf komma vijf honderd eenentwintig', () => { const words = 'vijf komma vijf honderd eenentwintig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(5.521); + expect(result).toEqual(5.521); }); it('vijf miljoen vier honderd duizend drie honderd eenentwintig', () => { const words = 'vijf miljoen vier honderd duizend drie honderd eenentwintig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(5400321); + expect(result).toEqual(5400321); }); it('vijf miljoen vier honderd duizend drie honderd eenentwintig en normale text creeert een nieuwe regio zoals vijf honderd en twee', () => { const words = 'vijf miljoen vier honderd duizend drie honderd eenentwintig en normale text creeert een nieuwe regio zoals vijf honderd en twee'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai - .expect(result) - .to.equal('5400321 en normale text creeert 1 nieuwe regio zoals 502'); + expect(result).toEqual('5400321 en normale text creeert 1 nieuwe regio zoals 502'); }); it('één honderd', () => { const words = 'één honderd'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(100); + expect(result).toEqual(100); }); it('vijfentwintig', () => { const words = 'vijfentwintig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(25); + expect(result).toEqual(25); }); it('jaartal negentien achtennegentig', () => { const words = 'negentien achtennegentig'; @@ -76,49 +73,49 @@ describe('Convert words to numbers', () => { language: Languages['nl-nl'], oneNumber: true, }); - chai.expect(result).to.equal(1998); + expect(result).toEqual(1998); }); it('tweeëntwintigste mei', () => { const words = 'tweeëntwintigste mei'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal('22 mei'); + expect(result).toEqual('22 mei'); }); it('negentienhonderd negenenzestig', () => { const words = 'negentienhonderd negenenzestig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(1969); + expect(result).toEqual(1969); }); it('vijfde mei negentienhonderd negenennegentig', () => { const words = 'vijfde mei negentienhonderd negenennegentig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal('5 mei 1999'); + expect(result).toEqual('5 mei 1999'); }); it('drieënnegentig', () => { const words = 'drieënnegentig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(93); + expect(result).toEqual(93); }); it('tweehonderddrieëndertig', () => { const words = 'tweehonderddrieëndertig'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(233); + expect(result).toEqual(233); }); it('tweehonderdduizend', () => { const words = 'tweehonderdduizend'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(200000); + expect(result).toEqual(200000); }); it('vijftienhonderd', () => { const words = 'vijftienhonderd'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(1500); + expect(result).toEqual(1500); }); it('driehonderdvijftien', () => { const words = 'driehonderdvijftien'; const result = wordsToNumbers(words, { language: Languages['nl-nl'] }); - chai.expect(result).to.equal(315); + expect(result).toEqual(315); }); }); diff --git a/test/english.spec.ts b/test/english.spec.ts index a4080f8..1fdc940 100644 --- a/test/english.spec.ts +++ b/test/english.spec.ts @@ -1,4 +1,3 @@ -import chai from 'chai'; import wordsToNumbers from '../src/index'; import { Languages } from '../src/types'; @@ -6,62 +5,60 @@ describe('Convert words to numbers', () => { it('thirty-three', () => { const words = 'thirty-three'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(33); + expect(result).toEqual(33); }); it('forty-four', () => { const words = 'forty-four'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(44); + expect(result).toEqual(44); }); it('two million six hundred twenty two thousand three hundred eighty eight', () => { const words = 'two million six hundred twenty two thousand three hundred eighty eight'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(2622388); + expect(result).toEqual(2622388); }); it('twenty two thousand', () => { const words = 'twenty two thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(22000); + expect(result).toEqual(22000); }); it('five point sixty seven', () => { const words = 'five point sixty seven'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(5.67); + expect(result).toEqual(5.67); }); it('nine million seven hundred sixty three thousand four hundred forty four', () => { const words = 'nine million seven hundred and sixty three thousand four hundred forty four'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(9763444); + expect(result).toEqual(9763444); }); it('five point twenty one', () => { const words = 'five point twenty one'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(5.21); + expect(result).toEqual(5.21); }); it('five point five hundred twenty one', () => { const words = 'five point five hundred twenty one'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(5.521); + expect(result).toEqual(5.521); }); it('five million four hundred thousand three hundred and twenty one', () => { const words = 'five million four hundred thousand three hundred and twenty one'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(5400321); + expect(result).toEqual(5400321); }); it('five million four hundred thousand three hundred and twenty one and normal text should create anoither region like this five hundred and two', () => { const words = 'five million four hundred thousand three hundred and twenty one and normal text should create anoither region like this five hundred and two'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai - .expect(result) - .to.equal( + expect(result).toEqual( '5400321 and normal text should create anoither region like this 502' ); }); @@ -69,13 +66,13 @@ describe('Convert words to numbers', () => { it('one-hundred', () => { const words = 'one-hundred'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(100); + expect(result).toEqual(100); }); it('twenty-five', () => { const words = 'twenty-five'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(25); + expect(result).toEqual(25); }); it('should support years like 1998 (ENGLISH)', () => { @@ -84,30 +81,30 @@ describe('Convert words to numbers', () => { language: Languages['en-us'], oneNumber: true, }); - chai.expect(result).to.equal(1998); + expect(result).toEqual(1998); }); it('The twenty-second of may', () => { const words = 'The twenty-second of may'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal('The 22 of may'); + expect(result).toEqual('The 22 of may'); }); it('nineteen hundred sixty nine', () => { const words = 'nineteen hundred sixty nine'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(1969); + expect(result).toEqual(1969); }); it('fifth of may nineteenhundred ninety-nine', () => { const words = 'fifth of may nineteenhundred ninety-nine'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal('5 of may 1999'); + expect(result).toEqual('5 of may 1999'); }); it('two hundred thousand', () => { const words = 'two hundred thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(200000); + expect(result).toEqual(200000); }); // Failing tests from words-to-numbers @@ -115,24 +112,24 @@ describe('Convert words to numbers', () => { it('one thirty thousand', () => { const words = 'one thirty thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal('1 30000'); + expect(result).toEqual('1 30000'); }); it('nineteen eighty thousand', () => { const words = 'nineteen eighty thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal('19 80000'); + expect(result).toEqual('19 80000'); }); it('one hundred two thousand', () => { const words = 'one hundred two thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(102000); + expect(result).toEqual(102000); }); it('one hundred and two thousand', () => { const words = 'one hundred and two thousand'; const result = wordsToNumbers(words, { language: Languages['en-us'] }); - chai.expect(result).to.equal(102000); + expect(result).toEqual(102000); }); }); diff --git a/test/german.spec.ts b/test/german.spec.ts new file mode 100644 index 0000000..64e595e --- /dev/null +++ b/test/german.spec.ts @@ -0,0 +1,147 @@ +import wordsToNumbers from '../src/index'; +import { Languages } from '../src/types'; + +describe('Convert words to numbers', () => { + it('dreiunddreißig', () => { + const words = 'dreiunddreißig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(33); + }); + it('vierundvierzig', () => { + const words = 'vierundvierzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(44); + }); + it('zwei Millionen sechshundertzweiundzwanzigtausenddreihundertachtundachtzig', () => { + const words = + 'zwei Millionen sechshundertzweiundzwanzigtausenddreihundertachtundachtzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(2622388); + }); + it('zweiundzwanzigtausend', () => { + const words = 'zweiundzwanzigtausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(22000); + }); + + it('fünf Komma siebenundsechzig', () => { + const words = 'fünf Komma siebenundsechzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(5.67); + }); + + it('neun Millionen siebenhundertdreiundsechzigtausendvierhundertvierundvierzig', () => { + const words = 'neun Millionen siebenhundertdreiundsechzigtausendvierhundertvierundvierzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(9763444); + }); + it('fünf Komma einundzwanzig', () => { + const words = 'fünf Komma einundzwanzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(5.21); + }); + it('dreihundertundeinundzwanzig', () => { + const words = 'dreihunderteinundzwanzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(321); +}); + it('dreihunderteinundzwanzig', () => { + const words = 'dreihunderteinundzwanzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(321); +}); + it('fünf Millionen vierhunderttausenddreihundertundeinundzwanzig', () => { + const words = 'fünf Millionen vierhunderttausenddreihundertundeinundzwanzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(5400321); + }); + + it('fünf Millionen vierhunderttausenddreihundertundeinundzwanzig und normaler Text sollte eine andere Region wie dies fünfhundertundzwei erstellen', () => { + const words = 'fünf Millionen vierhunderttausenddreihundertundeinundzwanzig und normaler Text sollte eine andere Region wie dies fünfhundertundzwei erstellen'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual('5400321 und normaler Text sollte 1 andere Region wie dies 502 erstellen'); + }); + + it('einhundert', () => { + const words = 'einhundert'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(100); + }); + + it('fünfundzwanzig', () => { + const words = 'fünfundzwanzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(25); + }); + + it('sollte Jahre wie 1998 unterstützen', () => { + const words = 'neunzehnhundertachtundneunzig'; + const result = wordsToNumbers(words, { + language: Languages['de-de'], + oneNumber: true, + }); + expect(result).toEqual(1998); + }); + + it('Der zweiundzwanzigste Mai', () => { + const words = 'Der zweiundzwanzigste Mai'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual('Der 22 Mai'); + }); + + it('neunzehnhundertneunundsechzig', () => { + const words = 'neunzehnhundertneunundsechzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(1969); + }); + it('fünfter Mai neunzehnhundertneunundneunzig', () => { + const words = 'fünfter Mai neunzehnhundertneunundneunzig'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual('5 Mai 1999'); + }); + + it('zweihunderttausend', () => { + const words = 'zweihunderttausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(200000); + }); + + // Fehlschlagende Tests von words-to-numbers + + it('eins dreißigtausend', () => { + const words = 'eins dreißigtausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual('1 30000'); + }); + + it('einemillionneunhundertachtzigtausend', () => { + const words = 'einemillionneunhundertachtzigtausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(1980000); + }); + + it('einhundertzweitausend', () => { + const words = 'einhundertzweitausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(102000); + }); + + it('einhundertundzweitausend', () => { + const words = 'einhundertundzweitausend'; + const result = wordsToNumbers(words, { language: Languages['de-de'] }); + expect(result).toEqual(102000); + }); + + // wrong + // it('neunzehnhundertachtzigtausend', () => { + // const words = 'neunzehnhundertachtzigtausend'; + // const result = wordsToNumbers(words, { language: Languages['de-de'] }); + // expect(result).toEqual('1980000'); + // }); + +// it('fünf Komma fünf zwei eins', () => { +// const words = 'fünf Komma fünf zwei eins'; +// const result = wordsToNumbers(words, { language: Languages['de-de'] }); +// expect(result).toEqual(5.521); +// }); +});