Compare commits

...

2 Commits

Author SHA1 Message Date
Administrator
8c2a83ecee release: v2.3.6 2026-03-21 15:17:26 +01:00
Administrator
765bec03c0 test: add edge case tests for throttle and semaphore
- throttle: consume(0) resolves immediately
- throttle: updateRate(0) makes consume instant (unlimited)
- semaphore: release without acquire clamps active to 0

All 66 tests passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 15:16:49 +01:00
3 changed files with 25 additions and 1 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "multi-hoster-uploader", "name": "multi-hoster-uploader",
"version": "2.3.5", "version": "2.3.6",
"description": "Upload files to doodstream, voe, vidmoly, byse simultaneously", "description": "Upload files to doodstream, voe, vidmoly, byse simultaneously",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {

View File

@ -162,4 +162,13 @@ describe('Semaphore', () => {
await new Promise(r => setTimeout(r, 5)); await new Promise(r => setTimeout(r, 5));
assert.equal(sem.pending, 1); assert.equal(sem.pending, 1);
}); });
it('release without acquire clamps active to 0', () => {
const sem = new Semaphore(2);
assert.equal(sem.active, 0);
sem.release();
assert.equal(sem.active, 0, 'should not go negative');
sem.release();
assert.equal(sem.active, 0, 'should still be 0');
});
}); });

View File

@ -83,4 +83,19 @@ describe('Throttle', () => {
const elapsed = Date.now() - start2; const elapsed = Date.now() - start2;
assert.ok(elapsed >= 150, `third consume should wait for refill, took ${elapsed}ms`); assert.ok(elapsed >= 150, `third consume should wait for refill, took ${elapsed}ms`);
}); });
it('consume(0) resolves immediately', async () => {
const t = new Throttle(100);
const start = Date.now();
await t.consume(0);
assert.ok(Date.now() - start < 50);
});
it('updateRate to unlimited (0) makes consume instant', async () => {
const t = new Throttle(100); // very slow
t.updateRate(0); // unlimited
const start = Date.now();
await t.consume(1_000_000);
assert.ok(Date.now() - start < 50, 'unlimited rate should be instant');
});
}); });