UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

44 lines 4.33 kB
import { Frame, FrameNote, FrameString, NilContext } from '../frames.js'; import { HCEval } from './hc-eval.js'; export class HCTest extends Frame { constructor(out) { super(NilContext); this.out = out; this.actual = Frame.missing; this.n = { total: 0, pass: 0, fail: 0 }; } apply(argument, parameter = Frame.nil) { const source = this.get(HCEval.SOURCE); const expected = this.get(HCEval.EXPECT); if (!this.actual.is.missing && !expected.is.missing) { const result = this.performTest(expected, this.actual, source); this.actual = Frame.missing; return this.out.call(result, parameter); } if (!source.is.missing) { const actual = argument.toString(); this.actual = new FrameString(actual); } return argument; } performTest(expected, actual, source) { const result = this.assertEqual(expected.toString(), actual.toString(), source.toString()); this.set(HCEval.SOURCE, Frame.missing); this.set(HCEval.EXPECT, Frame.missing); this.actual = Frame.missing; return result; } assertEqual(expected, actual, source) { const base = source + ' ?' + expected; this.n.total += 1; if (expected === actual) { this.n.pass += 1; return FrameNote.pass(base, JSON.stringify(this.n)); } else { this.n.fail += 1; return FrameNote.fail(base + ' !' + actual, JSON.stringify(this.n)); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGMtdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leGVjdXRlL2hjLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBSXJDLE1BQU0sT0FBTyxNQUFPLFNBQVEsS0FBSztJQUkvQixZQUF1QixHQUFVO1FBQy9CLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQURJLFFBQUcsR0FBSCxHQUFHLENBQU87UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQ3pDLENBQUM7SUFFTSxLQUFLLENBQUUsUUFBZSxFQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRztRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV4QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUE7WUFDM0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7U0FDeEM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDdEM7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRU0sV0FBVyxDQUFFLFFBQWUsRUFBRSxNQUFhLEVBQUUsTUFBYTtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDMUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUMzQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxXQUFXLENBQUUsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsTUFBYztRQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQTtRQUVyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7UUFDakIsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDcEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQTtZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNwRTtJQUNILENBQUM7Q0FDRiJ9