tree-result.test.mjs (2262B)
1 import test from 'node:test'; 2 import assert from 'node:assert/strict'; 3 import {Graph} from '../dist/graph.js'; 4 import {snapshotBundle,treeResult,isTreeResult} from '../dist/tree-result.js'; 5 import {view} from '../dist/codecs.js'; 6 test('result snapshots preserve physical sharing and serialize real values',()=>{ 7 const g=new Graph(),x=g.fork(g.leaf,g.leaf),root=g.fork(x,x); 8 const snapshot=g.snapshot(root),b=snapshotBundle(snapshot); 9 assert.equal(b.nodes.length,3);assert.equal(b.nodes[2].left,b.nodes[2].right); 10 assert.equal(treeResult(snapshot,'tricu').value,'(t (t t t) (t t t))'); 11 assert.equal(treeResult(snapshot,'triangle').value,'(△ (△ △ △) (△ △ △))'); 12 assert.equal(view(g,root,'ternary').value,'2200200'); 13 assert.match(treeResult(snapshot,'dag').value,/tree :n2\ntree\n$/); 14 assert.equal(g.snapshot(x,2).truncated,false,'Known duplicate frontier does not count as new nodes'); 15 assert.equal(isTreeResult('tree'),false); 16 }); 17 test('result snapshots reject partial graphs, missing nodes, aliases and cycles honestly',()=>{ 18 const g=new Graph(),root=g.stem(g.stem(g.leaf)); 19 assert.throws(()=>treeResult(g.snapshot(root,1),'dag'),/partial export/); 20 assert.throws(()=>snapshotBundle({root:0,nodes:[],aliases:[],truncated:false}),/Incomplete/); 21 assert.throws(()=>snapshotBundle({root:0,nodes:[],aliases:[{from:0,to:1},{from:1,to:0}],truncated:false}),/alias cycle/); 22 assert.throws(()=>snapshotBundle({root:0,nodes:[{id:0,kind:'stem',children:[0]}],aliases:[],truncated:false}),/Cyclic/); 23 assert.throws(()=>g.snapshot(root,100001),/snapshot budget/); 24 }); 25 test('complete transport supports more than preview nodes, bounds expansion, and resolves aliases',()=>{ 26 const g=new Graph();let root=g.leaf;for(let i=0;i<600;i++)root=g.stem(root); 27 assert.equal(g.preview(root,256).truncated,true);assert.equal(snapshotBundle(g.snapshot(root)).nodes.length,601); 28 let shared=g.leaf;for(let i=0;i<28;i++)shared=g.fork(shared,shared); 29 const snapshot=g.snapshot(shared);assert.ok(treeResult(snapshot,'dag').value.length<3000); 30 assert.throws(()=>treeResult(snapshot,'tricu'),/32 MiB/); 31 const aliases={root:8,aliases:[{from:8,to:0}],nodes:[{id:0,kind:'leaf',children:[]}],truncated:false}; 32 assert.equal(treeResult(aliases,'tricu').value,'t'); 33 });