Offload functions to worker threads with shared memory primitives for Node.js.
1import { describe, it } from 'node:test';
2import assert from 'node:assert/strict';
3import { boolatomic } from 'moroutine';
4
5describe('BoolAtomic', () => {
6 it('self-allocates and initializes to false', () => {
7 const a = boolatomic();
8 assert.equal(a.load(), false);
9 });
10
11 it('stores and loads true', () => {
12 const a = boolatomic();
13 a.store(true);
14 assert.equal(a.load(), true);
15 });
16
17 it('stores and loads false', () => {
18 const a = boolatomic();
19 a.store(true);
20 a.store(false);
21 assert.equal(a.load(), false);
22 });
23
24 it('exposes byteSize of 1', () => {
25 assert.equal(boolatomic.byteSize, 1);
26 });
27
28 it('and(false) clears, returns previous', () => {
29 const a = boolatomic();
30 a.store(true);
31 assert.equal(a.and(false), true);
32 assert.equal(a.load(), false);
33 });
34
35 it('and(true) preserves, returns previous', () => {
36 const a = boolatomic();
37 a.store(true);
38 assert.equal(a.and(true), true);
39 assert.equal(a.load(), true);
40 });
41
42 it('or(true) sets, returns previous', () => {
43 const a = boolatomic();
44 assert.equal(a.or(true), false);
45 assert.equal(a.load(), true);
46 });
47
48 it('or(false) preserves, returns previous', () => {
49 const a = boolatomic();
50 a.store(true);
51 assert.equal(a.or(false), true);
52 assert.equal(a.load(), true);
53 });
54
55 it('xor(true) toggles, returns previous', () => {
56 const a = boolatomic();
57 a.store(true);
58 assert.equal(a.xor(true), true);
59 assert.equal(a.load(), false);
60 });
61
62 it('xor(false) preserves, returns previous', () => {
63 const a = boolatomic();
64 a.store(true);
65 assert.equal(a.xor(false), true);
66 assert.equal(a.load(), true);
67 });
68
69 it('exchange returns previous value', () => {
70 const a = boolatomic();
71 a.store(true);
72 assert.equal(a.exchange(false), true);
73 assert.equal(a.load(), false);
74 });
75
76 it('compareExchange succeeds when expected matches', () => {
77 const a = boolatomic();
78 a.store(true);
79 assert.equal(a.compareExchange(true, false), true);
80 assert.equal(a.load(), false);
81 });
82
83 it('compareExchange fails when expected does not match', () => {
84 const a = boolatomic();
85 a.store(true);
86 assert.equal(a.compareExchange(false, false), true);
87 assert.equal(a.load(), true);
88 });
89});