@@ -21,15 +21,18 @@ const {
2121// push() validation
2222// =============================================================================
2323
24- // Budget must be integer >= 16384
24+ // Budget must be an integer >= 1
2525assert . throws ( ( ) => push ( { budget : 'bad' } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
26- assert . throws ( ( ) => push ( { budget : 1.5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
27- // Values < 16384 are rejected
26+ // WebIDL conversion truncates fractions: 0.5 becomes 0, 1.5 becomes 1.
27+ assert . throws ( ( ) => push ( { budget : 0.5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
28+ assert . strictEqual ( push ( { budget : 1.5 } ) . writer . canWrite , true ) ;
29+ // Values < 1 are rejected
2830assert . throws ( ( ) => push ( { budget : 0 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
2931assert . throws ( ( ) => push ( { budget : - 1 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
3032assert . throws ( ( ) => push ( { budget : - 100 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
31- assert . throws ( ( ) => push ( { budget : 16383 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
32- // 16384 is the minimum accepted value
33+ // Only the default must be at least 16384; smaller explicit budgets are valid
34+ assert . strictEqual ( push ( { budget : 1 } ) . writer . canWrite , true ) ;
35+ assert . strictEqual ( push ( { budget : 16383 } ) . writer . canWrite , true ) ;
3336assert . strictEqual ( push ( { budget : 16384 } ) . writer . canWrite , true ) ;
3437// MAX_SAFE_INTEGER is accepted
3538assert . strictEqual ( push ( { budget : Number . MAX_SAFE_INTEGER } ) . writer . canWrite ,
@@ -87,11 +90,11 @@ assert.throws(() => duplex({ b: 'bad' }), { code: 'ERR_INVALID_ARG_TYPE' });
8790
8891// Budget validation (cascades through to push())
8992assert . throws ( ( ) => duplex ( { budget : 'bad' } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
90- assert . throws ( ( ) => duplex ( { budget : 1 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
93+ assert . throws ( ( ) => duplex ( { budget : 0 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
9194assert . throws ( ( ) => duplex ( { budget : Number . MAX_SAFE_INTEGER + 1 } ) ,
9295 { code : 'ERR_OUT_OF_RANGE' } ) ;
9396
94- // Values < 16384 are rejected (both directions)
97+ // Values < 1 are rejected (both directions)
9598assert . throws ( ( ) => duplex ( { budget : 0 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
9699// MAX_SAFE_INTEGER is accepted
97100{
@@ -129,17 +132,16 @@ assert.throws(() => pullSync(fromSync('a'), 42), { code: 'ERR_INVALID_ARG_TYPE'
129132// =============================================================================
130133
131134assert . throws ( ( ) => broadcast ( { budget : 'bad' } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
132- assert . throws ( ( ) => broadcast ( { budget : 1 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
135+ assert . throws ( ( ) => broadcast ( { budget : 0 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
133136assert . throws ( ( ) => broadcast ( { budget : Number . MAX_SAFE_INTEGER + 1 } ) ,
134137 { code : 'ERR_OUT_OF_RANGE' } ) ;
135138
136- // Values < 16384 are rejected
139+ // Values < 1 are rejected
137140assert . throws ( ( ) => broadcast ( { budget : 0 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
138141assert . throws ( ( ) => broadcast ( { budget : - 1 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
139- assert . throws ( ( ) => broadcast ( { budget : 16383 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
140- // 16384 is the minimum accepted value
142+ // Small explicit budgets are accepted
141143{
142- const bc = broadcast ( { budget : 16384 } ) ;
144+ const bc = broadcast ( { budget : 1 } ) ;
143145 bc . broadcast . push ( ) ;
144146 assert . strictEqual ( bc . writer . canWrite , true ) ;
145147 bc . writer . endSync ( ) ;
@@ -235,7 +237,7 @@ assert.throws(
235237
236238assert . throws ( ( ) => share ( 42 ) , { code : 'ERR_INVALID_ARG_TYPE' } ) ;
237239assert . throws ( ( ) => share ( from ( 'a' ) , { budget : 'bad' } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
238- assert . throws ( ( ) => share ( from ( 'a' ) , { budget : 1 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
240+ assert . throws ( ( ) => share ( from ( 'a' ) , { budget : 0 .5 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
239241assert . throws ( ( ) => share ( from ( 'a' ) , { budget : Number . MAX_SAFE_INTEGER + 1 } ) ,
240242 { code : 'ERR_OUT_OF_RANGE' } ) ;
241243assert . throws ( ( ) => share ( from ( 'a' ) , { signal : { } } ) , { code : 'ERR_INVALID_ARG_TYPE' } ) ;
@@ -250,28 +252,28 @@ assert.throws(() => share(from('a'), { backpressure: 'bad' }), { code: 'ERR_INVA
250252 assert . strictEqual ( shared . consumerCount , 0 ) ;
251253}
252254
253- // share() values < 16384 are rejected
255+ // share() values < 1 are rejected
254256assert . throws ( ( ) => share ( from ( 'a' ) , { budget : 0 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
255257assert . throws ( ( ) => share ( from ( 'a' ) , { budget : - 1 } ) , { code : 'ERR_OUT_OF_RANGE' } ) ;
256- // 16384 is the minimum, MAX_SAFE_INTEGER is accepted
257- share ( from ( 'a' ) , { budget : 16384 } ) . cancel ( ) ;
258+ // 1 is the minimum, MAX_SAFE_INTEGER is accepted
259+ share ( from ( 'a' ) , { budget : 1 } ) . cancel ( ) ;
258260share ( from ( 'a' ) , { budget : Number . MAX_SAFE_INTEGER } ) . cancel ( ) ;
259261
260262assert . throws ( ( ) => shareSync ( 42 ) , { code : 'ERR_INVALID_ARG_TYPE' } ) ;
261263assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : 'bad' } ) ,
262264 { code : 'ERR_OUT_OF_RANGE' } ) ;
263- assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : 1 .5 } ) ,
265+ assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : 0 .5 } ) ,
264266 { code : 'ERR_OUT_OF_RANGE' } ) ;
265267assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : Number . MAX_SAFE_INTEGER + 1 } ) ,
266268 { code : 'ERR_OUT_OF_RANGE' } ) ;
267269
268- // shareSync() values < 16384 are rejected
270+ // shareSync() values < 1 are rejected
269271assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : 0 } ) ,
270272 { code : 'ERR_OUT_OF_RANGE' } ) ;
271273assert . throws ( ( ) => shareSync ( fromSync ( 'a' ) , { budget : - 1 } ) ,
272274 { code : 'ERR_OUT_OF_RANGE' } ) ;
273- // 16384 is the minimum, MAX_SAFE_INTEGER is accepted
274- shareSync ( fromSync ( 'a' ) , { budget : 16384 } ) . cancel ( ) ;
275+ // 1 is the minimum, MAX_SAFE_INTEGER is accepted
276+ shareSync ( fromSync ( 'a' ) , { budget : 1 } ) . cancel ( ) ;
275277shareSync ( fromSync ( 'a' ) , { budget : Number . MAX_SAFE_INTEGER } ) . cancel ( ) ;
276278
277279// Share.from / SyncShare.fromSync reject non-iterable
0 commit comments