tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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 });