public function testIsImmutable()
{
$quantifier = new MutableValue('q0');
$firstMember = new MutableValue('f0');
$secondMember = new MutableValue('s0');
$value = new OptionalValue($quantifier, $firstMember, $secondMember);
// Mutate injected values
$quantifier->setValue('q1');
$firstMember->setValue('f1');
$secondMember->setValue('s1');
// Mutate returned values
$value->getQuantifier()->setValue('q2');
$value->getFirstMember()->setValue('f2');
$value->getSecondMember()->setValue('s2');
$this->assertNotSame(new MutableValue('q0'), $value->getQuantifier());
$this->assertNotSame(new MutableValue('f0'), $value->getFirstMember());
$this->assertNotSame(new MutableValue('s0'), $value->getSecondMember());
$this->assertNotSame([new MutableValue('q0'), new MutableValue('f0'), new MutableValue('s0')], $value->getValue());
}