@@ -144,6 +144,37 @@ public function testGenerateMultipleShuffledFromLimitedUnique(): void {
144144 self ::assertCount (5 , $ result );
145145 }
146146
147+ /**
148+ * DataSet can consist of multiple unique entries only. If not handled correctly,
149+ * this will result in an array without any IP. This tests the
150+ * correct handling. See GitHub issue #860 for more.
151+ * @return void
152+ */
153+ public function testGenerateMultipleShuffledFromUniquesOnly (): void {
154+ $ positives = new Unlabeled ([
155+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
156+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
157+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
158+
159+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
160+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
161+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
162+ ]);
163+
164+ $ result = $ this ->generator ->generateShuffledFromPositiveSamples ($ positives , 2 );
165+
166+ self ::assertCount (2 , $ result );
167+ foreach ($ result as $ sample ) {
168+ $ ipVec = array_slice ($ sample , 16 , 32 );
169+
170+ self ::assertTrue (
171+ $ ipVec === self ::decToBitArray (1 , 32 ) ||
172+ $ ipVec === self ::decToBitArray (2 , 32 ),
173+ 'Sample has an unique IP '
174+ );
175+ }
176+ }
177+
147178 /**
148179 * @return int[]
149180 */
0 commit comments