@@ -745,6 +745,60 @@ public function testDiffAssocUsing()
745745 $ this ->assertEquals (['b ' => 'brown ' , 'c ' => 'blue ' , 'red ' ], $ c1 ->diffAssocUsing ($ c2 , 'strcasecmp ' )->all ());
746746 }
747747
748+ public function testDuplicates ()
749+ {
750+ $ duplicates = Collection::make ([1 , 2 , 1 , 'laravel ' , null , 'laravel ' , 'php ' , null ])->duplicates ()->all ();
751+ $ this ->assertSame ([2 => 1 , 5 => 'laravel ' , 7 => null ], $ duplicates );
752+
753+ // does loose comparison
754+ $ duplicates = Collection::make ([2 , '2 ' , [], null ])->duplicates ()->all ();
755+ $ this ->assertSame ([1 => '2 ' , 3 => null ], $ duplicates );
756+
757+ // works with mix of primitives
758+ $ duplicates = Collection::make ([1 , '2 ' , ['laravel ' ], ['laravel ' ], null , '2 ' ])->duplicates ()->all ();
759+ $ this ->assertSame ([3 => ['laravel ' ], 5 => '2 ' ], $ duplicates );
760+
761+ // works with mix of objects and primitives **excepts numbers**.
762+ $ expected = new Collection (['laravel ' ]);
763+ $ duplicates = Collection::make ([new Collection (['laravel ' ]), $ expected , $ expected , [], '2 ' , '2 ' ])->duplicates ()->all ();
764+ $ this ->assertSame ([1 => $ expected , 2 => $ expected , 5 => '2 ' ], $ duplicates );
765+ }
766+
767+ public function testDuplicatesWithKey ()
768+ {
769+ $ items = [['framework ' => 'vue ' ], ['framework ' => 'laravel ' ], ['framework ' => 'laravel ' ]];
770+ $ duplicates = Collection::make ($ items )->duplicates ('framework ' )->all ();
771+ $ this ->assertSame ([2 => 'laravel ' ], $ duplicates );
772+ }
773+
774+ public function testDuplicatesWithCallback ()
775+ {
776+ $ items = [['framework ' => 'vue ' ], ['framework ' => 'laravel ' ], ['framework ' => 'laravel ' ]];
777+ $ duplicates = Collection::make ($ items )->duplicates (function ($ item ) {
778+ return $ item ['framework ' ];
779+ })->all ();
780+ $ this ->assertSame ([2 => 'laravel ' ], $ duplicates );
781+ }
782+
783+ public function testDuplicatesWithStrict ()
784+ {
785+ $ duplicates = Collection::make ([1 , 2 , 1 , 'laravel ' , null , 'laravel ' , 'php ' , null ])->duplicatesStrict ()->all ();
786+ $ this ->assertSame ([2 => 1 , 5 => 'laravel ' , 7 => null ], $ duplicates );
787+
788+ // does strict comparison
789+ $ duplicates = Collection::make ([2 , '2 ' , [], null ])->duplicatesStrict ()->all ();
790+ $ this ->assertSame ([], $ duplicates );
791+
792+ // works with mix of primitives
793+ $ duplicates = Collection::make ([1 , '2 ' , ['laravel ' ], ['laravel ' ], null , '2 ' ])->duplicatesStrict ()->all ();
794+ $ this ->assertSame ([3 => ['laravel ' ], 5 => '2 ' ], $ duplicates );
795+
796+ // works with mix of primitives, objects, and numbers
797+ $ expected = new Collection (['laravel ' ]);
798+ $ duplicates = Collection::make ([new Collection (['laravel ' ]), $ expected , $ expected , [], '2 ' , '2 ' ])->duplicatesStrict ()->all ();
799+ $ this ->assertSame ([2 => $ expected , 5 => '2 ' ], $ duplicates );
800+ }
801+
748802 public function testEach ()
749803 {
750804 $ c = new Collection ($ original = [1 , 2 , 'foo ' => 'bar ' , 'bam ' => 'baz ' ]);
0 commit comments