public function testSet()
{
$set = new Set(1, 2);
$this->assertCount(2, $set);
$this->assertTrue($set->contains(1));
$this->assertTrue($set->contains(2));
$set->add('hello');
$this->assertCount(3, $set);
$this->assertTrue($set->contains('hello'));
$set[] = 'world';
$this->assertCount(4, $set);
$this->assertTrue($set->contains('world'));
$set->update(['hello']);
$this->assertCount(4, $set);
$set->delete('hello');
$this->assertCount(3, $set);
$this->assertFalse($set->contains('hello'));
$difference = $set->difference([1, 2, 3]);
$this->assertEquals(['world'], $difference->toArray());
$difference = $set->difference(Set::fromArray([1, 2, 3]));
$this->assertEquals(['world'], $difference->toArray());
$intersection = $set->intersection([1, 2, 3]);
$this->assertEquals([1, 2], $intersection->toArray());
$intersection = $set->intersection(Set::fromArray([1, 2, 3]));
$this->assertEquals([1, 2], $intersection->toArray());
$union = $set->union([1, 2, 3]);
$this->assertEquals([1, 2, 3, 'world'], $union->toArray(), '', 0, 10, true);
$union = $set->union(Set::fromArray([1, 2, 3]));
$this->assertEquals([1, 2, 3, 'world'], $union->toArray(), '', 0, 10, true);
$this->assertTrue($set->isSubset($union));
$this->assertFalse($set->isSubset([1, 2, 3, 4]));
$this->assertFalse($set->isSubset(Set::fromArray([1, 2, 3, 4])));
$this->assertTrue($set->isSuperset([1, 2]));
$this->assertFalse($set->isSuperset(['hello', 'world']));
$this->assertTrue($set->isSuperset(Set::fromArray([1, 2])));
$this->assertFalse($set->isSuperset(Set::fromArray(['hello', 'world'])));
$this->assertFalse($set->isEmpty());
$set->clear();
$this->assertTrue($set->isEmpty());
$set = set(1, 2);
$this->assertCount(2, $set);
$this->assertTrue($set->contains(1));
$this->assertTrue($set->contains(2));
$set[] = 2;
$set[] = 3;
$this->assertCount(3, $set);
$this->assertTrue($set->contains(1));
$this->assertTrue($set->contains(2));
$this->assertTrue($set->contains(3));
$set = set();
$this->assertEquals($set->toArray(), array());
}