UNPKG

@informalsystems/quint

Version:

Core tool for the Quint specification language

69 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const idGenerator_1 = require("../../src/idGenerator"); const quintParserFrontend_1 = require("../../src/parsing/quintParserFrontend"); const textUtils_1 = require("../textUtils"); const aliasInliner_1 = require("../../src/types/aliasInliner"); const IRprinting_1 = require("../../src/ir/IRprinting"); const quintAnalyzer_1 = require("../../src/quintAnalyzer"); function inlineModule(text) { const idGen = (0, idGenerator_1.newIdGenerator)(); const fake_path = { normalizedPath: 'fake_path', toSourceName: () => 'fake_path' }; const { modules, table, errors } = (0, quintParserFrontend_1.parse)(idGen, 'fake_location', fake_path, text); chai_1.assert.isEmpty(errors); const [analysisErrors, analysisOutput] = (0, quintAnalyzer_1.analyzeModules)(table, modules); chai_1.assert.isEmpty(analysisErrors); return (0, aliasInliner_1.inlineTypeAliases)(modules, table, analysisOutput); } describe('inlineAliases', () => { it('inlines aliases in a simple module', () => { const quintModule = `module A { type MY_ALIAS = int var x: MY_ALIAS val a = x }`; const { modules, table, analysisOutput } = inlineModule(quintModule); const expectedModule = (0, textUtils_1.dedent)(`module A { | type MY_ALIAS = int | var x: int | val a = x |}`); chai_1.assert.deepEqual((0, IRprinting_1.moduleToString)(modules[0]), expectedModule); chai_1.assert.deepEqual(table.get(5n)?.typeAnnotation?.kind, 'int'); chai_1.assert.deepEqual(analysisOutput.types.get(4n)?.type.kind, 'int'); }); it('handles nested aliases', () => { const quintModule = `module A { type MY_ALIAS = int type MY_OTHER_ALIAS = MY_ALIAS var x: MY_OTHER_ALIAS }`; const { modules } = inlineModule(quintModule); const expectedModule = (0, textUtils_1.dedent)(`module A { | type MY_ALIAS = int | type MY_OTHER_ALIAS = int | var x: int |}`); chai_1.assert.deepEqual((0, IRprinting_1.moduleToString)(modules[0]), expectedModule); }); it('handles nested sum types constructors', () => { const quintModule = `module A { type T1 = B | C type T2 = Some(T1) | None var x: T2 }`; const { modules } = inlineModule(quintModule); const expectedModule = (0, textUtils_1.dedent)(`module A { | type T1 = (B | C) | val C: (B | C) = variant("C", Tup()) | type T2 = (Some((B | C)) | None) | val B: (B | C) = variant("B", Tup()) | def Some: ((B | C)) => (Some((B | C)) | None) = ((__SomeParam) => variant("Some", __SomeParam)) | val None: (Some((B | C)) | None) = variant("None", Tup()) | var x: (Some((B | C)) | None) |}`); chai_1.assert.deepEqual((0, IRprinting_1.moduleToString)(modules[0]), expectedModule); }); }); //# sourceMappingURL=aliasInliner.test.js.map