32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { test } from 'node:test';
|
|||
|
|
import assert from 'node:assert/strict';
|
||
|
|
import { nextSpeakerSet, sameSet } from './speakerSet';
|
||
|
|
|
||
|
|
test('sameSet: identity, size and membership', () => {
|
||
|
|
const a = new Set(['@a:x', '@b:x']);
|
||
|
|
assert.equal(sameSet(a, a), true);
|
||
|
|
assert.equal(sameSet(a, new Set(['@b:x', '@a:x'])), true);
|
||
|
|
assert.equal(sameSet(a, new Set(['@a:x'])), false);
|
||
|
|
assert.equal(sameSet(a, new Set(['@a:x', '@c:x'])), false);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('nextSpeakerSet returns the SAME reference when speakers are unchanged (#32)', () => {
|
||
|
|
const prev = new Set(['@a:x']);
|
||
|
|
const next = nextSpeakerSet(prev, [
|
||
|
|
{ userId: '@a:x', speaking: true },
|
||
|
|
{ userId: '@b:x', speaking: false },
|
||
|
|
]);
|
||
|
|
assert.equal(next, prev);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('nextSpeakerSet returns a new set when speakers change, ignoring non-user ids', () => {
|
||
|
|
const prev = new Set(['@a:x']);
|
||
|
|
const next = nextSpeakerSet(prev, [
|
||
|
|
{ userId: '@a:x', speaking: false },
|
||
|
|
{ userId: '@b:x', speaking: true },
|
||
|
|
{ userId: 'not-a-user-id', speaking: true },
|
||
|
|
]);
|
||
|
|
assert.notEqual(next, prev);
|
||
|
|
assert.deepEqual(Array.from(next), ['@b:x']);
|
||
|
|
});
|