@@ -2,6 +2,8 @@ import { toBase64, toBase64url, fromBase64, fromBase64url } from '@exodus/bytes/
22import * as js from '../fallback/base64.js'
33import { describe , test } from 'node:test'
44
5+ const SharedArrayBuffer = globalThis . SharedArrayBuffer ?? ArrayBuffer
6+
57const raw = [ new Uint8Array ( ) , new Uint8Array ( [ 0 ] ) , new Uint8Array ( [ 1 ] ) , new Uint8Array ( [ 255 ] ) ]
68for ( let i = 0 ; i < 50 ; i ++ ) {
79 const size = Math . floor ( Math . random ( ) * 100 )
@@ -21,7 +23,9 @@ const pool = raw.map((uint8) => {
2123
2224 if ( base64url !== base64urlFallback ) throw new Error ( 'Unexpected base64url mismatch with Buffer' )
2325 const hex = buffer . toString ( 'hex' )
24- return { uint8, buffer, hex, base64, base64nopad, base64url, base64urlPadded }
26+ const shared = new Uint8Array ( new SharedArrayBuffer ( buffer . length ) )
27+ shared . set ( uint8 )
28+ return { uint8, shared, buffer, hex, base64, base64nopad, base64url, base64urlPadded }
2529} )
2630
2731describe ( 'toBase64' , ( ) => {
@@ -36,32 +40,26 @@ describe('toBase64', () => {
3640 } )
3741
3842 test ( 'base64' , ( t ) => {
39- for ( const { uint8, buffer, base64, base64nopad } of pool ) {
40- t . assert . strictEqual ( toBase64 ( uint8 ) , base64 )
41- t . assert . strictEqual ( toBase64 ( uint8 , { padding : true } ) , base64 )
42- t . assert . strictEqual ( toBase64 ( uint8 , { padding : false } ) , base64nopad )
43- t . assert . strictEqual ( js . toBase64 ( uint8 , false , false ) , base64nopad )
44- t . assert . strictEqual ( js . toBase64 ( uint8 , false , true ) , base64 )
45- t . assert . strictEqual ( toBase64 ( buffer ) , base64 )
46- t . assert . strictEqual ( toBase64 ( buffer , { padding : true } ) , base64 )
47- t . assert . strictEqual ( toBase64 ( buffer , { padding : false } ) , base64nopad )
48- t . assert . strictEqual ( js . toBase64 ( buffer , false , false ) , base64nopad )
49- t . assert . strictEqual ( js . toBase64 ( buffer , false , true ) , base64 )
43+ for ( const { uint8, shared, buffer, base64, base64nopad } of pool ) {
44+ for ( const arg of [ uint8 , shared , buffer ] ) {
45+ t . assert . strictEqual ( toBase64 ( arg ) , base64 )
46+ t . assert . strictEqual ( toBase64 ( arg , { padding : true } ) , base64 )
47+ t . assert . strictEqual ( toBase64 ( arg , { padding : false } ) , base64nopad )
48+ t . assert . strictEqual ( js . toBase64 ( arg , false , false ) , base64nopad )
49+ t . assert . strictEqual ( js . toBase64 ( arg , false , true ) , base64 )
50+ }
5051 }
5152 } )
5253
5354 test ( 'base64url' , ( t ) => {
54- for ( const { uint8, buffer, base64url, base64urlPadded } of pool ) {
55- t . assert . strictEqual ( toBase64url ( uint8 ) , base64url )
56- t . assert . strictEqual ( toBase64url ( uint8 , { padding : false } ) , base64url )
57- t . assert . strictEqual ( toBase64url ( uint8 , { padding : true } ) , base64urlPadded )
58- t . assert . strictEqual ( js . toBase64 ( uint8 , true , false ) , base64url )
59- t . assert . strictEqual ( js . toBase64 ( uint8 , true , true ) , base64urlPadded )
60- t . assert . strictEqual ( toBase64url ( buffer ) , base64url )
61- t . assert . strictEqual ( toBase64url ( buffer , { padding : false } ) , base64url )
62- t . assert . strictEqual ( toBase64url ( buffer , { padding : true } ) , base64urlPadded )
63- t . assert . strictEqual ( js . toBase64 ( buffer , true , false ) , base64url )
64- t . assert . strictEqual ( js . toBase64 ( buffer , true , true ) , base64urlPadded )
55+ for ( const { uint8, shared, buffer, base64url, base64urlPadded } of pool ) {
56+ for ( const arg of [ uint8 , shared , buffer ] ) {
57+ t . assert . strictEqual ( toBase64url ( arg ) , base64url )
58+ t . assert . strictEqual ( toBase64url ( arg , { padding : false } ) , base64url )
59+ t . assert . strictEqual ( toBase64url ( arg , { padding : true } ) , base64urlPadded )
60+ t . assert . strictEqual ( js . toBase64 ( arg , true , false ) , base64url )
61+ t . assert . strictEqual ( js . toBase64 ( arg , true , true ) , base64urlPadded )
62+ }
6563 }
6664 } )
6765} )
0 commit comments