Author: Elliot Levin (elliot@aanet.com.au)
Inheritance: implements IteratorAggregate, implements ArrayAccess
 public function __construct(Object\PropertyData $PropertyData)
 {
     parent::__construct($PropertyData->GetEntityType());
     foreach ($PropertyData as $PropertyIdentifier => $Value) {
         $Property = $PropertyData->GetProperty($PropertyIdentifier);
         $this->AddPredicate(Expression::BinaryOperation(Expression::Property($Property), Operators\Binary::Identity, Expression::Constant($Value)));
     }
 }
 /**
  * @depends testAddedValuesAreSet
  */
 public function testEquivalentPropertyDataMatches()
 {
     $SameValue1 = [1, 2, 3, 4];
     $SameValue2 = "I am another value";
     $OtherPropertyData = $this->MakePropertyDataMock([$this->Property1, $this->Property2]);
     $this->PropertyData[$this->Property1] = $SameValue1;
     $OtherPropertyData[$this->Property1] = $SameValue1;
     $this->PropertyData[$this->Property2] = $SameValue2;
     $OtherPropertyData[$this->Property2] = $SameValue2;
     $this->assertTrue($this->PropertyData->Matches($OtherPropertyData));
     $this->assertTrue($OtherPropertyData->Matches($this->PropertyData));
 }