import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { boolatomic } from 'moroutine'; describe('BoolAtomic', () => { it('self-allocates and initializes to false', () => { const a = boolatomic(); assert.equal(a.load(), false); }); it('stores and loads true', () => { const a = boolatomic(); a.store(true); assert.equal(a.load(), true); }); it('stores and loads false', () => { const a = boolatomic(); a.store(true); a.store(false); assert.equal(a.load(), false); }); it('exposes byteSize of 1', () => { assert.equal(boolatomic.byteSize, 1); }); it('and(false) clears, returns previous', () => { const a = boolatomic(); a.store(true); assert.equal(a.and(false), true); assert.equal(a.load(), false); }); it('and(true) preserves, returns previous', () => { const a = boolatomic(); a.store(true); assert.equal(a.and(true), true); assert.equal(a.load(), true); }); it('or(true) sets, returns previous', () => { const a = boolatomic(); assert.equal(a.or(true), false); assert.equal(a.load(), true); }); it('or(false) preserves, returns previous', () => { const a = boolatomic(); a.store(true); assert.equal(a.or(false), true); assert.equal(a.load(), true); }); it('xor(true) toggles, returns previous', () => { const a = boolatomic(); a.store(true); assert.equal(a.xor(true), true); assert.equal(a.load(), false); }); it('xor(false) preserves, returns previous', () => { const a = boolatomic(); a.store(true); assert.equal(a.xor(false), true); assert.equal(a.load(), true); }); it('exchange returns previous value', () => { const a = boolatomic(); a.store(true); assert.equal(a.exchange(false), true); assert.equal(a.load(), false); }); it('compareExchange succeeds when expected matches', () => { const a = boolatomic(); a.store(true); assert.equal(a.compareExchange(true, false), true); assert.equal(a.load(), false); }); it('compareExchange fails when expected does not match', () => { const a = boolatomic(); a.store(true); assert.equal(a.compareExchange(false, false), true); assert.equal(a.load(), true); }); });