tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

definition-inspector.test.mjs (1226B)


      1 import test from 'node:test';
      2 import assert from 'node:assert/strict';
      3 import {definitionSites,inspectionText} from '../dist/definition-inspector.js';
      4 test('inspection sites are unique top-level heads, never comments, strings or local binders',()=>{
      5  const source='!export answer\n-- fake = 1\nanswer = 42\nf [] = 0\nf xs = 1\ntext = "not = a definition"\nouter x =\n  let local = x\n  in local\n|- hidden = 2 -|';
      6  assert.deepEqual(definitionSites('outer = let\n  answer = 1\n  in answer\nanswer = 42').map(s=>s.name),['outer','answer']);
      7  assert.deepEqual(definitionSites(source).map(s=>s.name),['answer','f','text','outer']);
      8  for(const site of definitionSites(source))assert.equal(source.slice(site.start,site.start+site.name.length),site.name);
      9 });
     10 test('inspection text respects decoder output and preserves zero/false/empty text',()=>{
     11  assert.equal(inspectionText({type:'number',value:'0'}),'0');
     12  assert.equal(inspectionText({type:'bool',value:false}),'false');
     13  assert.equal(inspectionText({type:'string',value:''}),'');
     14  assert.equal(inspectionText({type:'tricu',value:'ignored',file:{text:'t',extension:'tri',bytes:1}}),'t');
     15  assert.throws(()=>inspectionText({type:'tree',value:{}}),/source interpretation/);
     16 });