@@ -112,20 +112,9 @@ public function testGenerateMultipleShuffledFromLimitedUnique(): void {
112112 self ::assertTrue (
113113 $ ipVec == self ::decToBitArray (3 , 32 ) ||
114114 $ ipVec === self ::decToBitArray (4 , 32 ),
115- 'sample has a unique IP '
115+ 'Sample must have an unique IP '
116116 );
117117 }
118-
119- $ positives = new Unlabeled ([
120- array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
121- array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (1 , 32 )),
122- array_merge (self ::decToBitArray (3 , 16 ), self ::decToBitArray (1 , 32 )),
123- array_merge (self ::decToBitArray (4 , 16 ), self ::decToBitArray (1 , 32 )),
124- ]);
125-
126- $ result = $ this ->generator ->generateShuffledFromPositiveSamples ($ positives , 5 );
127-
128- self ::assertCount (5 , $ result );
129118 }
130119
131120 /**
@@ -154,11 +143,30 @@ public function testGenerateMultipleShuffledFromUniquesOnly(): void {
154143 self ::assertTrue (
155144 $ ipVec === self ::decToBitArray (1 , 32 ) ||
156145 $ ipVec === self ::decToBitArray (2 , 32 ),
157- 'Sample has an unique IP '
146+ 'Sample must have an unique IP '
158147 );
159148 }
160149 }
161150
151+ /**
152+ * Generating shuffled samples isn't possible when no user has an unique IP.
153+ * In that case, we have to return an empty Labeled() object as merging will
154+ * fail otherwise. See GitHub issue #860 for more.
155+ * @return void
156+ */
157+ public function testGenerateShuffledFromDuplicatesOnly (): void {
158+ $ positives = new Unlabeled ([
159+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
160+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (1 , 32 )),
161+ array_merge (self ::decToBitArray (3 , 16 ), self ::decToBitArray (1 , 32 )),
162+ array_merge (self ::decToBitArray (4 , 16 ), self ::decToBitArray (1 , 32 )),
163+ ]);
164+
165+ $ result = $ this ->generator ->generateShuffledFromPositiveSamples ($ positives , 4 );
166+
167+ self ::assertCount (0 , $ result , 'Returned sample must be empty ' );
168+ }
169+
162170 /**
163171 * @return int[]
164172 */
0 commit comments