2023-12-26 14:46:46 +03:00
|
|
|
|
import { printTree } from '@/utils/codemirror';
|
|
|
|
|
|
|
2023-08-14 18:40:19 +03:00
|
|
|
|
import { parser } from './parser';
|
|
|
|
|
|
|
|
|
|
|
|
const testData = [
|
|
|
|
|
|
['a1', '[Expression[Local[Index]]]'],
|
|
|
|
|
|
['A1', '[Expression[Global]]'],
|
|
|
|
|
|
['∅', '[Expression[Literal]]'],
|
|
|
|
|
|
['Z', '[Expression[Literal]]'],
|
|
|
|
|
|
['1', '[Expression[Literal]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['12<41', '[Expression[LogicPredicate[Literal][<][Literal]]]'],
|
2023-08-14 18:40:19 +03:00
|
|
|
|
['12=41', '[Expression[LogicPredicate[Literal][=][Literal]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['ξ=ξ', '[Expression[LogicPredicate[Local][=][Local]]]'],
|
2023-08-14 18:40:19 +03:00
|
|
|
|
['0-5', '[Expression[BinaryOperation[Literal][-][Literal]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['¬2=2', '[Expression[LogicNegation[¬][LogicPredicate[Literal][=][Literal]]]]'],
|
2023-08-14 18:40:19 +03:00
|
|
|
|
['12+41', '[Expression[BinaryOperation[Literal][+][Literal]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['1+2*5', '[Expression[BinaryOperation[BinaryOperation[Literal][+][Literal]][*][Literal]]]'],
|
2023-08-14 18:40:19 +03:00
|
|
|
|
['a1∪Z', '[Expression[BinaryOperation[Local[Index]][∪][Literal]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['Pr1(X1)', '[Expression[TextFunctionExpression[TextFunction[ComplexIndex]][(][Global][)]]]'],
|
2023-09-05 23:26:20 +03:00
|
|
|
|
['Pr11(X1)', '[Expression[TextFunctionExpression[TextFunction[ComplexIndex]][(][Global][)]]]'],
|
|
|
|
|
|
['Pr11,21(X1)', '[Expression[TextFunctionExpression[TextFunction[ComplexIndex]][(][Global][)]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['pr1(S1)', '[Expression[TextFunctionExpression[TextFunction[ComplexIndex]][(][Global][)]]]'],
|
|
|
|
|
|
['Pr1,2(X1)', '[Expression[TextFunctionExpression[TextFunction[ComplexIndex]][(][Global][)]]]'],
|
|
|
|
|
|
['card(X1)', '[Expression[TextFunctionExpression[TextFunction][(][Global][)]]]'],
|
|
|
|
|
|
['red(X1)', '[Expression[TextFunctionExpression[TextFunction][(][Global][)]]]'],
|
|
|
|
|
|
['bool(X1)', '[Expression[TextFunctionExpression[TextFunction][(][Global][)]]]'],
|
|
|
|
|
|
['debool(X1)', '[Expression[TextFunctionExpression[TextFunction][(][Global][)]]]'],
|
|
|
|
|
|
['Fi1,2[ξ, ξ](ξ)', '[Expression[TextFunctionExpression[Filter[ComplexIndex]][[][Local][Local][]][(][Local][)]]]'],
|
2023-08-14 18:40:19 +03:00
|
|
|
|
['ℬℬ(X1)', '[Expression[Boolean[ℬ][Boolean[ℬ][(][Global][)]]]]'],
|
|
|
|
|
|
['P2[S1]', '[Expression[PredicateCall[Predicate][[][Global][]]]]'],
|
|
|
|
|
|
['[σ∈R1×R1] F6[σ]', '[Expression[FunctionDeclaration[[][Local][∈][BinaryOperation[Radical][×][Radical]][]][FunctionCall[Function][[][Local][]]]]]'],
|
2023-12-13 14:32:57 +03:00
|
|
|
|
['D{ξ∈red(S1) | ξ=ξ}', '[Expression[Declarative[PrefixD][{][Variable[Local]][∈][TextFunctionExpression[TextFunction][(][Global][)]][|][LogicPredicate[Local][=][Local]][}]]]'],
|
|
|
|
|
|
['I{(σ, γ) | σ:∈X1; γ:=F1[σ]; P1[σ, γ]}', '[Expression[Imperative[PrefixI][{][Tuple[(][Local][Local][)]][|][ImperativeBlocks[ImperativeBlocks[ImperativeBlocks[ImperativeIteration[Local][:∈][Global]]][;][ImperativeAssignment[Local][:=][FunctionCall[Function][[][Local][]]]]][;][ImperativeCondition[PredicateCall[Predicate][[][Local][Local][]]]]][}]]]'],
|
|
|
|
|
|
['R{ξ:=D1 | F1[ξ]≠∅ | ξ∪F1[ξ]}', '[Expression[Recursion[PrefixR][{][Variable[Local]][:=][Global][|][LogicPredicate[FunctionCall[Function][[][Local][]]][≠][Literal]][|][BinaryOperation[Local][∪][FunctionCall[Function][[][Local][]]]][}]]]'],
|
2023-09-04 21:41:40 +03:00
|
|
|
|
['∀ξ∈∅ 1=1', '[Expression[LogicQuantor[∀][QuantorVariable[Variable[Local]]][∈][Literal][LogicPredicate[Literal][=][Literal]]]]'],
|
|
|
|
|
|
['∀ξ1∈β (ξ1≠∅ & ∀ξ2∈β ξ1∩ξ2=∅)', '[Expression[LogicQuantor[∀][QuantorVariable[Variable[Local[Index]]]][∈][Local][(][LogicBinary[LogicPredicate[Local[Index]][≠][Literal]][&][LogicQuantor[∀][QuantorVariable[Variable[Local[Index]]]][∈][Local][LogicPredicate[BinaryOperation[Local[Index]][∩][Local[Index]]][=][Literal]]]][)]]]']
|
2023-08-14 18:40:19 +03:00
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
describe('Testing RSParser', () => {
|
|
|
|
|
|
it.each(testData)('Parse %p',
|
|
|
|
|
|
(input: string, expectedTree: string) => {
|
2023-09-05 23:26:20 +03:00
|
|
|
|
// NOTE: use strict parser to determine exact error position
|
2023-09-04 21:41:40 +03:00
|
|
|
|
// const tree = parser.configure({strict: true}).parse(input);
|
2023-08-14 18:40:19 +03:00
|
|
|
|
const tree = parser.parse(input);
|
|
|
|
|
|
expect(printTree(tree)).toBe(expectedTree);
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|