Files

113 lines
4.3 KiB
TypeScript

import 'reflect-metadata';
import * as ESTree from 'estree';
import { assert } from 'chai';
import { TNumberNumericalExpressionData } from '../../../../src/types/analyzers/number-numerical-expression-analyzer/TNumberNumericalExpressionData';
import { NodeFactory } from '../../../../src/node/NodeFactory';
import { NumericalExpressionDataToNodeConverter } from '../../../../src/node/NumericalExpressionDataToNodeConverter';
describe('NumericalExpressionDataToNodeConverter', () => {
describe('convertIntegerNumberData', () => {
describe('Variant #1: base', () => {
const numberNumericalExpressionData: TNumberNumericalExpressionData = [
1, [-2, 3], 4
];
const expectedExpressionNode: ESTree.Expression = NodeFactory.binaryExpressionNode(
'+',
NodeFactory.binaryExpressionNode(
'+',
NodeFactory.literalNode(1),
NodeFactory.binaryExpressionNode(
'*',
NodeFactory.unaryExpressionNode(
'-',
NodeFactory.literalNode(2),
),
NodeFactory.literalNode(3)
),
),
NodeFactory.literalNode(4)
);
let expressionNode: ESTree.Expression;
before(() => {
expressionNode = NumericalExpressionDataToNodeConverter.convertIntegerNumberData(
numberNumericalExpressionData,
(number: number, isPositiveNumber: boolean): ESTree.Expression => {
const numberLiteralNode: ESTree.Literal = NodeFactory.literalNode(number);
return isPositiveNumber
? numberLiteralNode
: NodeFactory.unaryExpressionNode(
'-',
numberLiteralNode
);
}
);
});
it('should convert number numerical expression data to expression node', () => {
assert.deepEqual(expressionNode, expectedExpressionNode);
});
});
});
describe('convertFloatNumberData', () => {
describe('Variant #1: base', () => {
const integerNumberNumericalExpressionData: TNumberNumericalExpressionData = [
1, [-2, 3], 4
];
const decimalPart: number = 0.000000001;
const expectedExpressionNode: ESTree.Expression = NodeFactory.binaryExpressionNode(
'+',
NodeFactory.binaryExpressionNode(
'+',
NodeFactory.binaryExpressionNode(
'+',
NodeFactory.literalNode(1),
NodeFactory.binaryExpressionNode(
'*',
NodeFactory.unaryExpressionNode(
'-',
NodeFactory.literalNode(2),
),
NodeFactory.literalNode(3)
),
),
NodeFactory.literalNode(4)
),
NodeFactory.literalNode(decimalPart)
);
let expressionNode: ESTree.Expression;
before(() => {
expressionNode = NumericalExpressionDataToNodeConverter.convertFloatNumberData(
integerNumberNumericalExpressionData,
decimalPart,
(number: number, isPositiveNumber: boolean): ESTree.Expression => {
const numberLiteralNode: ESTree.Literal = NodeFactory.literalNode(number);
return isPositiveNumber
? numberLiteralNode
: NodeFactory.unaryExpressionNode(
'-',
numberLiteralNode
);
}
);
});
it('should convert number numerical expression data to expression node', () => {
assert.deepEqual(expressionNode, expectedExpressionNode);
});
});
});
});