UNPKG

@informalsystems/quint

Version:

Core tool for the Quint specification language

41 lines 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const mocha_1 = require("mocha"); const chai_1 = require("chai"); const substitutions_1 = require("../../src/effects/substitutions"); const parser_1 = require("../../src/effects/parser"); (0, mocha_1.describe)('compose', () => { (0, mocha_1.it)('applies the first substitutions to all values', () => { const s1 = [ { kind: 'entity', name: 'v1', value: { kind: 'concrete', stateVariables: [{ name: 'x', reference: 0n }] } }, ]; const s2 = [{ kind: 'effect', name: 'e1', value: (0, parser_1.parseEffectOrThrow)('Read[v1] & Update[v1]') }]; const result = (0, substitutions_1.compose)(s1, s2); result.map(r => chai_1.assert.sameDeepMembers(r, s1.concat([ { kind: 'effect', name: 'e1', value: { kind: 'concrete', components: [ { kind: 'read', entity: { kind: 'concrete', stateVariables: [{ name: 'x', reference: 0n }] } }, { kind: 'update', entity: { kind: 'concrete', stateVariables: [{ name: 'x', reference: 0n }] } }, ], }, }, ]))); chai_1.assert.isTrue(result.isRight()); }); }); (0, mocha_1.describe)('applySubstitution', () => { (0, mocha_1.it)('substitutes with transitivity', () => { const s = [ { kind: 'effect', name: 'e0', value: { kind: 'variable', name: 'e1' } }, { kind: 'effect', name: 'e1', value: { kind: 'variable', name: 'e2' } }, ]; const e = (0, parser_1.parseEffectOrThrow)('e0'); const result = (0, substitutions_1.applySubstitution)(s, e).unwrap(); chai_1.assert.deepEqual(result, (0, parser_1.parseEffectOrThrow)('e2')); }); }); //# sourceMappingURL=substitutions.test.js.map