Skip to content

Commit 9a9d40f

Browse files
author
jin
committed
bigger bigint
1 parent a94fdaa commit 9a9d40f

File tree

4 files changed

+93
-80
lines changed

4 files changed

+93
-80
lines changed

bigint/encode/encode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace $ {
88
const bytes = [] as number[]
99
do {
1010

11-
let byte = minus ^ Number( num % 256n )
11+
let byte = minus ^ Number( num & 255n )
1212
bytes.push( byte )
1313

1414
if( num >>= 8n ) continue

vary/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
## Supported types
1515

16-
- Primitives: `null`, `undefined`, `boolean`, `number`, `bigint` (up to 264B), `string`.
16+
- Primitives: `null`, `undefined`, `boolean`, `number`, `bigint`, `string`.
1717
- Buffers: `Uint8Array`, `Uint16Array`, `Uint32Array`, `BigUint64Array`, `Int8Array`, `Int16Array`, `Int32Array`, `BigInt64Array`, `Float16Array`, `Float32Array`, `Float64Array`.
1818
- Objects: `Array`, `Object`, `Date`, `Map`, `Set`, `Element`.
1919

vary/vary.test.tsx

Lines changed: 79 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -6,226 +6,220 @@ namespace $.$$ {
66
const { L1, L2, L4, L8, LA } = $mol_vary_len
77
const str = $mol_charset_encode
88

9-
function check( vary: unknown, ideal: readonly number[], Vary = $mol_vary ) {
10-
const pack = Vary.pack([ vary ])
11-
$mol_assert_equal( Vary.take( pack ), [vary] )
9+
function check( vary: readonly unknown[], ideal: readonly number[], Vary = $mol_vary ) {
10+
const pack = Vary.pack( vary )
11+
$mol_assert_equal( Vary.take( pack ), vary )
1212
$mol_assert_equal( pack, new Uint8Array( ideal ) )
1313
}
1414

1515
$mol_test({
1616

1717
"vary pack logical"( $ ) {
18-
check( null, [ spec|none ] )
19-
check( true, [ $mol_vary_spec.true ] )
20-
check( false, [ $mol_vary_spec.fake ] )
21-
check( undefined, [ spec|both ] )
18+
check( [ null ], [ spec|none ] )
19+
check( [ true ], [ $mol_vary_spec.true ] )
20+
check( [ false ], [ $mol_vary_spec.fake ] )
21+
check( [ undefined ], [ spec|both ] )
2222
},
2323

2424
"vary pack uint0"( $ ) {
25-
check( 0, [ 0 ] )
26-
check( 27, [ 27 ] )
25+
check( [ 0 ], [ 0 ] )
26+
check( [ 27 ], [ 27 ] )
2727
},
2828

2929
"vary pack uint1"( $ ) {
30-
check( 28, [ uint|L1, 28 ] )
31-
check( 255 , [ uint|L1, 255 ] )
30+
check( [ 28 ], [ uint|L1, 28 ] )
31+
check( [ 255 ], [ uint|L1, 255 ] )
3232
},
3333

3434
"vary pack uint2"( $ ) {
35-
check( 256, [ uint|L2, 0, 1 ] )
36-
check( 256**2-1, [ uint|L2, 255, 255 ] )
35+
check( [ 256 ], [ uint|L2, 0, 1 ] )
36+
check( [ 256**2-1 ], [ uint|L2, 255, 255 ] )
3737
},
3838

3939
"vary pack uint4"( $ ) {
40-
check( 256**2, [ uint|L4, 0, 0, 1, 0 ] )
41-
check( 256**4-1, [ uint|L4, 255, 255, 255, 255 ] )
40+
check( [ 256**2 ], [ uint|L4, 0, 0, 1, 0 ] )
41+
check( [ 256**4-1 ], [ uint|L4, 255, 255, 255, 255 ] )
4242
},
4343

4444
"vary pack uint8"( $ ) {
45-
check( 256**4, [ uint|L8, 0, 0, 0, 0, 1, 0, 0, 0 ] )
46-
check( Number.MAX_SAFE_INTEGER, [ uint|L8, 255, 255, 255, 255, 255, 255, 31, 0 ] )
47-
check( 256n**8n-1n, [ uint|L8, 255, 255, 255, 255, 255, 255, 255, 255 ] )
48-
},
49-
50-
"vary pack with wrong size"( $ ) {
51-
$mol_assert_equal( $mol_vary.take( new Uint8Array([]) ), [] )
52-
$mol_assert_equal( $mol_vary.take( new Uint8Array([ uint|7 ]) ), [ 7 ] )
53-
$mol_assert_equal( $mol_vary.take( new Uint8Array([ uint|7, uint|7 ]) ), [ 7, 7 ] )
45+
check( [ 256**4 ], [ uint|L8, 0, 0, 0, 0, 1, 0, 0, 0 ] )
46+
check( [ Number.MAX_SAFE_INTEGER ], [ uint|L8, 255, 255, 255, 255, 255, 255, 31, 0 ] )
47+
check( [ 256n**8n-1n ], [ uint|L8, 255, 255, 255, 255, 255, 255, 255, 255 ] )
5448
},
5549

5650
"vary pack sint0"( $ ) {
57-
check( -1, [ -1 ] )
58-
check( -27, [ -27 ] )
51+
check( [ -1 ], [ -1 ] )
52+
check( [ -27 ], [ -27 ] )
5953
},
6054

6155
"vary pack sint1"( $ ) {
62-
check( -28, [ sint|-L1, -28 ] )
63-
check( -256/2 , [ sint|-L1, 128 ] )
56+
check( [ -28, ], [ sint|-L1, -28 ] )
57+
check( [ -256/2 ] , [ sint|-L1, 128 ] )
6458
},
6559

6660
"vary pack sint2"( $ ) {
67-
check( -256/2-1, [ sint|-L2, 127, 255 ] )
68-
check( -(256**2)/2, [ sint|-L2, 0, 128 ] )
61+
check( [ -256/2-1 ], [ sint|-L2, 127, 255 ] )
62+
check( [ -(256**2)/2 ], [ sint|-L2, 0, 128 ] )
6963
},
7064

7165
"vary pack sint4"( $ ) {
72-
check( -(256**2)/2-1, [ sint|-L4, 255, 127, 255, 255 ] )
73-
check( -(256**4)/2, [ sint|-L4, 0, 0, 0, 128 ] )
66+
check( [ -(256**2)/2-1 ], [ sint|-L4, 255, 127, 255, 255 ] )
67+
check( [ -(256**4)/2 ], [ sint|-L4, 0, 0, 0, 128 ] )
7468
},
7569

7670
"vary pack sint8"( $ ) {
77-
check( -(256**4)/2-1, [ sint|-L8, 255, 255, 255, 127, 255, 255, 255, 255 ] )
78-
check( Number.MIN_SAFE_INTEGER, [ sint|-L8, 1, 0, 0, 0, 0, 0, 224, 255 ] )
79-
check( -(256n**8n)/2n, [ sint|-L8, 0, 0, 0, 0, 0, 0, 0, 128 ] )
71+
check( [ -(256**4)/2-1 ], [ sint|-L8, 255, 255, 255, 127, 255, 255, 255, 255 ] )
72+
check( [ Number.MIN_SAFE_INTEGER ], [ sint|-L8, 1, 0, 0, 0, 0, 0, 224, 255 ] )
73+
check( [ -(2n**63n) ], [ sint|-L8, 0, 0, 0, 0, 0, 0, 0, 128 ] )
8074
},
8175

8276
"vary pack bigint"( $ ) {
83-
check( 2n**64n, [ sint|-LA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ] )
84-
check( 2n**2104n, [ sint|-LA, 255, ... Array.from( { length: 263 }, () => 0 ), 1 ] )
85-
check( -1n - 2n**64n, [ sint|-LA, 0, 255, 255, 255, 255, 255, 255, 255, 255, 254 ] )
86-
check( -1n - 2n**2104n, [ sint|-LA, 255, ... Array.from( { length: 263 }, () => 255 ), 254 ] )
77+
check( [ 2n**64n ], [ sint|-LA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ] )
78+
check( [ 2n**2111n ], [ sint|-LA, 0, 1, ... Array.from( { length: 263 }, () => 0 ), 128, 0 ] )
79+
check( [ -1n - 2n**64n ], [ sint|-LA, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 254 ] )
80+
check( [ -1n - 2n**2111n ], [ sint|-LA, 0, 1, ... Array.from( { length: 263 }, () => 255 ), -129, 255 ] )
8781
},
8882

8983
"vary pack float"( $ ) {
90-
check( 1.5, [ fp64, ... new Uint8Array( new Float64Array([ 1.5 ]).buffer ) ] )
84+
check( [ 1.5 ], [ fp64, ... new Uint8Array( new Float64Array([ 1.5 ]).buffer ) ] )
9185
},
9286

9387
"vary pack list"( $ ) {
9488
check(
95-
[ 1, 2, 3 ],
89+
[ [ 1, 2, 3 ] ],
9690
[ list|3, 1, 2, 3 ],
9791
)
9892
check(
99-
[ [], [1], [2,3] ],
93+
[ [ [], [1], [2,3] ] ],
10094
[ list|3, list|0, list|1, 1, list|2, 2, 3 ],
10195
)
10296
},
10397

10498
"vary pack dedup list"( $ ) {
10599
const pair = [ 1, 2 ]
106100
check(
107-
[ pair, pair ],
101+
[ [ pair, pair ] ],
108102
[ list|2, list|2, 1, 2, link|0 ],
109103
)
110104
const seven = [7]
111105
const box = [seven]
112106
check(
113-
[ box, box, seven ],
107+
[ [ box, box, seven ] ],
114108
[ list|3, list|1, list|1, 7, link|1, link|0 ],
115109
)
116110
},
117111

118112
"vary pack cyclic list"( $ ) {
119113
const foo = [] as any[]
120114
foo.push([ foo ])
121-
$mol_assert_fail( ()=> $mol_vary.pack( foo ), 'Cyclic refs' )
115+
$mol_assert_fail( ()=> $mol_vary.pack([ foo ]), 'Cyclic refs' )
122116
},
123117

124118
"vary pack dedup uint"( $ ) {
125119
check(
126-
[ 28, 28 ],
120+
[ [ 28, 28 ] ],
127121
[ list|2, uint|L1, 28, link|0 ],
128122
)
129123
check(
130-
[ 2n**64n, 2n**64n ],
131-
[ list|2, sint|-LA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, link|0 ],
124+
[ [ 2n**64n, 2n**64n ] ],
125+
[ list|2, sint|-LA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, link|0 ],
132126
)
133127
},
134128

135129
"vary pack dedup float"( $ ) {
136130
check(
137-
[ 1.5, 1.5 ],
131+
[ [ 1.5, 1.5 ] ],
138132
[ list|2, fp64, ... new Uint8Array( new Float64Array([ 1.5 ]).buffer ), link|0 ],
139133
)
140134
},
141135

142136
"vary pack text"( $ ) {
143-
check( 'foo', [ text|3, ... str('foo') ] )
137+
check( [ 'foo' ], [ text|3, ... str('foo') ] )
144138
const long = 'abcdefghijklmnopqrstuvwxyzЖЫ'
145-
check( long, [ text|L1, 28, ... str(long) ] )
139+
check( [ long ], [ text|L1, 28, ... str(long) ] )
146140
},
147141

148142
"vary pack dedup text"( $ ) {
149143
check(
150-
[ "f", "f" ],
144+
[ [ "f", "f" ] ],
151145
[ list|2, text|1, ... str('f'), link|0 ],
152146
)
153147
},
154148

155149
"vary pack blob"( $ ) {
156150
check(
157-
new Uint8Array([ 1, 255 ]),
151+
[ new Uint8Array([ 1, 255 ]) ],
158152
[ blob|2, uint|L1, 1, 255 ],
159153
)
160154
check(
161-
new Int8Array([ -128, 127 ]),
155+
[ new Int8Array([ -128, 127 ]) ],
162156
[ blob|2, sint|~L1, -128, 127 ],
163157
)
164158
check(
165-
new Uint32Array([ 255 ]),
159+
[ new Uint32Array([ 255 ]) ],
166160
[ blob|4, uint|L4, 255, 0, 0, 0 ],
167161
)
168162
check(
169-
new Int32Array([ -128 ]),
163+
[ new Int32Array([ -128 ]) ],
170164
[ blob|4, sint|~L4, -128, 255, 255, 255 ],
171165
)
172166
check(
173-
new BigUint64Array([ 255n ]),
167+
[ new BigUint64Array([ 255n ]) ],
174168
[ blob|8, uint|L8, 255, 0, 0, 0, 0, 0, 0, 0 ],
175169
)
176170
check(
177-
new BigInt64Array([ -128n ]),
171+
[ new BigInt64Array([ -128n ]) ],
178172
[ blob|8, sint|~L8, -128, 255, 255, 255, 255, 255, 255, 255 ],
179173
)
180174
check(
181-
new Float32Array([ 1.5 ]),
175+
[ new Float32Array([ 1.5 ]) ],
182176
[ blob|4, fp32, ... new Uint8Array( new Float32Array([ 1.5 ]).buffer ) ],
183177
)
184178
check(
185-
new Float64Array([ 1.5 ]),
179+
[ new Float64Array([ 1.5 ]) ],
186180
[ blob|8, fp64, ... new Uint8Array( new Float64Array([ 1.5 ]).buffer ) ],
187181
)
188182
},
189183

190184
"vary pack dedup blob"( $ ) {
191185
const part = new Uint8Array([ 1, 2 ])
192186
check(
193-
[ part, part ],
187+
[ [ part, part ] ],
194188
[ list|2, blob|2, uint|L1, 1, 2, link|0 ],
195189
)
196190
},
197191

198192
"vary pack struct"( $ ) {
199193
check(
200-
{ x: 1, y: 2 },
194+
[ { x: 1, y: 2 } ],
201195
[ tupl|2, list|2, text|1, ... str('x'), text|1, ... str('y'), 1, 2 ],
202196
)
203197
check(
204-
{ x: {}, y: { a: 1 } },
198+
[ { x: {}, y: { a: 1 } } ],
205199
[ tupl|2, list|2, text|1, ... str('x'), text|1, ... str('y'), tupl|0, list|0, tupl|1, list|1, text|1, ... str('a'), 1 ],
206200
)
207201
},
208202

209203
"vary pack struct shape dedup"( $ ) {
210204
check(
211-
[ {}, { foo: 1 }, { foo: 2 } ],
205+
[ [ {}, { foo: 1 }, { foo: 2 } ] ],
212206
[ list|3, tupl|0, list|0, tupl|1, list|1, text|3, ... str('foo'), 1, tupl|1, link|3, 2 ],
213207
)
214208
check(
215-
{ x: 1, y: { x: 2, y: 3 } },
209+
[ { x: 1, y: { x: 2, y: 3 } } ],
216210
[ tupl|2, list|2, text|1, ... str('x'), text|1, ... str('y'), 1, tupl|2, link|2, 2, 3 ],
217211
)
218212
},
219213

220214
"vary pack struct full dedup"( $ ) {
221215
const item = { x: 1 }
222216
check(
223-
[ item, item ],
217+
[ [ item, item ] ],
224218
[ list|2, tupl|1, list|1, text|1, ... str('x'), 1, link|2 ],
225219
)
226220
const part = { x: 1, y : 2 }
227221
check(
228-
{ x: part, y: part },
222+
[ { x: part, y: part } ],
229223
[ tupl|2, list|2, text|1, ... str('x'), text|1, ... str('y'), tupl|2, link|2, 1, 2, link|3 ],
230224
)
231225
},
@@ -239,7 +233,7 @@ namespace $.$$ {
239233
"vary pack Map"( $ ) {
240234

241235
check(
242-
new Map< any, any >([ [ 'foo', 1 ], [ 2, 'bar' ] ]),
236+
[ new Map< any, any >([ [ 'foo', 1 ], [ 2, 'bar' ] ]) ],
243237
[ tupl|2, list|2, text|4, ... str('keys'), text|4, ... str('vals'), list|2, text|3, ... str('foo'), 2, list|2, 1, text|3, ... str('bar') ],
244238
)
245239

@@ -248,7 +242,7 @@ namespace $.$$ {
248242
"vary pack Set"( $ ) {
249243

250244
check(
251-
new Set([ 7, 'foo' ]),
245+
[ new Set([ 7, 'foo' ]) ],
252246
[ tupl|1, list|1, text|3, ... str('set'), list|2, 7, text|3, ... str('foo') ],
253247
)
254248

@@ -258,13 +252,13 @@ namespace $.$$ {
258252

259253
const date1 = new Date( '2025-01-02T03:04:05' )
260254
check(
261-
date1,
255+
[ date1 ],
262256
[ tupl|1, list|1, text|9, ... str('unix_time'), uint|L4, ... new Uint8Array( new Uint32Array([ date1.valueOf() / 1000 ]).buffer ) ],
263257
)
264258

265259
const date2 = new Date( '2025-01-02T03:04:05.678' )
266260
check(
267-
date2,
261+
[ date2 ],
268262
[ tupl|1, list|1, text|9, ... str('unix_time'), fp64, ... new Uint8Array( new Float64Array([ date2.valueOf() / 1000 ]).buffer ) ],
269263
)
270264

@@ -303,7 +297,7 @@ namespace $.$$ {
303297

304298
// restore
305299
check(
306-
new Foo( 4, 2 ),
300+
[ new Foo( 4, 2 ) ],
307301
[ tupl|2, list|2, text|4, ... str('summ'), text|4, ... str('diff'), 6, 2 ],
308302
Vary,
309303
)
@@ -322,5 +316,18 @@ namespace $.$$ {
322316

323317
},
324318

319+
"vary pack sequences"( $ ) {
320+
321+
check( [], [] )
322+
check( [ 7 ], [ 7 ] )
323+
check( [ 3, 4 ], [ 3, 4 ] )
324+
325+
check(
326+
[ [ 'foo', 'foo' ], [ 'bar', 'bar' ] ],
327+
[ list|2, text|3, ... str('foo'), link|0, list|2, text|3, ... str('bar'), link|0 ],
328+
)
329+
330+
},
331+
325332
})
326333
}

0 commit comments

Comments
 (0)