source: Klonkt/test/decisive-vote.test.js@ ea211b9

main
Last change on this file since ea211b9 was ea211b9, checked in by roboburr <roboburr@…>, 4 weeks ago

Je hoort te weten dat je de doorslag geeft (shaer-8vt)

De telling is een race naar de drempel: zodra het aantal gehaald is, is het
besluit gevallen. Bij 2 van 3 is de tweede ja meteen de beslissing -- en sinds
Barts meerderheidsbesluit van vandaag is bij een volgverzoek met twee guardians
de EERSTE ja dat al. Wie antwoordde wist dat niet, en het scherm zei het nergens.

Dat kon niet, en waarom niet was de vondst bij shaer-nf9: gatedProgress werkt op
een LOKALE slug en er zijn geen lokale wards. De telling loopt op de server van
het kind, en die stuurde hem niet mee. Nu wel: shaer:decisive reist mee met de
doorgestuurde Offer, voor gate-voorstellen en voor volgverzoeken in beide
richtingen.

EEN JA/NEE, GEEN TELLING, en dat is een besluit. Een getal ("1 van 2") reist mee,
veroudert onderweg en leest daarna als een feit; de beschikbare set schuift met
3.6 bovendien mee. En hoeveel guardians een kind heeft, en wie er al gestemd
heeft, is niet vanzelf iets dat elke mede-guardian hoort te zien. Een
waarschuwing veroudert ook, maar hij CLAIMT niets -- en dat scheelt.

BIJ TWIJFEL WAARSCHUWEN. Ontbreekt het veld (een oudere server), dan zeggen we
dat je beslist. De twee fouten zijn niet gelijk: zeggen dat je beslist terwijl
dat niet zo is maakt iemand voorzichtiger dan nodig; niets zeggen terwijl hij wel
beslist laat hem het onwetend doen. Daar staat een toets op, en de mutatie die
ertoe doet -- onbekend als "je beslist niets" lezen -- maakt hem rood.

Eerlijk over de mutatietest: mijn eerste poging (de Number.isFinite-guards
weghalen) gaf nul fouten, want die geven voor undefined dezelfde uitkomst. De
regel bijt wel tegen de realistische verkeerde versie.

Zes toetsen, drie talen. Suite 747/747.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1// Weet je dat je de doorslag geeft? (shaer-8vt)
2//
3// De telling is een race naar de drempel: zodra het aantal gehaald is, is het
4// besluit gevallen. Bij 2 van 3 is de tweede ja meteen de beslissing, en sinds
5// Barts meerderheidsbesluit is bij een volgverzoek met twee guardians de EERSTE
6// ja dat al. Wie antwoordde wist dat niet, en het scherm zei het nergens.
7//
8// Wat hier bewaakt wordt is vooral de FAALSTAND: bij twijfel waarschuwen. De
9// twee fouten zijn niet gelijk -- zeggen dat je beslist terwijl dat niet zo is
10// maakt iemand voorzichtiger dan nodig; niets zeggen terwijl hij wel beslist
11// laat hem het onwetend doen.
12//
13// Run: npm test
14import { test } from 'node:test';
15import assert from 'node:assert/strict';
16
17process.env.DATABASE_PATH = ':memory:';
18const gated = await import('../src/services/guardianship/gated.js');
19const follows = await import('../src/services/guardianship/follows.js');
20
21test('de laatste stem die nodig is, is beslissend', () => {
22 assert.equal(gated.isDecisive(1, 2), true); // nog een nodig: die van jou
23 assert.equal(gated.isDecisive(2, 3), true);
24});
25
26test('met nog twee te gaan ben je het niet', () => {
27 assert.equal(gated.isDecisive(0, 2), false);
28 assert.equal(gated.isDecisive(1, 3), false);
29});
30
31test('een drempel van 1 maakt de EERSTE stem beslissend', () => {
32 // Dit is het geval dat Barts meerderheidsbesluit oplevert: twee guardians,
33 // drempel 1. Wie als eerste ja zegt heeft het besloten.
34 assert.equal(gated.isDecisive(0, 1), true);
35 assert.equal(gated.isDecisive(0, follows.followThreshold(2)), true);
36});
37
38test('bij drie guardians is de eerste ja NIET beslissend', () => {
39 assert.equal(gated.isDecisive(0, follows.followThreshold(3)), false);
40});
41
42test('onzin telt als BESLISSEND, niet als veilig', () => {
43 // Een ontbrekend of onleesbaar getal mag nooit "je beslist niets" opleveren.
44 // Dat is de stille fout: het scherm zwijgt precies wanneer het moet spreken.
45 assert.equal(gated.isDecisive(undefined, undefined), true);
46 assert.equal(gated.isDecisive(NaN, NaN), true);
47 assert.equal(gated.isDecisive(null, null), true);
48});
Note: See TracBrowser for help on using the repository browser.