public function testIntersectMultipleSets(array $A, array $B, array $C, array $A∩B∩C, Set $R)
{
$setA = new Set($A);
$setB = new Set($B);
$setC = new Set($C);
$expected = new Set($A∩B∩C);
$intersection = $setA->intersect($setB, $setC);
$intersection_array = $intersection->asArray();
$this->assertEQuals($R, $intersection);
$this->assertEquals($expected, $intersection);
$this->assertEquals(count($A∩B∩C), count($intersection));
foreach ($A∩B∩C as $member) {
$this->assertArrayHasKey("{$member}", $intersection_array);
$this->assertArrayHasKey("{$member}", $setA->asArray());
$this->assertArrayHasKey("{$member}", $setB->asArray());
$this->assertArrayHasKey("{$member}", $setC->asArray());
$this->assertContains("{$member}", $A);
$this->assertContains("{$member}", $B);
$this->assertContains("{$member}", $C);
}
foreach ($A∩B∩C as $_ => $value) {
if ($value instanceof Set) {
$this->assertEquals($value, $intersection_array["{$value}"]);
} else {
$this->assertContains("{$value}", $intersection_array);
}
}
}