UNPKG

bahtrext

Version:
692 lines (650 loc) 39.2 kB
import { FULLBAHT, BAHT, INFINITY, SATANG } from "./const"; import { ed } from "./const/defaultConfig"; import BR, { NumText, BT, B2, BF, ABT, PrintSatangs, BulkBahtText, SatangNum, TB, repeat, IsValidTB, IsValidText, PrintBaht, OB, LNBT, SEP, NEG, PrintDotMRR, 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("")).toBeUndefined(); expect(ABT("0")).toBe("ศูนย์บาทถ้วน"); expect(ABT(0)).toBe("ศูนย์บาทถ้วน"); 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`)).toBe(""); 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`)).toBe(""); }); test("ABT Negative", () => { expect(ABT(`-0.67`, { ed: false, allowNeg: true })).toBe(`ลบหกสิบเจ็ดสตางค์`); expect(ABT(`--0.67`, { ed: false, allowNeg: true })).toBe(""); 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`)).toBe(``); 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).name).toBe(InvalidType.name); expect(BulkBahtText(0x3).name).toBe(InvalidType.name); 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(`สามสิบสามแสนบาทถ้วน`).name).toBe(InvalidString.name); 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(`สิบหนึ่งบาทถ้วน`).name).toBe(InvalidString.name); expect(TB(`สองสิบหนึ่งบาทถ้วน`).name).toBe(InvalidString.name); expect(TB(`สี่บาท`)).toBe(`4.00`); expect(TB(`สี่บาทถ้วน`)).toBe(`4.00`); expect(TB(`สี่บาทหก`).name).toBe(InvalidString.name); expect(TB(`สี่บาทหกสิบ`).name).toBe(InvalidString.name); 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: false, txt: "", typ: "string", val: "s6d7f6d7f6", }); }); test(`PrintDotMRR`, () => { expect(PrintDotMRR("575")).toEqual(`จุดห้าเจ็ดห้า`); expect(PrintDotMRR("345")).toEqual(`จุดสามสี่ห้า`); expect(PrintDotMRR("545")).toEqual(`จุดห้าสี่ห้า`); expect(PrintDotMRR("44")).toEqual(`จุดสี่สี่`); expect(PrintDotMRR("๔๔")).toEqual(`จุดสี่สี่`); expect(PrintDotMRR("4400")).toEqual(`จุดสี่สี่`); expect(PrintDotMRR("๖๖66")).toEqual(`จุดหกหกหกหก`); expect(PrintDotMRR("0000")).toEqual(``); expect(PrintDotMRR("00009")).toEqual(``); expect(PrintDotMRR("ab")).toEqual(``); expect(PrintDotMRR("")).toEqual(``); }); 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("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("printSatang() should return the correct Satang representation", () => { expect(br.printSatang).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 }); });