open-index/open-npm huggingface dataset:
npm package: @0ria/constant-folding
Description: Constant Folding javascript code
Author: 0ria
Latest version: 1.1.4

[![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)
```