fauton
Version:
A library to test any finite automaton with arbitrary alphabets
51 lines (50 loc) • 2.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.testAutomaton = void 0;
const utils_1 = require("../../../utils");
function testAutomaton(finiteAutomaton, finiteAutomatonTestInfo, writeStreams, inputStrings, postAutomatonTestCb) {
const { caseWriteStream, correctWriteStream, acceptedWriteStream, rejectedWriteStream, incorrectWriteStream, inputWriteStream, } = writeStreams;
for (let i = 0; i < inputStrings.length; i += 1) {
const inputString = inputStrings[i].replace('\r', '').replace('\n', '');
if (inputString.length !== 0) {
const automatonTestResult = finiteAutomaton.test(inputString);
const logicTestResult = finiteAutomaton.testLogic(inputString, automatonTestResult);
const isWrong = automatonTestResult !== logicTestResult;
const testResultString = `${automatonTestResult.toString().toUpperCase()[0]} ${logicTestResult.toString().toUpperCase()[0]} ${inputString} \n`;
if (!automatonTestResult && rejectedWriteStream) {
rejectedWriteStream.write(`${inputString}\n`);
}
else if (acceptedWriteStream) {
acceptedWriteStream.write(`${inputString}\n`);
}
if (!isWrong && correctWriteStream) {
if (automatonTestResult === false && logicTestResult === false) {
finiteAutomatonTestInfo.trueNegatives += 1;
}
else {
finiteAutomatonTestInfo.truePositives += 1;
}
correctWriteStream.write(testResultString);
}
else if (incorrectWriteStream) {
if (automatonTestResult && !logicTestResult) {
finiteAutomatonTestInfo.falsePositives += 1;
}
else {
finiteAutomatonTestInfo.falseNegatives += 1;
}
incorrectWriteStream.write(testResultString);
}
if (inputWriteStream) {
inputWriteStream.write(`${inputString}\n`);
}
const { withoutColors } = (0, utils_1.generateCaseMessage)(isWrong, inputString, automatonTestResult, logicTestResult);
if (caseWriteStream)
caseWriteStream.write(`${withoutColors}\n`);
if (postAutomatonTestCb) {
postAutomatonTestCb();
}
}
}
}
exports.testAutomaton = testAutomaton;