@informalsystems/quint
Version:
Core tool for the Quint specification language
41 lines • 1.92 kB
JavaScript
"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