tricu

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

io-version-probe.mjs (2775B)


      1 // Actual selected production adapter, independent constructor-only bundles.
      2 export async function run(_control,backend){
      3  const assert=(value,message)=>{if(!value)throw Error(message);};
      4  const base=new URL('../',document.querySelector('script[type=module][src]').src);
      5  const {createRuntimeSession}=(await import(new URL('dist/probe-api.js',base))).runtimeSession;
      6  const fixtures=await(await fetch('/runtime-fixtures.json')).json();
      7  const checks=[];const s=await createRuntimeSession(backend,false);
      8  const host={before:async()=>{},after:()=>{},read:async()=>'',write:()=>{},running:()=>{}};
      9  const load=async name=>{const f=fixtures[name];await s.load(new Uint8Array(f.bytes),f.hash);};
     10  try{
     11   await load('pure-number');
     12   assert((await s.run('root',[],'number','pure',host)).value==='42','pure evaluation');
     13   checks.push(backend+' pure evaluation');
     14   for(const name of ['version','version-effect']){
     15    await load(name);assert(await s.probeIO('root')===true,'inert probe recognizes supported v2 framing');
     16    let callbacks=0;const forbidden=()=>{callbacks++;throw Error('unexpected host callback');};let rejected=false;
     17    try{await s.run('root',[],'tree','io',{before:forbidden,after:forbidden,read:forbidden,write:forbidden,running:forbidden});}
     18    catch(error){assert(/IO version 2 requires a structured terminal host/.test(error.message),'wrong rejection: '+error.message);rejected=true;}
     19    assert(rejected&&callbacks===0,'legacy host accepted v2 or was invoked');
     20   }
     21   for(const name of ['unknown-version','padded-v1','v1-output']){
     22   await load(name);assert(!await s.probeIO('root'),'unknown/noncanonical version inert rejection');
     23   let unknownCallbacks=0;const never=()=>{unknownCallbacks++;throw Error('unknown version invoked host');};
     24   try{await s.run('root',[],'tree','io',{...host,selected:never,structured:{open:never,event:never,close:never}});throw Error('unknown version accepted');}
     25   catch(error){assert(/Unsupported tricuIO version/.test(error.message),'unknown version error');}
     26   assert(unknownCallbacks===0,'unknown framing reached callbacks');
     27   }
     28   checks.push(backend+' rejects v2 on legacy hosts before callbacks, including overlapping v1 output; no retry');
     29   await load('pure-number');
     30   assert((await s.run('root',[],'number','pure',host)).value==='42','reuse after rejection');
     31   checks.push(backend+' rejects historical v1 without callbacks; pure runtime remains reusable');
     32  }finally{s.dispose();}
     33  const compiler=await createRuntimeSession(backend,true);
     34  try{
     35   await compiler.compile('answer = 42');
     36   assert((await compiler.inspectDefinition('answer','number')).value==='42','pure compiler');
     37   checks.push(backend+' separately pinned pure compiler remains usable');
     38  }finally{compiler.dispose();}
     39  return {backend,checks};
     40 }