UNPKG

basepura

Version:

Basepura encoder and decoder in TypeScript

214 lines (198 loc) 7.64 kB
import { describe, it, expect } from 'vitest'; import { encode, decode, isBasepura } from './index'; describe('encode', () => { it('should encode small numbers', () => { expect(encode(0n)).toBe('B'); expect(encode(1n)).toBe('C'); expect(encode(2n)).toBe('D'); expect(encode(3n)).toBe('G'); expect(encode(4n)).toBe('H'); expect(encode(5n)).toBe('J'); expect(encode(6n)).toBe('K'); expect(encode(7n)).toBe('L'); expect(encode(8n)).toBe('N'); expect(encode(9n)).toBe('P'); expect(encode(10n)).toBe('Q'); expect(encode(11n)).toBe('R'); expect(encode(12n)).toBe('S'); expect(encode(13n)).toBe('T'); expect(encode(14n)).toBe('W'); expect(encode(15n)).toBe('Z'); expect(encode(16n)).toBe('b'); expect(encode(17n)).toBe('c'); expect(encode(18n)).toBe('d'); expect(encode(19n)).toBe('g'); expect(encode(20n)).toBe('h'); expect(encode(21n)).toBe('j'); expect(encode(22n)).toBe('k'); expect(encode(23n)).toBe('l'); expect(encode(24n)).toBe('n'); expect(encode(25n)).toBe('p'); expect(encode(26n)).toBe('q'); expect(encode(27n)).toBe('r'); expect(encode(28n)).toBe('s'); expect(encode(29n)).toBe('t'); expect(encode(30n)).toBe('w'); expect(encode(31n)).toBe('z'); }); it('should encode larger numbers', () => { expect(encode(32n)).toBe('CB'); expect(encode(32767n)).toBe('zzz'); expect(encode(32768n)).toBe('CBBB'); expect(encode(1234567890n)).toBe('CHpSBkd'); expect(encode(0xffffffffffffffffn)).toBe('Zzzzzzzzzzzzz'); }); it('should throw an error for negative numbers', () => { expect(() => encode(-1n)).toThrow(RangeError); }); }); describe('decode', () => { it('should decode single characters', () => { expect(decode('B')).toBe(0n); expect(decode('C')).toBe(1n); expect(decode('D')).toBe(2n); expect(decode('G')).toBe(3n); expect(decode('H')).toBe(4n); expect(decode('J')).toBe(5n); expect(decode('K')).toBe(6n); expect(decode('L')).toBe(7n); expect(decode('N')).toBe(8n); expect(decode('P')).toBe(9n); expect(decode('Q')).toBe(10n); expect(decode('R')).toBe(11n); expect(decode('S')).toBe(12n); expect(decode('T')).toBe(13n); expect(decode('W')).toBe(14n); expect(decode('Z')).toBe(15n); expect(decode('b')).toBe(16n); expect(decode('c')).toBe(17n); expect(decode('d')).toBe(18n); expect(decode('g')).toBe(19n); expect(decode('h')).toBe(20n); expect(decode('j')).toBe(21n); expect(decode('k')).toBe(22n); expect(decode('l')).toBe(23n); expect(decode('n')).toBe(24n); expect(decode('p')).toBe(25n); expect(decode('q')).toBe(26n); expect(decode('r')).toBe(27n); expect(decode('s')).toBe(28n); expect(decode('t')).toBe(29n); expect(decode('w')).toBe(30n); expect(decode('z')).toBe(31n); }); it('should decode multi-character strings', () => { expect(decode('CB')).toBe(32n); expect(decode('zzz')).toBe(32767n); expect(decode('CBBB')).toBe(32768n); expect(decode('CHpSBkd')).toBe(1234567890n); expect(decode('Zzzzzzzzzzzzz')).toBe(0xffffffffffffffffn); }); it('should throw an error for empty strings', () => { expect(() => decode('')).toThrow(RangeError); }); it('should throw an error for invalid characters', () => { expect(() => decode('1')).toThrow(RangeError); expect(() => decode('0')).toThrow(RangeError); expect(() => decode('O')).toThrow(RangeError); expect(() => decode('I')).toThrow(RangeError); expect(() => decode('U')).toThrow(RangeError); expect(() => decode('V')).toThrow(RangeError); expect(() => decode('a')).toThrow(RangeError); expect(() => decode('e')).toThrow(RangeError); expect(() => decode(' www')).toThrow(RangeError); expect(() => decode('zzz ')).toThrow(RangeError); expect(() => decode('tst-strng')).toThrow(RangeError); expect(() => decode('什么鬼')).toThrow(RangeError); }); }); describe('isBasepura', () => { it('should return true for valid single characters', () => { expect(isBasepura('B')).toBe(true); expect(isBasepura('C')).toBe(true); expect(isBasepura('D')).toBe(true); expect(isBasepura('G')).toBe(true); expect(isBasepura('H')).toBe(true); expect(isBasepura('J')).toBe(true); expect(isBasepura('K')).toBe(true); expect(isBasepura('L')).toBe(true); expect(isBasepura('N')).toBe(true); expect(isBasepura('P')).toBe(true); expect(isBasepura('Q')).toBe(true); expect(isBasepura('R')).toBe(true); expect(isBasepura('S')).toBe(true); expect(isBasepura('T')).toBe(true); expect(isBasepura('W')).toBe(true); expect(isBasepura('Z')).toBe(true); expect(isBasepura('b')).toBe(true); expect(isBasepura('c')).toBe(true); expect(isBasepura('d')).toBe(true); expect(isBasepura('g')).toBe(true); expect(isBasepura('h')).toBe(true); expect(isBasepura('j')).toBe(true); expect(isBasepura('k')).toBe(true); expect(isBasepura('l')).toBe(true); expect(isBasepura('n')).toBe(true); expect(isBasepura('p')).toBe(true); expect(isBasepura('q')).toBe(true); expect(isBasepura('r')).toBe(true); expect(isBasepura('s')).toBe(true); expect(isBasepura('t')).toBe(true); expect(isBasepura('w')).toBe(true); expect(isBasepura('z')).toBe(true); }); it('should return true for valid multi-character strings', () => { expect(isBasepura('CB')).toBe(true); expect(isBasepura('zzz')).toBe(true); expect(isBasepura('CBBB')).toBe(true); expect(isBasepura('CHpSBkd')).toBe(true); expect(isBasepura('Zzzzzzzzzzzzz')).toBe(true); expect(isBasepura('BCDGHJKLNPQRSTWZbcdghjklnpqrstwz')).toBe(true); }); it('should return false for empty strings', () => { expect(isBasepura('')).toBe(false); }); it('should return false for strings with invalid characters', () => { expect(isBasepura('1')).toBe(false); expect(isBasepura('0')).toBe(false); expect(isBasepura('O')).toBe(false); expect(isBasepura('I')).toBe(false); expect(isBasepura('U')).toBe(false); expect(isBasepura('V')).toBe(false); expect(isBasepura('a')).toBe(false); expect(isBasepura('e')).toBe(false); expect(isBasepura('f')).toBe(false); expect(isBasepura('i')).toBe(false); expect(isBasepura('m')).toBe(false); expect(isBasepura('o')).toBe(false); expect(isBasepura('u')).toBe(false); expect(isBasepura('v')).toBe(false); expect(isBasepura('x')).toBe(false); expect(isBasepura('y')).toBe(false); }); it('should return false for mixed valid and invalid characters', () => { expect(isBasepura('B1')).toBe(false); expect(isBasepura('0B')).toBe(false); expect(isBasepura('BO')).toBe(false); expect(isBasepura('OB')).toBe(false); expect(isBasepura('Ba')).toBe(false); expect(isBasepura('aB')).toBe(false); expect(isBasepura('tst-strng')).toBe(false); }); it('should return false for strings with whitespace', () => { expect(isBasepura(' ')).toBe(false); expect(isBasepura(' B')).toBe(false); expect(isBasepura('B ')).toBe(false); expect(isBasepura('B C')).toBe(false); expect(isBasepura(' www')).toBe(false); expect(isBasepura('zzz ')).toBe(false); }); it('should return false for strings with special characters', () => { expect(isBasepura('B-C')).toBe(false); expect(isBasepura('B_C')).toBe(false); expect(isBasepura('B.C')).toBe(false); expect(isBasepura('B+C')).toBe(false); expect(isBasepura('B/C')).toBe(false); expect(isBasepura('什么鬼')).toBe(false); }); });