evaluate method
Future<DartBlockEvaluation>
evaluate(
- DartBlockProgram solutionCore,
- DartBlockProgram answerCore
override
Implementation
@override
Future<DartBlockEvaluation> evaluate(
DartBlockProgram solutionCore,
DartBlockProgram answerCore,
) async {
final solutionExecutor = DartBlockExecutor(solutionCore);
final answerExecutor = DartBlockExecutor(answerCore);
try {
await solutionExecutor.execute();
await answerExecutor.execute();
if (answerExecutor.thrownException != null) {
return DartBlockPrintEvaluation.init(
similarityThreshold,
[],
answerExecutor.thrownException,
);
}
} on DartBlockException catch (ex) {
return DartBlockPrintEvaluation.init(similarityThreshold, [], ex);
} on Exception catch (ex) {
return DartBlockPrintEvaluation.init(
similarityThreshold,
[],
DartBlockException.fromException(exception: ex),
);
}
List<(String, String?, DartBlockPrintEvaluationType, double?)>
printEvaluations = [];
for (final (index, line) in solutionExecutor.consoleOutput.indexed) {
if (index < answerExecutor.consoleOutput.length) {
final userLine = answerExecutor.consoleOutput[index];
final similarity = _similarity(line, userLine);
if (similarity >= similarityThreshold) {
printEvaluations.add((
line,
userLine,
DartBlockPrintEvaluationType.correct,
similarity,
));
} else {
printEvaluations.add((
line,
userLine,
DartBlockPrintEvaluationType.wrong,
similarity,
));
}
} else {
printEvaluations.add((
line,
null,
DartBlockPrintEvaluationType.missing,
null,
));
}
}
return DartBlockPrintEvaluation.init(
similarityThreshold,
printEvaluations,
null,
);
}