@0ria/constant-folding

1.1.4 • Public • Published

npm version CI for constant-folding

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:

const constantFolding = require('constant-folding');
const code = "[1, 2, 3].length"

console.log('Code after constant folding' + constantFolding(code));

The documentation of the function.

Examples

inputs:

['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:

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

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)

Package Sidebar

Install

npm i @0ria/constant-folding

Weekly Downloads

1

Version

1.1.4

License

Unlicense

Unpacked Size

1.1 MB

Total Files

49

Last publish

Collaborators

  • 0ria