@@ -317,4 +317,214 @@ describe('readVnNumber', () => {
317317 expect ( readVnNumber ( 3121 ) ) . to . equal ( 'ba nghìn một trăm hai mươi mốt' )
318318 } )
319319 } )
320+
321+ describe ( 'groups with leading zeros (0XX patterns)' , ( ) => {
322+ it ( 'should handle 001 pattern in various positions' , ( ) => {
323+ expect ( readVnNumber ( 1001 ) ) . to . equal ( 'một nghìn không trăm lẻ một' )
324+ expect ( readVnNumber ( 1001001 ) ) . to . equal (
325+ 'một triệu không trăm lẻ một nghìn không trăm lẻ một' ,
326+ )
327+ } )
328+
329+ it ( 'should handle 068 pattern (0 + tens + ones)' , ( ) => {
330+ expect ( readVnNumber ( 1068 ) ) . to . equal ( 'một nghìn không trăm sáu mươi tám' )
331+ expect ( readVnNumber ( 10068 ) ) . to . equal ( 'mười nghìn không trăm sáu mươi tám' )
332+ expect ( readVnNumber ( 100068 ) ) . to . equal (
333+ 'một trăm nghìn không trăm sáu mươi tám' ,
334+ )
335+ } )
336+
337+ it ( 'should handle 060 pattern (0 + tens + 0)' , ( ) => {
338+ expect ( readVnNumber ( 1060 ) ) . to . equal ( 'một nghìn không trăm sáu mươi' )
339+ expect ( readVnNumber ( 2060 ) ) . to . equal ( 'hai nghìn không trăm sáu mươi' )
340+ } )
341+
342+ it ( 'should handle 010 through 090 patterns' , ( ) => {
343+ expect ( readVnNumber ( 1010 ) ) . to . equal ( 'một nghìn không trăm mười' )
344+ expect ( readVnNumber ( 1020 ) ) . to . equal ( 'một nghìn không trăm hai mươi' )
345+ expect ( readVnNumber ( 1030 ) ) . to . equal ( 'một nghìn không trăm ba mươi' )
346+ expect ( readVnNumber ( 1090 ) ) . to . equal ( 'một nghìn không trăm chín mươi' )
347+ } )
348+
349+ it ( 'should handle 011 through 019 patterns' , ( ) => {
350+ expect ( readVnNumber ( 1011 ) ) . to . equal ( 'một nghìn không trăm mười một' )
351+ expect ( readVnNumber ( 1015 ) ) . to . equal ( 'một nghìn không trăm mười lăm' )
352+ expect ( readVnNumber ( 1019 ) ) . to . equal ( 'một nghìn không trăm mười chín' )
353+ } )
354+
355+ it ( 'should handle 021, 031, etc. (0 + tens + 1 with mốt)' , ( ) => {
356+ expect ( readVnNumber ( 1021 ) ) . to . equal ( 'một nghìn không trăm hai mươi mốt' )
357+ expect ( readVnNumber ( 1031 ) ) . to . equal ( 'một nghìn không trăm ba mươi mốt' )
358+ expect ( readVnNumber ( 1091 ) ) . to . equal ( 'một nghìn không trăm chín mươi mốt' )
359+ } )
360+
361+ it ( 'should handle 025, 035, etc. (0 + tens + 5 with lăm)' , ( ) => {
362+ expect ( readVnNumber ( 1025 ) ) . to . equal ( 'một nghìn không trăm hai mươi lăm' )
363+ expect ( readVnNumber ( 1035 ) ) . to . equal ( 'một nghìn không trăm ba mươi lăm' )
364+ expect ( readVnNumber ( 1095 ) ) . to . equal ( 'một nghìn không trăm chín mươi lăm' )
365+ } )
366+
367+ it ( 'should handle 002 through 009 patterns' , ( ) => {
368+ expect ( readVnNumber ( 1002 ) ) . to . equal ( 'một nghìn không trăm lẻ hai' )
369+ expect ( readVnNumber ( 1003 ) ) . to . equal ( 'một nghìn không trăm lẻ ba' )
370+ expect ( readVnNumber ( 1005 ) ) . to . equal ( 'một nghìn không trăm lẻ năm' )
371+ expect ( readVnNumber ( 1009 ) ) . to . equal ( 'một nghìn không trăm lẻ chín' )
372+ } )
373+ } )
374+
375+ describe ( 'all tens patterns (X0, X1-X9)' , ( ) => {
376+ it ( 'should handle all X0 patterns correctly' , ( ) => {
377+ expect ( readVnNumber ( 10 ) ) . to . equal ( 'mười' )
378+ expect ( readVnNumber ( 20 ) ) . to . equal ( 'hai mươi' )
379+ expect ( readVnNumber ( 30 ) ) . to . equal ( 'ba mươi' )
380+ expect ( readVnNumber ( 40 ) ) . to . equal ( 'bốn mươi' )
381+ expect ( readVnNumber ( 50 ) ) . to . equal ( 'năm mươi' )
382+ expect ( readVnNumber ( 60 ) ) . to . equal ( 'sáu mươi' )
383+ expect ( readVnNumber ( 70 ) ) . to . equal ( 'bảy mươi' )
384+ expect ( readVnNumber ( 80 ) ) . to . equal ( 'tám mươi' )
385+ expect ( readVnNumber ( 90 ) ) . to . equal ( 'chín mươi' )
386+ } )
387+
388+ it ( 'should handle all X1 patterns correctly' , ( ) => {
389+ expect ( readVnNumber ( 11 ) ) . to . equal ( 'mười một' )
390+ expect ( readVnNumber ( 21 ) ) . to . equal ( 'hai mươi mốt' )
391+ expect ( readVnNumber ( 31 ) ) . to . equal ( 'ba mươi mốt' )
392+ expect ( readVnNumber ( 41 ) ) . to . equal ( 'bốn mươi mốt' )
393+ expect ( readVnNumber ( 51 ) ) . to . equal ( 'năm mươi mốt' )
394+ expect ( readVnNumber ( 61 ) ) . to . equal ( 'sáu mươi mốt' )
395+ expect ( readVnNumber ( 71 ) ) . to . equal ( 'bảy mươi mốt' )
396+ expect ( readVnNumber ( 81 ) ) . to . equal ( 'tám mươi mốt' )
397+ expect ( readVnNumber ( 91 ) ) . to . equal ( 'chín mươi mốt' )
398+ } )
399+
400+ it ( 'should handle all X5 patterns correctly' , ( ) => {
401+ expect ( readVnNumber ( 15 ) ) . to . equal ( 'mười lăm' )
402+ expect ( readVnNumber ( 25 ) ) . to . equal ( 'hai mươi lăm' )
403+ expect ( readVnNumber ( 35 ) ) . to . equal ( 'ba mươi lăm' )
404+ expect ( readVnNumber ( 45 ) ) . to . equal ( 'bốn mươi lăm' )
405+ expect ( readVnNumber ( 55 ) ) . to . equal ( 'năm mươi lăm' )
406+ expect ( readVnNumber ( 65 ) ) . to . equal ( 'sáu mươi lăm' )
407+ expect ( readVnNumber ( 75 ) ) . to . equal ( 'bảy mươi lăm' )
408+ expect ( readVnNumber ( 85 ) ) . to . equal ( 'tám mươi lăm' )
409+ expect ( readVnNumber ( 95 ) ) . to . equal ( 'chín mươi lăm' )
410+ } )
411+
412+ it ( 'should handle X2, X3, X4, X6, X7, X8, X9 patterns' , ( ) => {
413+ expect ( readVnNumber ( 22 ) ) . to . equal ( 'hai mươi hai' )
414+ expect ( readVnNumber ( 33 ) ) . to . equal ( 'ba mươi ba' )
415+ expect ( readVnNumber ( 44 ) ) . to . equal ( 'bốn mươi bốn' )
416+ expect ( readVnNumber ( 66 ) ) . to . equal ( 'sáu mươi sáu' )
417+ expect ( readVnNumber ( 77 ) ) . to . equal ( 'bảy mươi bảy' )
418+ expect ( readVnNumber ( 88 ) ) . to . equal ( 'tám mươi tám' )
419+ expect ( readVnNumber ( 99 ) ) . to . equal ( 'chín mươi chín' )
420+ } )
421+ } )
422+
423+ describe ( 'hundreds patterns (X00, X01-X09, X10-X99)' , ( ) => {
424+ it ( 'should handle all X00 patterns' , ( ) => {
425+ expect ( readVnNumber ( 100 ) ) . to . equal ( 'một trăm' )
426+ expect ( readVnNumber ( 200 ) ) . to . equal ( 'hai trăm' )
427+ expect ( readVnNumber ( 300 ) ) . to . equal ( 'ba trăm' )
428+ expect ( readVnNumber ( 400 ) ) . to . equal ( 'bốn trăm' )
429+ expect ( readVnNumber ( 500 ) ) . to . equal ( 'năm trăm' )
430+ expect ( readVnNumber ( 600 ) ) . to . equal ( 'sáu trăm' )
431+ expect ( readVnNumber ( 700 ) ) . to . equal ( 'bảy trăm' )
432+ expect ( readVnNumber ( 800 ) ) . to . equal ( 'tám trăm' )
433+ expect ( readVnNumber ( 900 ) ) . to . equal ( 'chín trăm' )
434+ } )
435+
436+ it ( 'should handle all X01-X09 patterns with "lẻ"' , ( ) => {
437+ expect ( readVnNumber ( 101 ) ) . to . equal ( 'một trăm lẻ một' )
438+ expect ( readVnNumber ( 202 ) ) . to . equal ( 'hai trăm lẻ hai' )
439+ expect ( readVnNumber ( 303 ) ) . to . equal ( 'ba trăm lẻ ba' )
440+ expect ( readVnNumber ( 404 ) ) . to . equal ( 'bốn trăm lẻ bốn' )
441+ expect ( readVnNumber ( 505 ) ) . to . equal ( 'năm trăm lẻ năm' )
442+ expect ( readVnNumber ( 606 ) ) . to . equal ( 'sáu trăm lẻ sáu' )
443+ expect ( readVnNumber ( 707 ) ) . to . equal ( 'bảy trăm lẻ bảy' )
444+ expect ( readVnNumber ( 808 ) ) . to . equal ( 'tám trăm lẻ tám' )
445+ expect ( readVnNumber ( 909 ) ) . to . equal ( 'chín trăm lẻ chín' )
446+ } )
447+
448+ it ( 'should handle X10 patterns' , ( ) => {
449+ expect ( readVnNumber ( 110 ) ) . to . equal ( 'một trăm mười' )
450+ expect ( readVnNumber ( 210 ) ) . to . equal ( 'hai trăm mười' )
451+ expect ( readVnNumber ( 310 ) ) . to . equal ( 'ba trăm mười' )
452+ expect ( readVnNumber ( 910 ) ) . to . equal ( 'chín trăm mười' )
453+ } )
454+
455+ it ( 'should handle X11-X19 patterns' , ( ) => {
456+ expect ( readVnNumber ( 111 ) ) . to . equal ( 'một trăm mười một' )
457+ expect ( readVnNumber ( 215 ) ) . to . equal ( 'hai trăm mười lăm' )
458+ expect ( readVnNumber ( 319 ) ) . to . equal ( 'ba trăm mười chín' )
459+ } )
460+
461+ it ( 'should handle X21, X31, etc. with "mốt"' , ( ) => {
462+ expect ( readVnNumber ( 121 ) ) . to . equal ( 'một trăm hai mươi mốt' )
463+ expect ( readVnNumber ( 231 ) ) . to . equal ( 'hai trăm ba mươi mốt' )
464+ expect ( readVnNumber ( 341 ) ) . to . equal ( 'ba trăm bốn mươi mốt' )
465+ } )
466+
467+ it ( 'should handle X25, X35, etc. with "lăm"' , ( ) => {
468+ expect ( readVnNumber ( 125 ) ) . to . equal ( 'một trăm hai mươi lăm' )
469+ expect ( readVnNumber ( 235 ) ) . to . equal ( 'hai trăm ba mươi lăm' )
470+ expect ( readVnNumber ( 345 ) ) . to . equal ( 'ba trăm bốn mươi lăm' )
471+ } )
472+ } )
473+
474+ describe ( 'mixed magnitude numbers' , ( ) => {
475+ it ( 'should handle numbers spanning all magnitudes' , ( ) => {
476+ expect ( readVnNumber ( 1234 ) ) . to . equal ( 'một nghìn hai trăm ba mươi bốn' )
477+ expect ( readVnNumber ( 12345 ) ) . to . equal (
478+ 'mười hai nghìn ba trăm bốn mươi lăm' ,
479+ )
480+ expect ( readVnNumber ( 123456 ) ) . to . equal (
481+ 'một trăm hai mươi ba nghìn bốn trăm năm mươi sáu' ,
482+ )
483+ expect ( readVnNumber ( 1234567 ) ) . to . equal (
484+ 'một triệu hai trăm ba mươi bốn nghìn năm trăm sáu mươi bảy' ,
485+ )
486+ expect ( readVnNumber ( 12345678 ) ) . to . equal (
487+ 'mười hai triệu ba trăm bốn mươi lăm nghìn sáu trăm bảy mươi tám' ,
488+ )
489+ expect ( readVnNumber ( 123456789 ) ) . to . equal (
490+ 'một trăm hai mươi ba triệu bốn trăm năm mươi sáu nghìn bảy trăm tám mươi chín' ,
491+ )
492+ } )
493+
494+ it ( 'should handle numbers with zeros in different positions' , ( ) => {
495+ expect ( readVnNumber ( 100001 ) ) . to . equal ( 'một trăm nghìn không trăm lẻ một' )
496+ expect ( readVnNumber ( 1000010 ) ) . to . equal ( 'một triệu không trăm mười' )
497+ expect ( readVnNumber ( 10000100 ) ) . to . equal ( 'mười triệu một trăm' )
498+ } )
499+ } )
500+
501+ describe ( 'boundary values' , ( ) => {
502+ it ( 'should handle single digit boundaries' , ( ) => {
503+ expect ( readVnNumber ( 9 ) ) . to . equal ( 'chín' )
504+ } )
505+
506+ it ( 'should handle two digit boundaries' , ( ) => {
507+ expect ( readVnNumber ( 99 ) ) . to . equal ( 'chín mươi chín' )
508+ } )
509+
510+ it ( 'should handle three digit boundaries' , ( ) => {
511+ expect ( readVnNumber ( 999 ) ) . to . equal ( 'chín trăm chín mươi chín' )
512+ } )
513+
514+ it ( 'should handle thousand boundaries' , ( ) => {
515+ expect ( readVnNumber ( 9999 ) ) . to . equal ( 'chín nghìn chín trăm chín mươi chín' )
516+ } )
517+
518+ it ( 'should handle million boundaries' , ( ) => {
519+ expect ( readVnNumber ( 999999 ) ) . to . equal (
520+ 'chín trăm chín mươi chín nghìn chín trăm chín mươi chín' ,
521+ )
522+ } )
523+
524+ it ( 'should handle billion boundaries' , ( ) => {
525+ expect ( readVnNumber ( 999999999 ) ) . to . equal (
526+ 'chín trăm chín mươi chín triệu chín trăm chín mươi chín nghìn chín trăm chín mươi chín' ,
527+ )
528+ } )
529+ } )
320530} )
0 commit comments