tricu

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

program-catalogue.test.mjs (2243B)


      1 import test from 'node:test';
      2 import assert from 'node:assert/strict';
      3 import {readFile} from 'node:fs/promises';
      4 import {selectorLibraries,libraryLabel,exampleGroup,exampleGroups} from '../dist/program-catalogue.js';
      5 import {packageIndex,packageReleases} from '../dist/packages.js';
      6 const read=name=>readFile(new URL('../'+name,import.meta.url),'utf8').then(JSON.parse);
      7 test('selector merges identical native interfaces while preserving publications',async()=>{
      8  const releases=packageIndex(await read('packages.json')),before=JSON.stringify(releases),shown=selectorLibraries(releases);
      9  assert.equal(new Set(shown.map(r=>r.manifest)).size,shown.length);
     10  assert.equal(JSON.stringify(releases),before);
     11  assert(shown.some(r=>r.name==='tricu-lib-native-math'));assert(!shown.some(r=>r.name==='tricu-math'));
     12  assert(shown.some(r=>r.name==='tricu-lib-packages-base'));assert(!shown.some(r=>r.name==='tricu-base'));
     13  assert(shown.some(r=>r.name==='tricu-compiler'));assert(shown.some(r=>r.name==='tricu-source-builder'));
     14  for(const name of new Set(releases.filter(r=>!r.demo).map(r=>r.name))){
     15   const latest=packageReleases(releases,name)[0];assert(shown.some(r=>r.manifest===latest.manifest),name);
     16  }
     17  assert(shown.every(r=>!libraryLabel(r.name).startsWith('tricu-')));
     18  assert(releases.some(r=>r.demo==='intro'),'Retired publications remain available');
     19 });
     20 test('beginner progression and reference are separated from practical demos',async()=>{
     21  const catalogue=await read('catalogue.json');
     22  assert.deepEqual(exampleGroups,['Basic Examples','Practical Examples','Language & Runtime Explorations']);
     23  assert.deepEqual(catalogue.filter(e=>exampleGroup(e)==='Basic Examples').map(e=>e.id),['names-values','arithmetic','functions','lists','transform-list','choices']);
     24  assert.equal(catalogue.filter(e=>exampleGroup(e)==='Language & Runtime Explorations')[0].id,'language-reference');
     25  assert.equal(catalogue[0].export,'greeting');assert.equal(catalogue[0].output,'string');
     26  for(const entry of catalogue.filter(e=>exampleGroup(e)==='Basic Examples')){
     27   assert.match(entry.source,/-- Evaluate /);assert.match(entry.source,/-- Exercise:/);
     28  }
     29  assert.equal(Object.keys(catalogue.find(e=>e.id==='language-reference').presets).length,16);
     30 });