private function evaluate($constraint, $received, string $description): bool
    {
        if (function_exists('bovigo\assert\assertThat')) {
            return \bovigo\assert\assertThat(
                    $received,
                    $this->predicateFor($constraint),
                    $description
            );
        }

        if (class_exists('\PHPUnit\Framework\Constraint\IsEqual')) {
            return $this->evaluateWithPhpUnit($constraint, $received, $description);
        }

        if (class_exists('\unittest\TestCase')) {
            return $this->evaluateWithXpFrameworkCore($constraint, $received, $description);
        }

        throw new \RuntimeException('Neither bovigo/assert, PHPUnit nor xp-framework/unittest found, can not perform argument verification');
    }