UNPKG

@0ria/constant-folding

Version:
113 lines (86 loc) 3.02 kB
[![npm version](https://badge.fury.io/js/@0ria%2Fconstant-folding.svg)](https://badge.fury.io/js/@0ria%2Fconstant-folding) [![CI for constant-folding](https://github.com/ULL-ESIT-PL-2122/constant-folding-module-daniel-oria-martin-alu0101027340/actions/workflows/nodejs.yml/badge.svg)](https://github.com/ULL-ESIT-PL-2122/constant-folding-module-daniel-oria-martin-alu0101027340/actions/workflows/nodejs.yml) ## constant-folding ## Author 0ria - alu0101027340 ## Installation npm install @0ria/constant-folding ## Usage as executable: Default output: ```npx cf inputFile.js``` Desired output: ```npx xf inputFile.js -o outputFile.js``` ## Usage from code: ```javascript const constantFolding = require('constant-folding'); const code = "[1, 2, 3].length" console.log('Code after constant folding' + constantFolding(code)); ``` [The documentation of the function](https://github.com/ULL-ESIT-PL-2122/constant-folding-module-daniel-oria-martin-alu0101027340). ## Examples inputs: ```javascript ['a', 'b', 'c'].concat(['d', 'e'], 'f', 'g', ['h']); ["a", "b", "c"].join(); ["a", "b", "c"].join('&'); [1, 2, 3].length; [1, 2, 3][2 - 1]; [1, 2, 3].shift(); [1, 2, 3].slice(0, 1 + 1); ['a', 'b', 'c'].pop(); ['a', 'b', 'c'].reverse(); ``` outputs: ```javascript a, b, c, d, e, f, g, h; a, b, c; a & b & c; 3; 2; 1; 1, 2; c; c, b, a; ``` ## Tests To run the tests create a directory test with a script containing tests and run npm test ```javascript const constantFolding = require('@0ria/constant-folding'); require("chai").should(); const checks = [ { input: "['a', 'b', 'c'].concat(['d', 'e'], 'f', 'g', ['h']);", result: "a, b, c, d, e, f, g, h;"}, { input: '["a", "b", "c"].join();', result: "a, b, c;"}, { input: '["a", "b", "c"].join("&");', result: "a & b & c;"}, { input: '[1, 2, 3].length;', result: "3;"}, { input: '[1, 2, 3][2 - 1]', result: "2;"}, { input: '[1, 2, 3].shift();', result: "1;"}, { input: '[1, 2, 3].slice(0, 1 + 1);', result: "1, 2;"}, { input: '["a", "b", "c"].pop();', result: "c;"}, { input: '["a", "b", "c"].reverse();', result: "c, b, a;"}, { input: '[7, 2*3, 9/3].reverse()', result: "3, 6, 7;"}, { input: 'a = 2*3*4', result: 'a = 24;'} ]; describe("Testing constant folding operations", () => { for (let c of checks) { it(`Test ${c.input} = ${c.result}`, () => { constantFolding(c.input).should.equal(c.result); }) } }) ``` Test output: ``` Testing constant folding operations ✔ Test ['a', 'b', 'c'].concat(['d', 'e'], 'f', 'g', ['h']); = a, b, c, d, e, f, g, h; ✔ Test ["a", "b", "c"].join(); = a, b, c; ✔ Test ["a", "b", "c"].join("&"); = a & b & c; ✔ Test [1, 2, 3].length; = 3; ✔ Test [1, 2, 3][2 - 1] = 2; ✔ Test [1, 2, 3].shift(); = 1; ✔ Test [1, 2, 3].slice(0, 1 + 1); = 1, 2; ✔ Test ["a", "b", "c"].pop(); = c; ✔ Test ["a", "b", "c"].reverse(); = c, b, a; ✔ Test [7, 2*3, 9/3].reverse() = 3, 6, 7; ✔ Test a = 2*3*4 = a = 24; 11 passing (45ms) ```