@informalsystems/quint
Version:
Core tool for the Quint specification language
77 lines • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const mocha_1 = require("mocha");
const chai_1 = require("chai");
const EffectVisitor_1 = require("../../src/effects/EffectVisitor");
const src_1 = require("../../src");
const parser_1 = require("../../src/effects/parser");
(0, mocha_1.describe)('walkEffect', () => {
const effect = (0, parser_1.parseEffectOrThrow)("(Read[v] & Update['x'], Temporal['y']) => (E1) => Update['x', 'y', v]");
(0, mocha_1.it)('finds concrete effects', () => {
class TestVisitor {
constructor() {
this.entered = [];
this.exited = [];
}
enterConcrete(e) {
this.entered.push(e);
}
exitConcrete(e) {
this.exited.push(e);
}
}
const enteredEffects = ["Read[v] & Update['x']", "Temporal['y']", "Update[v, 'x', 'y']"];
const exitedEffects = ["Read[v] & Update['x']", "Temporal['y']", "Update[v, 'x', 'y']"];
const visitor = new TestVisitor();
(0, EffectVisitor_1.walkEffect)(visitor, effect);
chai_1.assert.deepEqual(visitor.entered.map(src_1.effectToString), enteredEffects);
chai_1.assert.deepEqual(visitor.exited.map(src_1.effectToString), exitedEffects);
});
(0, mocha_1.it)('finds arrow effects', () => {
class TestVisitor {
constructor() {
this.entered = [];
this.exited = [];
}
enterArrow(e) {
this.entered.push(e);
}
exitArrow(e) {
this.exited.push(e);
}
}
const enteredEffects = [
"(Read[v] & Update['x'], Temporal['y']) => (E1) => Update[v, 'x', 'y']",
"(E1) => Update[v, 'x', 'y']",
];
const exitedEffects = [
"(E1) => Update[v, 'x', 'y']",
"(Read[v] & Update['x'], Temporal['y']) => (E1) => Update[v, 'x', 'y']",
];
const visitor = new TestVisitor();
(0, EffectVisitor_1.walkEffect)(visitor, effect);
chai_1.assert.deepEqual(visitor.entered.map(src_1.effectToString), enteredEffects);
chai_1.assert.deepEqual(visitor.exited.map(src_1.effectToString), exitedEffects);
});
(0, mocha_1.it)('finds variable effects', () => {
class TestVisitor {
constructor() {
this.entered = [];
this.exited = [];
}
enterVariable(e) {
this.entered.push(e);
}
exitVariable(e) {
this.exited.push(e);
}
}
const enteredEffects = ['E1'];
const exitedEffects = ['E1'];
const visitor = new TestVisitor();
(0, EffectVisitor_1.walkEffect)(visitor, effect);
chai_1.assert.deepEqual(visitor.entered.map(src_1.effectToString), enteredEffects);
chai_1.assert.deepEqual(visitor.exited.map(src_1.effectToString), exitedEffects);
});
});
//# sourceMappingURL=EffectVisitor.test.js.map