public function validateCanHandleRecursiveTargetsWithoutEndlessLooping()
{
$classNameA = 'B' . md5(uniqid(mt_rand(), true));
eval('class ' . $classNameA . '{ public $b; }');
$classNameB = 'B' . md5(uniqid(mt_rand(), true));
eval('class ' . $classNameB . '{ public $a; }');
$A = new $classNameA();
$B = new $classNameB();
$A->b = $B;
$B->a = $A;
$aValidator = new GenericObjectValidator([]);
$bValidator = new GenericObjectValidator([]);
$aValidator->addPropertyValidator('b', $bValidator);
$bValidator->addPropertyValidator('a', $aValidator);
$this->assertFalse($aValidator->validate($A)->hasErrors());
}