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);
final List<(DartBlockVariableDefinition, String?)>
missingVariableDefinitions = [];
final List<(DartBlockVariableDefinition, String?, DartBlockDataType)>
wrongVariableDefinitionTypes = [];
final List<(DartBlockVariableDefinition, String?, String?)>
wrongVariableDefinitionValues = [];
final List<(DartBlockVariableDefinition, String?)>
correctVariableDefinitions = [];
try {
await solutionExecutor.execute();
await answerExecutor.execute();
final solutionMemory = solutionExecutor.environment.getAllValues(
solutionExecutor,
);
if (ignoreVariablesStartingWithUnderscore) {
solutionMemory.removeWhere((key, value) => key.name.startsWith('_'));
}
final answerMemory = answerExecutor.environment.getAllValues(
answerExecutor,
);
for (final solutionEntry in solutionMemory.entries) {
if (answerMemory.containsKey(solutionEntry.key)) {
final answerMemoryKey = answerMemory.keys.firstWhere(
(element) => element == solutionEntry.key,
);
if (answerMemoryKey.dataType == solutionEntry.key.dataType) {
final answerValue = answerMemory[solutionEntry.key];
if (answerValue == solutionEntry.value) {
correctVariableDefinitions.add((
solutionEntry.key,
solutionEntry.value,
));
} else {
wrongVariableDefinitionValues.add((
solutionEntry.key,
solutionEntry.value,
answerValue,
));
}
} else {
wrongVariableDefinitionTypes.add((
solutionEntry.key,
solutionEntry.value,
answerMemoryKey.dataType,
));
}
} else {
missingVariableDefinitions.add((
solutionEntry.key,
solutionEntry.value,
));
}
}
} on DartBlockException catch (ex) {
return DartBlockEnvironmentEvaluation.init(
missingVariableDefinitions,
wrongVariableDefinitionTypes,
wrongVariableDefinitionValues,
correctVariableDefinitions,
ex,
);
} on Exception catch (ex) {
return DartBlockEnvironmentEvaluation.init(
missingVariableDefinitions,
wrongVariableDefinitionTypes,
wrongVariableDefinitionValues,
correctVariableDefinitions,
DartBlockException.fromException(exception: ex),
);
}
return DartBlockEnvironmentEvaluation.init(
missingVariableDefinitions,
wrongVariableDefinitionTypes,
wrongVariableDefinitionValues,
correctVariableDefinitions,
answerExecutor.thrownException,
);
}