@informalsystems/quint
Version:
Core tool for the Quint specification language
34 lines • 2.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mocha_1 = require("mocha");
const chai_1 = require("chai");
const MultipleUpdatesChecker_1 = require("../../src/effects/MultipleUpdatesChecker");
const parser_1 = require("../../src/effects/parser");
const src_1 = require("../../src");
const checker = new MultipleUpdatesChecker_1.MultipleUpdatesChecker();
(0, mocha_1.describe)('checkEffects', () => {
(0, mocha_1.it)('returns empty map for effects with no problems', () => {
const effects = [
(0, parser_1.parseEffectOrThrow)("(Read[v1]) => Read[v1] & Update['x']"),
(0, parser_1.parseEffectOrThrow)("(Update['x', 'y']) => Update['x', 'y']"),
].map(src_1.toScheme);
const errors = checker.checkEffects(effects);
chai_1.assert.isEmpty(errors, `Should find no errors, found: ${[...errors.values()].map(src_1.quintErrorToString)}`);
});
(0, mocha_1.it)('returns a map with errors for all problems', () => {
const effects = [
(0, parser_1.parseEffectOrThrow)("(Read[v1]) => Read[v1] & Update['x']"),
(0, parser_1.parseEffectOrThrow)("(Update['x', 'y']) => Update['x', 'y', 'y']"),
(0, parser_1.parseEffectOrThrow)("Update['z', 'z', 'z']"),
].map(src_1.toScheme);
const errors = checker.checkEffects(effects);
chai_1.assert.sameDeepMembers([...errors.entries()], [
[1n, { code: 'QNT202', message: 'Multiple updates of variable z', reference: 1n, data: {} }],
[2n, { code: 'QNT202', message: 'Multiple updates of variable z', reference: 2n, data: {} }],
[3n, { code: 'QNT202', message: 'Multiple updates of variable z', reference: 3n, data: {} }],
[4n, { code: 'QNT202', message: 'Multiple updates of variable y', reference: 4n, data: {} }],
[5n, { code: 'QNT202', message: 'Multiple updates of variable y', reference: 5n, data: {} }],
]);
});
});
//# sourceMappingURL=MultipleUpdatesChecker.test.js.map