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 { int8atomic } from 'moroutine';
4
5describe('Int8Atomic', () => {
6 it('self-allocates and initializes to zero', () => {
7 const a = int8atomic();
8 assert.equal(a.load(), 0);
9 });
10
11 it('stores and loads a value', () => {
12 const a = int8atomic();
13 a.store(42);
14 assert.equal(a.load(), 42);
15 });
16
17 it('exposes byteSize of 1', () => {
18 assert.equal(int8atomic.byteSize, 1);
19 });
20
21 it('add returns previous value and updates', () => {
22 const a = int8atomic();
23 a.store(10);
24 const prev = a.add(5);
25 assert.equal(prev, 10);
26 assert.equal(a.load(), 15);
27 });
28
29 it('sub returns previous value and updates', () => {
30 const a = int8atomic();
31 a.store(10);
32 const prev = a.sub(3);
33 assert.equal(prev, 10);
34 assert.equal(a.load(), 7);
35 });
36
37 it('and returns previous value and updates', () => {
38 const a = int8atomic();
39 a.store(0b1100);
40 const prev = a.and(0b1010);
41 assert.equal(prev, 0b1100);
42 assert.equal(a.load(), 0b1000);
43 });
44
45 it('or returns previous value and updates', () => {
46 const a = int8atomic();
47 a.store(0b1100);
48 const prev = a.or(0b0011);
49 assert.equal(prev, 0b1100);
50 assert.equal(a.load(), 0b1111);
51 });
52
53 it('xor returns previous value and updates', () => {
54 const a = int8atomic();
55 a.store(0b1100);
56 const prev = a.xor(0b1010);
57 assert.equal(prev, 0b1100);
58 assert.equal(a.load(), 0b0110);
59 });
60
61 it('exchange returns previous value and sets new', () => {
62 const a = int8atomic();
63 a.store(42);
64 const prev = a.exchange(99);
65 assert.equal(prev, 42);
66 assert.equal(a.load(), 99);
67 });
68
69 it('compareExchange succeeds when expected matches', () => {
70 const a = int8atomic();
71 a.store(42);
72 const actual = a.compareExchange(42, 99);
73 assert.equal(actual, 42);
74 assert.equal(a.load(), 99);
75 });
76
77 it('compareExchange fails when expected does not match', () => {
78 const a = int8atomic();
79 a.store(42);
80 const actual = a.compareExchange(0, 99);
81 assert.equal(actual, 42);
82 assert.equal(a.load(), 42);
83 });
84});