UNPKG

fauton

Version:

A library to test any finite automaton with arbitrary alphabets

51 lines (50 loc) 2.55 kB
"use strict"; 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;