run-file.js improvements
This commit is contained in:
		
							parent
							
								
									43635bd39b
								
							
						
					
					
						commit
						fd4137b596
					
				| 
						 | 
				
			
			@ -1,38 +0,0 @@
 | 
			
		|||
#!/usr/bin/env node
 | 
			
		||||
const s = require("@quri/squiggle-lang");
 | 
			
		||||
const fs = require("fs");
 | 
			
		||||
 | 
			
		||||
const measure = (cb, times = 1) => {
 | 
			
		||||
  const t1 = new Date();
 | 
			
		||||
 | 
			
		||||
  for (let i = 1; i <= times; i++) {
 | 
			
		||||
    cb();
 | 
			
		||||
  }
 | 
			
		||||
  const t2 = new Date();
 | 
			
		||||
  return (t2 - t1) / 1000;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const project = s.SqProject.create();
 | 
			
		||||
const sampleCount = process.env.SAMPLE_COUNT;
 | 
			
		||||
if (sampleCount) {
 | 
			
		||||
  project.setEnvironment({
 | 
			
		||||
    sampleCount,
 | 
			
		||||
    xyPointLength: sampleCount,
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const src = fs.readFileSync(process.argv[2], "utf-8");
 | 
			
		||||
if (!src) {
 | 
			
		||||
  throw new Error("Expected src");
 | 
			
		||||
}
 | 
			
		||||
console.log(`Running ${src}`);
 | 
			
		||||
project.setSource("a", src);
 | 
			
		||||
 | 
			
		||||
const t = measure(() => project.run("a"));
 | 
			
		||||
console.log(`Time: ${t}`);
 | 
			
		||||
 | 
			
		||||
const result = project.getResult("a");
 | 
			
		||||
console.log("Result:", result.tag, result.value.toString());
 | 
			
		||||
 | 
			
		||||
const bindings = project.getBindings("a");
 | 
			
		||||
console.log("Bindings:", bindings.toString());
 | 
			
		||||
							
								
								
									
										60
									
								
								packages/squiggle-lang/scripts/run-file.mjs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								packages/squiggle-lang/scripts/run-file.mjs
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
#!/usr/bin/env node
 | 
			
		||||
import { SqProject } from "@quri/squiggle-lang";
 | 
			
		||||
import fs from "fs";
 | 
			
		||||
 | 
			
		||||
import { Command } from "commander";
 | 
			
		||||
 | 
			
		||||
const measure = (cb, times = 1) => {
 | 
			
		||||
  const t1 = new Date();
 | 
			
		||||
 | 
			
		||||
  for (let i = 1; i <= times; i++) {
 | 
			
		||||
    cb();
 | 
			
		||||
  }
 | 
			
		||||
  const t2 = new Date();
 | 
			
		||||
  return (t2 - t1) / 1000;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const red = (s) => `\x1b[31m${s}\x1b[0m`;
 | 
			
		||||
const green = (s) => `\x1b[32m${s}\x1b[0m`;
 | 
			
		||||
 | 
			
		||||
const program = new Command();
 | 
			
		||||
 | 
			
		||||
program.option("-t, --time");
 | 
			
		||||
program.option("-o, --output");
 | 
			
		||||
program.arguments("<string>");
 | 
			
		||||
 | 
			
		||||
const options = program.parse(process.argv);
 | 
			
		||||
 | 
			
		||||
const project = SqProject.create();
 | 
			
		||||
const sampleCount = process.env.SAMPLE_COUNT;
 | 
			
		||||
if (sampleCount) {
 | 
			
		||||
  project.setEnvironment({
 | 
			
		||||
    sampleCount: Number(sampleCount),
 | 
			
		||||
    xyPointLength: Number(sampleCount),
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const src = fs.readFileSync(program.args[0], "utf-8");
 | 
			
		||||
if (!src) {
 | 
			
		||||
  throw new Error("Expected src");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
project.setSource("main", src);
 | 
			
		||||
const t = measure(() => project.run("main"));
 | 
			
		||||
 | 
			
		||||
const bindings = project.getBindings("main");
 | 
			
		||||
const result = project.getResult("main");
 | 
			
		||||
 | 
			
		||||
if (options.output) {
 | 
			
		||||
  console.log("Result:", result.tag, result.value.toString());
 | 
			
		||||
  console.log("Bindings:", bindings.toString());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (options.time) {
 | 
			
		||||
  console.log(
 | 
			
		||||
    "Time:",
 | 
			
		||||
    String(t),
 | 
			
		||||
    result.tag === "Error" ? red(result.tag) : green(result.tag),
 | 
			
		||||
    result.tag === "Error" ? result.value.toString() : ""
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user