-
Jenny Zhang authoredJenny Zhang authored
ast.test.js 4.22 KiB
const { parse } = require("../../src/utils/parser.js");
const ast = require('../../src/utils/ast.js');
// Expression without precedence
test('astToString could work correctly for symbol expression', () => {
inputString = "A";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for not expression', () => {
inputString = "!A";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for and expression', () => {
inputString = "A&B";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for or expression', () => {
inputString = "A||B";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for imply expression', () => {
inputString = "A->B";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for complex expression', () => {
inputString = "!A->B||C&D";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
// precedence tests
test('astToString could work correctly for complex expression', () => {
inputString = "!A->(B||C)&D";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for complex expression', () => {
inputString = "!(A->B||C)&D";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for complex expression', () => {
inputString = "(!A->B)||C&D";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
test('astToString could work correctly for complex expression', () => {
inputString = "!(A->B||C&D)";
const input = parse(inputString);
const output = ast.astToString(input);
expect(output).toEqual(inputString);
});
// astToLaTeX test for expression
test('astToLaTeX could work correctly for and expression', () => {
const inputString = "A & B";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\mathit{A} \\land \\mathit{B}");
});
test('astToLaTeX could work correctly for or expression', () => {
const inputString = "A || B";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\mathit{A} \\lor \\mathit{B}");
});
test('astToLaTeX could work correctly for negation expression', () => {
const inputString = "!A";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\neg \\mathit{A}");
});
test('astToLaTeX could work correctly for implication expression', () => {
const inputString = "A -> B";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\mathit{A} \\rightarrow \\mathit{B}");
});
test('astToLaTeX could work correctly for true and false expression', () => {
const inputString = "true & false";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\top \\land \\bot");
});
test('astToLaTeX could work correctly for mixed logical expression', () => {
const inputString = "P -> Q || !R";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\mathit{P} \\rightarrow \\mathit{Q} \\lor \\neg \\mathit{R}");
});
test('astToLaTeX could work correctly for complex expression', () => {
const inputString = "X & (Y -> Z)";
const input = parse(inputString);
const output = ast.astToLaTeX(input);
expect(output).toEqual("\\mathit{X} \\land (\\mathit{Y} \\rightarrow \\mathit{Z})");
});