UNPKG

@informalsystems/quint

Version:

Core tool for the Quint specification language

77 lines 3.1 kB
"use strict"; 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