From 9a7df56a75c5f85c93c9bf94cdcd23fae43c59e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Borys=20=C5=BBmuda?= Date: Sat, 28 Sep 2024 09:44:20 +0200 Subject: [PATCH] feat: Added `Set::difference()` method --- src/JavaScript/Set.php | 13 +++++++++++++ tests/Unit/SetTest.php | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/JavaScript/Set.php b/src/JavaScript/Set.php index 837f863..653b6c0 100644 --- a/src/JavaScript/Set.php +++ b/src/JavaScript/Set.php @@ -112,6 +112,19 @@ public function delete(mixed $value): bool return false; } + /** + * Returns a new Set containing elements in given Set. + * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/difference + * + * @param \Rudashi\JavaScript\Set $other + * + * @return \Rudashi\JavaScript\Set + */ + public function difference(Set $other): Set + { + return new Set(array_diff($this->items, $other->items)); + } + /** * Returns Set value of each element as SetIterator. * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries diff --git a/tests/Unit/SetTest.php b/tests/Unit/SetTest.php index d0b86a5..c43cc43 100644 --- a/tests/Unit/SetTest.php +++ b/tests/Unit/SetTest.php @@ -276,6 +276,44 @@ }); }); +describe('difference', function () { + test('diff values', function () { + $odds = new Set([1, 3, 5, 7, 9]); + $squares = new Set([1, 4, 9]); + + expect($odds->difference($squares)) + ->toBeInstanceOf(Set::class) + ->toMatchArray([3, 5, 7]); + }); + + test('returns empty Set', function () { + $a = new Set([1, 2, 3, 4]); + $b = new Set([2, 4, 3, 2]); + + expect($b->difference($a)) + ->toBeInstanceOf(Set::class) + ->toMatchArray([]); + }); + + test('`a` minus `b`', function () { + $a = new Set([1, 2, 3, 4]); + $b = new Set([5, 4, 3, 2]); + + expect($a->difference($b)) + ->toBeInstanceOf(Set::class) + ->toMatchArray([1]); + }); + + test('`b` minus `a`', function () { + $a = new Set([1, 2, 3, 4]); + $b = new Set([5, 4, 3, 2]); + + expect($b->difference($a)) + ->toBeInstanceOf(Set::class) + ->toMatchArray([5]); + }); +}); + describe('entries', function () { it('returns new SetIterator', function () { $set = new Set(['foo', 'bar']);