UNPKG

bahtrext

Version:
616 lines (576 loc) 37.4 kB
import { FULLBAHT, BAHT, INFINITY, SATANG, MILLION } from './const' import { ed, allowNeg } from "./const/defaultConfig" import BR, { NumText, BT, B2, BF, ABT, PrintSatangs, BulkBahtText, SatangNum, TB, repeat, IsValidTB, IsValidText, PrintBaht, OB, LNBT, SEP, NEG, VERSION } from "."; import op from "operation-strint" import { InvalidType, InvalidString } from './const/error'; test(`PrintBaht`, () => { expect(PrintBaht('')).toBe(''); expect(PrintBaht(`239043`)).toBe("สองแสนสามหมื่นเก้าพันสี่สิบสามบาท"); expect(PrintBaht(`7238974333098402`)).toBe( "เจ็ดพันสองร้อยสามสิบแปดล้านเก้าแสนเจ็ดหมื่นสี่พันสามร้อยสามสิบสามล้านเก้าหมื่นแปดพันสี่ร้อยสองบาท" ); expect(PrintBaht(`0`)).toBe("บาท"); }); test('NumText', () => { expect(NumText(`ไม่เอา123`)).toBe(`ไม่เอาหนึ่งสองสาม`); expect(NumText(84000)).toBe(InvalidType); }); test("BF", () => { expect(BF()).toBeUndefined(); expect(BF(283)).toBe(InvalidType); expect(BF(`๑๒๓๔๕๖๗๘๐๙`)).toBe( `หนึ่งพันสองร้อยสามสิบสี่ล้านห้าแสนหกหมื่นเจ็ดพันแปดร้อยเก้าบาทถ้วน` ); expect(BF(`๑๒๓๔๕๖๗๘๐๙๑`)).toBe( `หนึ่งหมื่นสองพันสามร้อยสี่สิบห้าล้านหกแสนเจ็ดหมื่นแปดพันเก้าสิบเอ็ดบาทถ้วน` ); }); describe.each([ ['BT', BT], // ['B2', B2], ])('%s Tests', (name, func) => { test(`${name} CEIL`, () => { expect(func(`4.990001`, false, false, `c`)).toBe(`ห้าบาทถ้วน`); }) test(`${name} FLOOR`, () => { expect(func(`4.990001`, false, false, `f`)).toBe(`สี่บาทเก้าสิบเก้าสตางค์`); }) test(`${name} General`, () => { expect(func(`lol`)).toBeUndefined(); expect(func(`2000000000000.9`, false, false, `c`)).toBe(`สองล้านล้านบาทเก้าสิบสตางค์`); expect(func(`2000000000000.990003`, false, false, `c`)).toBe(`สองล้านล้านหนึ่งบาทถ้วน`); expect(func(`2000000000000.99`, false, false, `f`)).toBe(`สองล้านล้านบาทเก้าสิบเก้าสตางค์`); expect(func(`2000000000000.990003`, false, false, `f`)).toBe(`สองล้านล้านบาทเก้าสิบเก้าสตางค์`); expect(func(`2000000000000.00`)).toBe(`สองล้านล้านบาทถ้วน`); expect(func(`1000001000001`)).toBe(`หนึ่งล้านหนึ่งล้านหนึ่งบาทถ้วน`); expect(func(`1000001000001`, true)).toBe(`หนึ่งล้านเอ็ดล้านเอ็ดบาทถ้วน`); expect(func(`1000011000001`, true)).toBe(`หนึ่งล้านสิบเอ็ดล้านเอ็ดบาทถ้วน`); expect(func(`101`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(func(`000101`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(func(`000000000000000101`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(func(`000000000000000101n`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(func(`101`, true)).toBe(`หนึ่งร้อยเอ็ดบาทถ้วน`); expect(func(`123`)).toBe(`หนึ่งร้อยยี่สิบสามบาทถ้วน`); expect(func(`8.00`)).toBe(`แปดบาทถ้วน`); expect(func(`5678.00`)).toBe(`ห้าพันหกร้อยเจ็ดสิบแปดบาทถ้วน`); expect(func(`63147.89`)).toBe(`หกหมื่นสามพันหนึ่งร้อยสี่สิบเจ็ดบาทแปดสิบเก้าสตางค์`); expect(func(`51000001.00`, true)).toBe(`ห้าสิบเอ็ดล้านเอ็ดบาทถ้วน`); expect(func(`51000001.00`)).toBe(`ห้าสิบเอ็ดล้านหนึ่งบาทถ้วน`); expect(func(`317.10`)).toBe(`สามร้อยสิบเจ็ดบาทสิบสตางค์`); expect(func(`422.26`)).toBe(`สี่ร้อยยี่สิบสองบาทยี่สิบหกสตางค์`); expect(func(`11.11`)).toBe(`สิบเอ็ดบาทสิบเอ็ดสตางค์`); expect(func(`191415.11`)).toBe(`หนึ่งแสนเก้าหมื่นหนึ่งพันสี่ร้อยสิบห้าบาทสิบเอ็ดสตางค์`); expect(func(`1.01`)).toBe(`หนึ่งบาทหนึ่งสตางค์`); expect(func(`5678.46`)).toBe(`ห้าพันหกร้อยเจ็ดสิบแปดบาทสี่สิบหกสตางค์`); expect(func(`0.67`)).toBe(`หกสิบเจ็ดสตางค์`); expect(func(`768,601,800,000,000`)).toBe(`เจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน`); expect(func(`768_601_800_000_000`)).toBe(`เจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน`); expect(func(`777777777777777777777777777777777777777777`)).toBe( `เจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดล้านเจ็ดแสนเจ็ดหมื่นเจ็ดพันเจ็ดร้อยเจ็ดสิบเจ็ดบาทถ้วน` ); }); test(`${name} OL`, () => { expect(func(`0x77`)).toBe(`หนึ่งร้อยสิบเก้าบาทถ้วน`); expect(func(`077`)).toBe(`เจ็ดสิบเจ็ดบาทถ้วน`); expect(func(`077`, false, true)).toBe(`หกสิบสามบาทถ้วน`); expect(func(`0o71`, false, true)).toBe(`ห้าสิบเจ็ดบาทถ้วน`); expect(func(`0o71`)).toBeUndefined(); expect(func(`0o17`, false, true)).toBe(`สิบห้าบาทถ้วน`); }); test(`${name} BL`, () => { expect(func(`0B77`)).toBeUndefined(); expect(func(`0B11`)).toBe(`สามบาทถ้วน`); expect(func(`0b00101010101001010101011001010010010100100001010010001001`)).toBe( `หนึ่งหมื่นสองพันสามล้านเจ็ดแสนสามหมื่นเก้าพันหนึ่งร้อยแปดสิบแปดล้านเจ็ดแสนสองหมื่นแปดพันเก้าร้อยหกสิบเก้าบาทถ้วน` ); }); }); test("ABT", () => { expect(ABT(Number.MAX_VALUE)).toBe(INFINITY); expect(ABT(-Number.MAX_VALUE)).toBe(`ลบ${INFINITY}`); expect(ABT(`${Number.MAX_VALUE}`)).toBe(INFINITY); expect(ABT(`-${Number.MAX_VALUE}`, { ed, allowNeg: true })).toBe(`ลบ${INFINITY}`); expect(ABT(`lol`)).toBeUndefined(); expect(ABT(37)).toBe(`สามสิบเจ็ดบาทถ้วน`); expect(ABT(`2000000000000.00`)).toBe(`สองล้านล้านบาทถ้วน`); expect(ABT(`123`)).toBe(`หนึ่งร้อยยี่สิบสามบาทถ้วน`); expect(ABT(`8.00`)).toBe(`แปดบาทถ้วน`); expect(ABT(`5678.00`)).toBe(`ห้าพันหกร้อยเจ็ดสิบแปดบาทถ้วน`); expect(ABT(`63147.89`)).toBe( `หกหมื่นสามพันหนึ่งร้อยสี่สิบเจ็ดบาทแปดสิบเก้าสตางค์` ); expect(ABT(`51000001.00`)).toBe(`ห้าสิบเอ็ดล้านหนึ่งบาทถ้วน`); expect(ABT(`317.10`)).toBe(`สามร้อยสิบเจ็ดบาทสิบสตางค์`); expect(ABT(`422.26`)).toBe(`สี่ร้อยยี่สิบสองบาทยี่สิบหกสตางค์`); expect(ABT(`11.11`)).toBe(`สิบเอ็ดบาทสิบเอ็ดสตางค์`); expect(ABT(`191415.11`)).toBe( `หนึ่งแสนเก้าหมื่นหนึ่งพันสี่ร้อยสิบห้าบาทสิบเอ็ดสตางค์` ); expect(ABT(`1.01`)).toBe(`หนึ่งบาทหนึ่งสตางค์`); expect(ABT(`5678.46`)).toBe(`ห้าพันหกร้อยเจ็ดสิบแปดบาทสี่สิบหกสตางค์`); expect(ABT(`0.67`)).toBe(`หกสิบเจ็ดสตางค์`); expect(ABT(`768,601,800,000,000`)).toBe( `เจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน` ); expect(ABT(`768,601,800,000,000n`)).toBe( `เจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน` ); expect(ABT([123])).toBe( undefined ) expect(ABT(9007199254740992)).toBe( `เก้าพันเจ็ดล้านหนึ่งแสนเก้าหมื่นเก้าพันสองร้อยห้าสิบสี่ล้านเจ็ดแสนสี่หมื่นเก้าร้อยเก้าสิบสองบาทถ้วน` ); expect(ABT(9007199254740992n)).toBe( `เก้าพันเจ็ดล้านหนึ่งแสนเก้าหมื่นเก้าพันสองร้อยห้าสิบสี่ล้านเจ็ดแสนสี่หมื่นเก้าร้อยเก้าสิบสองบาทถ้วน` ); expect(ABT(`-0.67`)).toBeUndefined(); }); test("ABT Negative", () => { expect(ABT(`-0.67`, {ed: false, allowNeg: true})).toBe(`ลบหกสิบเจ็ดสตางค์`); expect(ABT(`--0.67`, { ed: false, allowNeg: true })).toBeUndefined(); expect(ABT(`-2000000000000.00`, {ed: false, allowNeg: true})).toBe(`ลบสองล้านล้านบาทถ้วน`); expect(ABT(`-123`, {ed: false, allowNeg: true})).toBe(`ลบหนึ่งร้อยยี่สิบสามบาทถ้วน`); expect(ABT(`-123n`, {ed: false, allowNeg: true})).toBe(`ลบหนึ่งร้อยยี่สิบสามบาทถ้วน`); expect(ABT(`-8.00`, {ed: false, allowNeg: true})).toBe(`ลบแปดบาทถ้วน`); expect(ABT(`-5678.00`, {ed: false, allowNeg: true})).toBe(`ลบห้าพันหกร้อยเจ็ดสิบแปดบาทถ้วน`); expect(ABT(`-63147.89`, {ed: false, allowNeg: true})).toBe( `ลบหกหมื่นสามพันหนึ่งร้อยสี่สิบเจ็ดบาทแปดสิบเก้าสตางค์` ); expect(ABT(`-51000001.00`, {ed: false, allowNeg: true})).toBe(`ลบห้าสิบเอ็ดล้านหนึ่งบาทถ้วน`); expect(ABT(`-317.10`, {ed: false, allowNeg: true})).toBe(`ลบสามร้อยสิบเจ็ดบาทสิบสตางค์`); expect(ABT(`-422.26`, {ed: false, allowNeg: true})).toBe(`ลบสี่ร้อยยี่สิบสองบาทยี่สิบหกสตางค์`); expect(ABT(`-11.11`, {ed: false, allowNeg: true})).toBe(`ลบสิบเอ็ดบาทสิบเอ็ดสตางค์`); expect(ABT(`-191415.11`, {ed: false, allowNeg: true})).toBe( `ลบหนึ่งแสนเก้าหมื่นหนึ่งพันสี่ร้อยสิบห้าบาทสิบเอ็ดสตางค์` ); expect(ABT(`-1.01`, {ed: false, allowNeg: true})).toBe(`ลบหนึ่งบาทหนึ่งสตางค์`); expect(ABT(`-๑.0๑`, {ed: false, allowNeg: true})).toBe(`ลบหนึ่งบาทหนึ่งสตางค์`); expect(ABT(`-5678.46`, {ed: false, allowNeg: true})).toBe(`ลบห้าพันหกร้อยเจ็ดสิบแปดบาทสี่สิบหกสตางค์`); expect(ABT(`-768,601,800,000,000`, {ed: false, allowNeg: true})).toBe( `ลบเจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน` ); expect(ABT(`101`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(ABT(`101`, { ed: true })).toBe(`หนึ่งร้อยเอ็ดบาทถ้วน`); expect(ABT(`101n`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(ABT(`101n`, { ed: true })).toBe(`หนึ่งร้อยเอ็ดบาทถ้วน`); }) test(`NEG`, () => { expect(NEG(`-0.67`)).toBe(`ลบหกสิบเจ็ดสตางค์`); expect(NEG(`--0.67`)).toBeUndefined(); expect(NEG(`-2000000000000.00`)).toBe(`ลบสองล้านล้านบาทถ้วน`); expect(NEG(`-123`)).toBe(`ลบหนึ่งร้อยยี่สิบสามบาทถ้วน`); expect(NEG(`-8.00`)).toBe(`ลบแปดบาทถ้วน`); expect(NEG(`-5678.00`)).toBe(`ลบห้าพันหกร้อยเจ็ดสิบแปดบาทถ้วน`); expect(NEG(`-63147.89`)).toBe( `ลบหกหมื่นสามพันหนึ่งร้อยสี่สิบเจ็ดบาทแปดสิบเก้าสตางค์` ); expect(NEG(`-51000001.00`)).toBe(`ลบห้าสิบเอ็ดล้านหนึ่งบาทถ้วน`); expect(NEG(`-317.10`)).toBe(`ลบสามร้อยสิบเจ็ดบาทสิบสตางค์`); expect(NEG(`-422.26`)).toBe( `ลบสี่ร้อยยี่สิบสองบาทยี่สิบหกสตางค์` ); expect(NEG(`-11.11`)).toBe(`ลบสิบเอ็ดบาทสิบเอ็ดสตางค์`); expect(NEG(`-191415.11`)).toBe( `ลบหนึ่งแสนเก้าหมื่นหนึ่งพันสี่ร้อยสิบห้าบาทสิบเอ็ดสตางค์` ); expect(NEG(`-1.01`)).toBe(`ลบหนึ่งบาทหนึ่งสตางค์`); expect(NEG(`-๑.0๑`)).toBe(`ลบหนึ่งบาทหนึ่งสตางค์`); expect(NEG(`-5678.46`)).toBe( `ลบห้าพันหกร้อยเจ็ดสิบแปดบาทสี่สิบหกสตางค์` ); expect(NEG(`-768,601,800,000,000`)).toBe( `ลบเจ็ดร้อยหกสิบแปดล้านหกแสนหนึ่งพันแปดร้อยล้านบาทถ้วน` ); expect(NEG(`101`)).toBe(`หนึ่งร้อยหนึ่งบาทถ้วน`); expect(NEG(`101`, true)).toBe(`หนึ่งร้อยเอ็ดบาทถ้วน`); expect(NEG(`-101`)).toBe(`ลบหนึ่งร้อยหนึ่งบาทถ้วน`); expect(NEG(`-101`, true)).toBe(`ลบหนึ่งร้อยเอ็ดบาทถ้วน`); }); test('PrintSatangs', () => { expect(PrintSatangs(`67`).word).toBe(`หกสิบเจ็ดสตางค์`) expect(PrintSatangs(`37`).word).toBe(`สามสิบเจ็ดสตางค์`); expect(PrintSatangs(`31`).word).toBe(`สามสิบเอ็ดสตางค์`); expect(PrintSatangs(`21`).word).toBe(`ยี่สิบเอ็ดสตางค์`); expect(PrintSatangs(`01`).word).toBe(`หนึ่งสตางค์`); expect(PrintSatangs(`1`).word).toBe(`สิบสตางค์`); expect(PrintSatangs('').word).toBe(FULLBAHT); expect(PrintSatangs(`0`).word).toBe(FULLBAHT); expect(PrintSatangs(`00`).word).toBe(FULLBAHT); expect(PrintSatangs(`0000`).word).toBe(FULLBAHT); expect(PrintSatangs(`dd`).word).toBeUndefined(); expect(PrintSatangs(`999`).word).toBeUndefined(); }) test(`PrintSatangs 2d+`, () => { expect(PrintSatangs(``, `c`).word).toBe(FULLBAHT); expect(PrintSatangs(`9900000000000000001`, `c`).word).toBe(FULLBAHT); expect(PrintSatangs(`99`, `c`).word).toBe(`เก้าสิบเก้าสตางค์`); expect(PrintSatangs(`499`, `c`).word).toBe(`ห้าสิบสตางค์`); expect(PrintSatangs(`490000000000001`, `c`).word).toBe(`ห้าสิบสตางค์`); expect(PrintSatangs(`499`, `c`).word).toBe(`ห้าสิบสตางค์`); expect(PrintSatangs(`499`, `f`).word).toBe(`สี่สิบเก้าสตางค์`); expect(PrintSatangs(`49239480239`, `f`).word).toBe(`สี่สิบเก้าสตางค์`); }); test("BulkBahtText: E Pu", () => { expect(BulkBahtText(`หนี้ 10,000 ล้านบาท ชดใช้ทั้งชีวิต ยังไงก็ไม่มีวันหมดค่ะ การทุ่มเททำงาน แบกรับแรงเสียดทานทั้งทางการเมืองและอีกหลายรูปแบบ เพื่อค้ำยันราคาข้าวให้สูงและมีเสถียรภาพ เพื่อพี่น้องชาวนาได้มีชีวิตที่ดีกว่า พลิกผืนนาเป็นพื้นที่แห่งโอกาสของครอบครัว กลับมีบทสรุปที่เจ็บปวดที่สุดสำหรับดิฉัน`, { pat: /10,000/ }).replace("บาทถ้วน ", "")).toBe(`หนี้ หนึ่งหมื่นล้านบาท ชดใช้ทั้งชีวิต ยังไงก็ไม่มีวันหมดค่ะ การทุ่มเททำงาน แบกรับแรงเสียดทานทั้งทางการเมืองและอีกหลายรูปแบบ เพื่อค้ำยันราคาข้าวให้สูงและมีเสถียรภาพ เพื่อพี่น้องชาวนาได้มีชีวิตที่ดีกว่า พลิกผืนนาเป็นพื้นที่แห่งโอกาสของครอบครัว กลับมีบทสรุปที่เจ็บปวดที่สุดสำหรับดิฉัน`) expect(BulkBahtText(`เป็นให้คำสั่งกระทรวงการคลังที่1351/2559 ลงวันที่ 13 ต.ค. 59 ที่สั่งให้น.ส.ยิ่งลักษณ์ ชดใช้ค่าสินไหมทดแทนเป็นเงิน 35,717,273,028.23 บาท... อ่านข่าวต้นฉบับได้ที่ : https://www.khaosod.co.th/breaking-news/news_9770585`, { pat: /35,717,273,028.23/ }).replace(new RegExp(`${SATANG}\\s*${BAHT}`, 'g'), SATANG)).toBe(`เป็นให้คำสั่งกระทรวงการคลังที่1351/2559 ลงวันที่ 13 ต.ค. 59 ที่สั่งให้น.ส.ยิ่งลักษณ์ ชดใช้ค่าสินไหมทดแทนเป็นเงิน สามหมื่นห้าพันเจ็ดร้อยสิบเจ็ดล้านสองแสนเจ็ดหมื่นสามพันยี่สิบแปดบาทยี่สิบสามสตางค์... อ่านข่าวต้นฉบับได้ที่ : https://www.khaosod.co.th/breaking-news/news_9770585`) expect( BulkBahtText(`ค่าโง่จำนำข้าว 200000000000`).replace(FULLBAHT, '') ).toBe(`ค่าโง่จำนำข้าว สองแสนล้านบาท`); }) test(`BulkBahtText`, () => { expect(BulkBahtText(`อย่าลืมใช้โค้ด 9arm นะครับ ใช้เถอะ เค้าจะได้จ้างผมต่อ`)).toBe(`อย่าลืมใช้โค้ด 9arm นะครับ ใช้เถอะ เค้าจะได้จ้างผมต่อ`) expect( BulkBahtText(`30฿รักษาทุกโรค`, { pat: /(\d+)(\.\d{0,2}0*)?฿/g }).replace( FULLBAHT, `` ) ).toBe(`สามสิบบาทรักษาทุกโรค`); expect( BulkBahtText(`๑๓๓ ล้าน เพื่อความสวยงาม`, { pat: /([\d๐-๙]+)(\.[\d๐-๙]{0,2}0*)?/g }).replace( `${BAHT}${FULLBAHT} `, `${MILLION}${BAHT}` ).replace( `${MILLION} `, ` `, ) ).toBe(`หนึ่งร้อยสามสิบสามล้านบาท เพื่อความสวยงาม`); expect( BulkBahtText(`เงินดิจิมอน 10000฿ ใช้ยังไง ได้วันไหน ใครได้บ้าง`) .replace(FULLBAHT, '') .replace(/฿/g, '') ).toBe(`เงินดิจิมอน หนึ่งหมื่นบาท ใช้ยังไง ได้วันไหน ใครได้บ้าง`); expect(BulkBahtText(`"900 ถูกมาก" ตุยไปละ`).replace(FULLBAHT, '')).toBe( `"เก้าร้อยบาท ถูกมาก" ตุยไปละ` ); expect( BulkBahtText( `กู้ 2000000000000 ดอก 3000000000000 กู้ชาตินี้........ใช้หนี้ชาติหน้า` ).replace(RegExp(`${BAHT}${FULLBAHT}`, `g`), '') ).toBe(`กู้ สองล้านล้าน ดอก สามล้านล้าน กู้ชาตินี้........ใช้หนี้ชาติหน้า`); expect(BulkBahtText(123)).toBe(InvalidType); expect(BulkBahtText(0x3)).toBe(InvalidType); expect(BulkBahtText('')).toBe(''); }) describe('SatangNum', () => { test.each([["ถ้วน", "00"], ["หนึ่ง", "01"], ["สอง", "02"], ["สาม", "03"], ["สี่", "04"], ["ห้า", "05"], ["หก", "06"], ["เจ็ด", "07"], ["แปด", "08"], ["เก้า", "09"], ["สิบ", "10"], ["สิบเอ็ด", "11"], ["สิบสอง", "12"], ["สิบสาม", "13"], ["สิบสี่", "14"], ["สิบห้า", "15"], ["สิบหก", "16"], ["สิบเจ็ด", "17"], ["สิบแปด", "18"], ["สิบเก้า", "19"], ["ยี่สิบ", "20"], ["ยี่สิบเอ็ด", "21"], ["ยี่สิบสอง", "22"], ["ยี่สิบสาม", "23"], ["ยี่สิบสี่", "24"], ["ยี่สิบห้า", "25"], ["ยี่สิบหก", "26"], ["ยี่สิบเจ็ด", "27"], ["ยี่สิบแปด", "28"], ["ยี่สิบเก้า", "29"], ["สามสิบ", "30"], ["สามสิบเอ็ด", "31"], ["สามสิบสอง", "32"], ["สามสิบสาม", "33"], ["สามสิบสี่", "34"], ["สามสิบห้า", "35"], ["สามสิบหก", "36"], ["สามสิบเจ็ด", "37"], ["สามสิบแปด", "38"], ["สามสิบเก้า", "39"], ["สี่สิบ", "40"], ["สี่สิบเอ็ด", "41"], ["สี่สิบสอง", "42"], ["สี่สิบสาม", "43"], ["สี่สิบสี่", "44"], ["สี่สิบห้า", "45"], ["สี่สิบหก", "46"], ["สี่สิบเจ็ด", "47"], ["สี่สิบแปด", "48"], ["สี่สิบเก้า", "49"], ["ห้าสิบ", "50"], ["ห้าสิบเอ็ด", "51"], ["ห้าสิบสอง", "52"], ["ห้าสิบสาม", "53"], ["ห้าสิบสี่", "54"], ["ห้าสิบห้า", "55"], ["ห้าสิบหก", "56"], ["ห้าสิบเจ็ด", "57"], ["ห้าสิบแปด", "58"], ["ห้าสิบเก้า", "59"], ["หกสิบ", "60"], ["หกสิบเอ็ด", "61"], ["หกสิบสอง", "62"], ["หกสิบสาม", "63"], ["หกสิบสี่", "64"], ["หกสิบห้า", "65"], ["หกสิบหก", "66"], ["หกสิบเจ็ด", "67"], ["หกสิบแปด", "68"], ["หกสิบเก้า", "69"], ["เจ็ดสิบ", "70"], ["เจ็ดสิบเอ็ด", "71"], ["เจ็ดสิบสอง", "72"], ["เจ็ดสิบสาม", "73"], ["เจ็ดสิบสี่", "74"], ["เจ็ดสิบห้า", "75"], ["เจ็ดสิบหก", "76"], ["เจ็ดสิบเจ็ด", "77"], ["เจ็ดสิบแปด", "78"], ["เจ็ดสิบเก้า", "79"], ["แปดสิบ", "80"], ["แปดสิบเอ็ด", "81"], ["แปดสิบสอง", "82"], ["แปดสิบสาม", "83"], ["แปดสิบสี่", "84"], ["แปดสิบห้า", "85"], ["แปดสิบหก", "86"], ["แปดสิบเจ็ด", "87"], ["แปดสิบแปด", "88"], ["แปดสิบเก้า", "89"], ["เก้าสิบ", "90"], ["เก้าสิบเอ็ด", "91"], ["เก้าสิบสอง", "92"], ["เก้าสิบสาม", "93"], ["เก้าสิบสี่", "94"], ["เก้าสิบห้า", "95"], ["เก้าสิบหก", "96"], ["เก้าสิบเจ็ด", "97"], ["เก้าสิบแปด", "98"], ["เก้าสิบเก้า", "99"], ["ร้อย", undefined] ])('should convert "%s" to "%s"', (input, expected) => { expect(SatangNum(input)).toBe(expected); }); }); test(`TB`, () => { expect(TB(`สิบเอ็ดบาทสิบเอ็ดสตางค์`)).toBe(`11.11`); expect(TB(`สามสิบสามแสนบาทถ้วน`)).toBe(InvalidString); expect(TB(`สองล้านล้านบาทถ้วน`)).toBe(`2000000000000.00`); expect(TB(`สองล้านล้านยี่สิบบาทถ้วน`)).toBe(`2000000000020.00`); expect(TB(`หนึ่งล้านสามแสนบาทถ้วน`)).toBe(`1300000.00`); expect(TB(`สามแสนล้านบาทถ้วน`)).toBe(`300000000000.00`); expect(TB(`สามแสนสามสิบบาทถ้วน`)).toBe(`300030.00`); expect(TB(`สามแสนสิบบาทถ้วน`)).toBe(`300010.00`); expect(TB(`สิบหนึ่งบาทถ้วน`)).toBe(InvalidString); expect(TB(`สองสิบหนึ่งบาทถ้วน`)).toBe(InvalidString); expect(TB(`สี่บาท`)).toBe(`4.00`); expect(TB(`สี่บาทถ้วน`)).toBe(`4.00`); expect(TB(`สี่บาทหก`)).toBe(InvalidString); expect(TB(`สี่บาทหกสิบ`)).toBe(InvalidString); expect(TB(`สี่บาทหกสิบสตางค์`)).toBe(`4.60`); expect(TB(`สี่บาทหกสตางค์`)).toBe(`4.06`); }) test('Reverse BahtText', () => { const self = (str) => TB(B2(str)) expect(self(`123`)).toBe(`123.00`); expect(self(`72`)).toBe(`72.00`); expect(self(`50000072.00`)).toBe(`50000072.00`); expect(self(`8.00`)).toBe(`8.00`); expect(self(`5678.00`)).toBe(`5678.00`); expect(self(`63147.89`)).toBe(`63147.89`); expect(self(`51000001.00`)).toBe(`51000001.00`); expect(self(`422.26`)).toBe(`422.26`); expect(self(`191415.11`)).toBe(`191415.11`); expect(self(`1.01`)).toBe(`1.01`); expect(self(`5678.46`)).toBe(`5678.46`); expect(self(`0.67`)).toBe(`0.67`); expect(self(`317.10`)).toBe(`317.10`); expect(self(`11.11`)).toBe(`11.11`); expect(self(`230000.00`)).toBe(`230000.00`); expect(self(`84000.00`)).toBe(`84000.00`); }); test('repeat', () => { expect(repeat('ค', [3])).toBe(`คคค`); expect(`ปิดสวิตซ์ ${repeat('ป', [3])} ป่าหี่`).toBe( `ปิดสวิตซ์ ปปป ป่าหี่` ); }) test(`sum bt`, () => { expect(BT(op.sum(`12`, `25`))).toBe(`สามสิบเจ็ดบาทถ้วน`); expect(BT(op.sum(`12`, `12`))).toBe(`ยี่สิบสี่บาทถ้วน`); }) test(`minus bt`, () => { expect(BT(op.minus(`12`, `12`))).toBe(`ศูนย์บาทถ้วน`); }) test(`OB`, () => { expect(OB(`33`)).toEqual({ err: false, txt: "สามสิบสามบาทถ้วน", typ: "string", val: "33", }); expect(OB(`๑๕๕`)).toEqual({ err: false, txt: "หนึ่งร้อยห้าสิบห้าบาทถ้วน", typ: "string", val: "๑๕๕", }); expect(OB(`2000000000000.00`)).toEqual({ err: false, txt: "สองล้านล้านบาทถ้วน", typ: "string", val: "2000000000000.00", }); expect(OB(`s6d7f6d7f6`)).toEqual({ err: true, txt: undefined, typ: "string", val: "s6d7f6d7f6", }); }) test(`IsValidText`, () => { expect(IsValidText("สามแสนสองหมื่นห้าสิบเอ็ดล้านสองหมื่นสิบล้านสองสิบล้านหนึ่ง")).toBeFalsy(); expect(IsValidText("สามแสนสองหมื่นห้าสิบเอ็ดล้านสองหมื่นสิบล้านยี่สิบล้านหนึ่ง")).toBeTruthy(); expect(IsValidText("สามแสนสองหมื่นห้าสิบเอ็ดล้านสองหมื่นสิบล้านยี่สิบล้านหนึ่งล้าน")).toBeTruthy(); expect(IsValidText("สามแสนสองหมื่นห้าสิบเอ็ด@ล้านสองหมื่นสิบล้านยี่สิบล้านหนึ่งล้าน")).toBeFalsy(); expect(IsValidText("สองล้าน")).toBeTruthy(); expect(IsValidText("ล้านล้าน")).toBeFalsy(); expect(IsValidText("สองสอง")).toBeFalsy(); expect(IsValidText("ล้าน")).toBeFalsy(); expect(IsValidText("ล้านล้าน")).toBeFalsy(); expect(IsValidText("ล้านล้านล้าน")).toBeFalsy(); expect(IsValidText("asdf")).toBeFalsy(); expect(IsValidText("123")).toBeFalsy(); expect(IsValidText("")).toBeFalsy(); expect(IsValidText(undefined)).toBeFalsy(); expect(IsValidText(null)).toBeFalsy(); expect(IsValidText(0)).toBeFalsy(); expect(IsValidText(123)).toBeFalsy(); expect(IsValidText(`แสนแสน`)).toBeFalsy(); expect(IsValidText(`ยี่สิบ`)).toBeTruthy(); expect(IsValidText(`ยี่สิบเอ็ด`)).toBeTruthy(); expect(IsValidText(`เอ็ดสิบ`)).toBeFalsy(); expect(IsValidText(`ยี่สิบหนึ่ง`)).toBeFalsy(); expect(IsValidText(`สองสิบ`)).toBeFalsy(); }); test(`IsValidTB`, () => { expect(IsValidTB(`แปดสิบแปดบาท`)).toBeTruthy(); }); test(`LNBT`, () => { expect(LNBT(`Googolplex`)).toBe(`Don't Try This`); expect(LNBT(`Septillion`)).toBe(`หนึ่งล้านล้านล้านล้านบาทถ้วน`); expect(LNBT(`JumNumKaoEpu`)).toBeUndefined(); expect(LNBT(1, 0)).toBe(`ศูนย์บาทถ้วน`); expect(LNBT(4, 1)).toBe(`หนึ่งหมื่นบาทถ้วน`); expect(LNBT([`asdf`])).toBeUndefined(); expect(LNBT('undefined', 234)).toBeUndefined(); }); test(`sep`, () => { expect(SEP(`11`, `;;;`)).toBe(`สิบ;;;เอ็ด`); expect(SEP(`11`)).toBe(`สิบ-เอ็ด`) expect(SEP(`21`)).toBe(`ยี่-สิบ-เอ็ด`) expect(SEP(`101`)).toBe(`หนึ่ง-ร้อย-เอ็ด`); expect(SEP(`1001`)).toBe(`หนึ่ง-พัน-เอ็ด`); expect(SEP(`2501`)).toBe(`สอง-พัน-ห้า-ร้อย-เอ็ด`); expect(SEP(`501741221`)).toBe(`ห้า-ร้อย-เอ็ด-ล้าน-เจ็ด-แสน-สี่-หมื่น-หนึ่ง-พัน-สอง-ร้อย-ยี่-สิบ-เอ็ด`); // https://web.facebook.com/kumthai.th/posts/920804870082544 expect(SEP(`2501.33`)).toBe(`สอง-พัน-ห้า-ร้อย-เอ็ด-บาท-สาม-สิบ-สาม-สตางค์`); expect(SEP(`1234.56`)).toBe(`หนึ่ง-พัน-สอง-ร้อย-สาม-สิบ-สี่-บาท-ห้า-สิบ-หก-สตางค์`); }) test(`data type`, () => { const [s,f] = ["string", "function"] expect(typeof FULLBAHT).toBe(s); expect(typeof BAHT).toBe(s); expect(typeof NumText).toBe(f); expect(typeof BT).toBe(f); expect(typeof ABT).toBe(f); expect(typeof PrintSatangs).toBe(f); expect(typeof BulkBahtText).toBe(f); expect(typeof TB).toBe(f); expect(typeof B2).toBe(f); expect(typeof repeat).toBe(f); expect(typeof IsValidTB).toBe(f); expect(typeof IsValidText).toBe(f); expect(typeof OB).toBe(f); expect(typeof LNBT).toBe(f); expect(typeof SEP).toBe(f); }); describe("BR Class", () => { let br; beforeEach(() => { br = new BR("1000"); }); test("should return the correct version", () => { expect(br.version).toBe(VERSION); }); test("auto() should return the correct value", () => { expect(br.auto).toBe(`หนึ่งพันบาทถ้วน`); }); test("text() should return the correct value", () => { expect(br.text).toBe(`หนึ่งพันบาทถ้วน`); }); test("text() should return the correct value", () => { expect(br.b).toBe(`หนึ่งพันบาทถ้วน`); }); test("flex() should return the correct value", () => { expect(br.flex).toBe(`หนึ่งพันบาทถ้วน`); }); test("neg() should return the correct value", () => { expect(br.neg).toBe(`หนึ่งพันบาทถ้วน`); }); test("bahttext() should return the correct value", () => { expect(br.bahttext).toBe(`฿1,000.00 อ่านว่า "หนึ่งพันบาทถ้วน"`); }); test("clean() should return the cleaned value", () => { expect( br.clean ).toBe(`1000`); }); test("sep() should return the expected value", () => { expect( br.sep ).toBe(`หนึ่ง-พัน`); }); test("currency() should return the formatted currency", () => { expect(br.currency).toBe(`฿1,000.00`); }); test("printBaht() should return the correct baht representation", () => { expect(br.printBaht).toBe(`หนึ่งพันบาท`); }); test("printStangs() should return the correct stangs representation", () => { expect(br.printStangs).toBe(`ถ้วน`); }); test("trim() should remove leading zeros", () => { br = new BR("000123"); expect(br.trim).toBe("123"); }); test("isValid() should return true for valid money", () => { expect(br.isValid).toBeTruthy(); // Adjust based on IsMoneyValidate function }); });