Skip to content

Commit bbcb036

Browse files
committed
test: add more base58check tests
1 parent a4a5bdf commit bbcb036

2 files changed

Lines changed: 97 additions & 4 deletions

File tree

tests/base58.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,19 +133,19 @@ test('sizes roundtrip, static data + types', (t) => {
133133
const zeros = new Uint8Array(size)
134134
const zerosBase58 = toBase58(zeros)
135135
t.assert.deepStrictEqual(fromBase58(zerosBase58), zeros, `[0] x${size}`)
136-
t.assert.deepStrictEqual(fromBase58(zerosBase58, 'buffer'), Buffer.from(zeros), `[0] x${size}`)
136+
t.assert.deepStrictEqual(fromBase58(zerosBase58, 'buffer'), Buffer.from(zeros))
137137
const ones = new Uint8Array(size).fill(1)
138138
const onesBase58 = toBase58(ones)
139139
t.assert.deepStrictEqual(fromBase58(onesBase58), ones, `[1] x${size}`)
140-
t.assert.deepStrictEqual(fromBase58(onesBase58, 'buffer'), Buffer.from(ones), `[0] x${size}`)
140+
t.assert.deepStrictEqual(fromBase58(onesBase58, 'buffer'), Buffer.from(ones))
141141
const mid = new Uint8Array(size).fill(42)
142142
const midBase58 = toBase58(mid)
143143
t.assert.deepStrictEqual(fromBase58(midBase58), mid, `[42] x${size}`)
144-
t.assert.deepStrictEqual(fromBase58(midBase58, 'buffer'), Buffer.from(mid), `[0] x${size}`)
144+
t.assert.deepStrictEqual(fromBase58(midBase58, 'buffer'), Buffer.from(mid))
145145
const max = new Uint8Array(size).fill(255)
146146
const maxBase58 = toBase58(max)
147147
t.assert.deepStrictEqual(fromBase58(maxBase58), max, `[255] x${size}`)
148-
t.assert.deepStrictEqual(fromBase58(maxBase58, 'buffer'), Buffer.from(max), `[0] x${size}`)
148+
t.assert.deepStrictEqual(fromBase58(maxBase58, 'buffer'), Buffer.from(max))
149149
}
150150
})
151151

tests/base58check.test.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { fromBase58checkSync, toBase58checkSync } from '@exodus/bytes/base58check.js'
2+
import { randomValues } from '@exodus/crypto/randomBytes'
3+
import { test } from 'node:test'
4+
import bs58check from 'bs58check'
5+
6+
const SharedArrayBuffer = globalThis.SharedArrayBuffer ?? ArrayBuffer
7+
const toShared = (u8) => {
8+
const res = new Uint8Array(new SharedArrayBuffer(u8.length))
9+
res.set(u8)
10+
return res
11+
}
12+
13+
test('zeros', (t) => {
14+
for (let size = 0; size <= 1024; size++) {
15+
const zeros = new Uint8Array(size)
16+
const encoded = toBase58checkSync(zeros)
17+
t.assert.strictEqual(toBase58checkSync(toShared(zeros)), encoded, `[0] x${size} shared`)
18+
t.assert.strictEqual(bs58check.encode(zeros), encoded, `[0] x${size} bs58check.encode`) // matches bs58check
19+
t.assert.deepStrictEqual(fromBase58checkSync(encoded), zeros, `[0] x${size} fromBase58check`)
20+
}
21+
})
22+
23+
test('toBase58checkSync matches bs58check, static data', (t) => {
24+
for (let size = 0; size < 180; size++) {
25+
const zeros = new Uint8Array(size)
26+
t.assert.strictEqual(toBase58checkSync(zeros), bs58check.encode(zeros), `[0] x${size}`)
27+
const ones = new Uint8Array(size).fill(1)
28+
t.assert.strictEqual(toBase58checkSync(ones), bs58check.encode(ones), `[1] x${size}`)
29+
const mid = new Uint8Array(size).fill(42)
30+
t.assert.strictEqual(toBase58checkSync(mid), bs58check.encode(mid), `[42] x${size}`)
31+
const max = new Uint8Array(size).fill(255)
32+
t.assert.strictEqual(toBase58checkSync(max), bs58check.encode(max), `[255] x${size}`)
33+
}
34+
})
35+
36+
test('sizes roundtrip, static data + types', (t) => {
37+
for (let size = 0; size < 260; size++) {
38+
const zeros = new Uint8Array(size)
39+
const zerosBase58check = toBase58checkSync(zeros)
40+
t.assert.deepStrictEqual(fromBase58checkSync(zerosBase58check), zeros, `[0] x${size}`)
41+
t.assert.deepStrictEqual(fromBase58checkSync(zerosBase58check, 'buffer'), Buffer.from(zeros))
42+
const ones = new Uint8Array(size).fill(1)
43+
const onesBase58check = toBase58checkSync(ones)
44+
t.assert.deepStrictEqual(fromBase58checkSync(onesBase58check), ones, `[1] x${size}`)
45+
t.assert.deepStrictEqual(fromBase58checkSync(onesBase58check, 'buffer'), Buffer.from(ones))
46+
const mid = new Uint8Array(size).fill(42)
47+
const midBase58check = toBase58checkSync(mid)
48+
t.assert.deepStrictEqual(fromBase58checkSync(midBase58check), mid, `[42] x${size}`)
49+
t.assert.deepStrictEqual(fromBase58checkSync(midBase58check, 'buffer'), Buffer.from(mid))
50+
const max = new Uint8Array(size).fill(255)
51+
const maxBase58check = toBase58checkSync(max)
52+
t.assert.deepStrictEqual(fromBase58checkSync(maxBase58check), max, `[255] x${size}`)
53+
t.assert.deepStrictEqual(fromBase58checkSync(maxBase58check, 'buffer'), Buffer.from(max))
54+
}
55+
})
56+
57+
test('toBase58checkSync matches bs58check, random data', (t) => {
58+
const seed = randomValues(260)
59+
60+
// more samples for small sizes
61+
for (let size = 1; size < 100; size++) {
62+
const samples = size < 60 ? 100 : 10
63+
for (let start = 0, i = 0; start < seed.length - size && i < samples; start++, i++) {
64+
const arr = seed.subarray(start, start + size)
65+
t.assert.strictEqual(toBase58checkSync(arr), bs58check.encode(arr), `random x${size}`)
66+
}
67+
}
68+
69+
// and one sample for all sizes in range
70+
for (let size = 0; size < seed.length; size++) {
71+
const arr = seed.subarray(seed.length - size)
72+
t.assert.strictEqual(toBase58checkSync(arr), bs58check.encode(arr), `random x${size}`)
73+
}
74+
})
75+
76+
test('sizes roundtrip, random data', (t) => {
77+
const seed = randomValues(300)
78+
79+
// more samples for small sizes
80+
for (let size = 1; size < 100; size++) {
81+
const samples = size < 60 ? 100 : 10
82+
for (let start = 0, i = 0; start < seed.length - size && i < samples; start++, i++) {
83+
const arr = seed.subarray(start, start + size)
84+
t.assert.deepStrictEqual(fromBase58checkSync(toBase58checkSync(arr)), arr, `random x${size}`)
85+
}
86+
}
87+
88+
// and one sample for all sizes in range
89+
for (let size = 0; size < seed.length; size++) {
90+
const arr = seed.subarray(seed.length - size)
91+
t.assert.deepStrictEqual(fromBase58checkSync(toBase58checkSync(arr)), arr, `random x${size}`)
92+
}
93+
})

0 commit comments

Comments
 (0)