private function assertEvaluatesTo(callable $function, $value, $useNativeEquals = false, $namespace = __NAMESPACE__, $testSerialize = false)
{
$interpreter = $this->verifyImplementation();
$reflection = $interpreter->getReflection($function);
$structure = $interpreter->getStructure($reflection);
$bodyExpressions = $structure->getBodyExpressions();
$this->assertCount(1, $bodyExpressions);
$scope = $reflection->getScope();
$evaluationContext = $scope->asEvaluationContext([], $namespace);
$evaluator = $bodyExpressions[0]->asEvaluator($evaluationContext);
$evaluatedValues = [];
$evaluatedValues[] = $evaluator->evaluate();
if ($testSerialize) {
$evaluatedValues[] = unserialize(serialize($evaluator))->evaluate();
}
foreach ($evaluatedValues as $evaluatedValue) {
if ($useNativeEquals) {
$this->assertTrue($value == $evaluatedValue);
} else {
$this->assertEquals($value, $evaluatedValue);
}
}
}