diff --git a/test/benchmark.js b/test/benchmark.js index eda1af4..847a379 100644 --- a/test/benchmark.js +++ b/test/benchmark.js @@ -10,6 +10,7 @@ // @ts-expect-error import * as solid from './solid-js-baseline.js'; import * as preact from '@preact/signals-core'; + import * as dom_cue from 'dom-cue'; import * as usignal from '../esm/index.js'; import * as signal from '@webreflection/signal'; import * as alien from 'alien-signals'; @@ -47,12 +48,13 @@ S: { fn: runS, runs: [] }, solid: { fn: runSolid, runs: [] }, 'preact/signals': { fn: runPreact, runs: [] }, + 'dom-cue': { fn: runDOMCue, runs: [] }, // TODO: running too slow so I need to leave it out for now - maybe something is wrong. // sinuous: { fn: runSinuous, runs: [] }, - cellx: { fn: runCellx, runs: [] }, + // cellx: { fn: runCellx, runs: [] }, usignal: { fn: runUsignal, runs: [] }, signal: { fn: runSignal, runs: [] }, - alien: { fn: runAlien, runs: [] }, + // alien: { fn: runAlien, runs: [] }, }; for (const lib of Object.keys(report)) { @@ -243,6 +245,43 @@ done(isSolution(layers, solution) ? endTime : -1); }); } + + function runDOMCue(layers, done) { + const a = dom_cue.signal(1), + b = dom_cue.signal(2), + c = dom_cue.signal(3), + d = dom_cue.signal(4); + + const start = { a, b, c, d }; + + let layer = start; + + for (let i = layers; i--; ) { + layer = ((m) => { + const props = { + a: dom_cue.computed(() => rand % 2 ? m.b.value : m.c.value), + b: dom_cue.computed(() => m.a.value - m.c.value), + c: dom_cue.computed(() => m.b.value + m.d.value), + d: dom_cue.computed(() => m.c.value), + }; + + return props; + })(layer); + } + + const startTime = performance.now(); + + const run = BATCHED ? dom_cue.batch : (fn) => fn(); + run(() => { + (a.value = 4), (b.value = 3), (c.value = 2), (d.value = 1); + + const end = layer; + const solution = [end.a.value, end.b.value, end.c.value, end.d.value]; + const endTime = performance.now() - startTime; + + done(isSolution(layers, solution) ? endTime : -1); + }); +} /** * @see {@link https://github.com/Riim/cellx} diff --git a/test/benchmark.old1.png b/test/benchmark.old1.png new file mode 100644 index 0000000..ecf362e Binary files /dev/null and b/test/benchmark.old1.png differ diff --git a/test/benchmark.png b/test/benchmark.png index ecf362e..762a4f8 100644 Binary files a/test/benchmark.png and b/test/benchmark.png differ diff --git a/test/dom-cue.js b/test/dom-cue.js new file mode 100644 index 0000000..d769b56 --- /dev/null +++ b/test/dom-cue.js @@ -0,0 +1,4 @@ +import test from './test.js'; +import * as dom_cue from 'dom-cue'; + +test('dom-cue', dom_cue); diff --git a/test/package.json b/test/package.json index aaa612e..7a3d296 100644 --- a/test/package.json +++ b/test/package.json @@ -3,10 +3,11 @@ "devDependencies": { "@preact/signals-core": "latest", "@webreflection/signal": "latest", + "alien-signals": "latest", "cellx": "latest", "cli-table": "latest", + "dom-cue": "^0.2.0", "kleur": "latest", - "alien-signals": "latest", "s-js": "latest", "solid-js": "latest" } diff --git a/test/test.js b/test/test.js index a051004..c54c3ac 100644 --- a/test/test.js +++ b/test/test.js @@ -31,7 +31,7 @@ export default (library, {signal, computed, effect, batch, Signal}) => { assert(signal(0) instanceof Signal, 'signals are not instances of Signal'); - if (/^(?:usignal|@preact\/signals-core)$/.test(library)) { + if (/^(?:usignal|dom-cue|@preact\/signals-core)$/.test(library)) { assert(computed(() => {}) instanceof Signal, 'computeds are not instances of Signal'); let calls = 0; const $ = signal(0); @@ -62,7 +62,7 @@ export default (library, {signal, computed, effect, batch, Signal}) => { if (!/^(?:@webreflection\/signal)$/.test(library)) testComputedMoar(); - if (/^(?:usignal|@preact\/signals-core|@webreflection\/signal)$/.test(library)) + if (/^(?:usignal|dom-cue|@preact\/signals-core|@webreflection\/signal)$/.test(library)) implicitToString(); if (!/^(?:@webreflection\/signal)$/.test(library)) { @@ -264,10 +264,10 @@ export default (library, {signal, computed, effect, batch, Signal}) => { assert(fullName.value === 'Jane Doe', 'computed not working'); assert(invokes === 1, 'computed value should have been invoked once'); name.value = 'John'; - if (/^(?:usignal|@preact\/signals-core|@webreflection\/signal)$/.test(library)) fullName.value; + if (/^(?:usignal|dom-cue|@preact\/signals-core|@webreflection\/signal)$/.test(library)) fullName.value; assert(invokes === 2, 'computed value should have been invoked again'); name.value = 'John'; - if (/^(?:usignal|@preact\/signals-core|@webreflection\/signal)$/.test(library)) fullName.value; + if (/^(?:usignal|dom-cue|@preact\/signals-core|@webreflection\/signal)$/.test(library)) fullName.value; assert(invokes === 2, 'computed value should NOT have been invoked again'); } @@ -364,7 +364,7 @@ export default (library, {signal, computed, effect, batch, Signal}) => { loop = 1; num.value = 1; - if (!/^(?:@preact\/signals-core)$/.test(library)) { + if (!/^(?:@preact\/signals-core|dom-cue)$/.test(library)) { assert(invokes.length === 2, 'looped effects not working after changes'); assert(invokes.join(',') === '1,1', 'looped values not matching after changes'); }