@@ -128,6 +128,37 @@ public function testGenerateMultipleShuffledFromLimitedUnique(): void {
128128 self ::assertCount (5 , $ result );
129129 }
130130
131+ /**
132+ * DataSet can consist of multiple unique entries only. If not handled correctly,
133+ * this will result in an array without any IP. This tests the
134+ * correct handling. See GitHub issue #860 for more.
135+ * @return void
136+ */
137+ public function testGenerateMultipleShuffledFromUniquesOnly (): void {
138+ $ positives = new Unlabeled ([
139+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
140+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
141+ array_merge (self ::decToBitArray (1 , 16 ), self ::decToBitArray (1 , 32 )),
142+
143+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
144+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
145+ array_merge (self ::decToBitArray (2 , 16 ), self ::decToBitArray (2 , 32 )),
146+ ]);
147+
148+ $ result = $ this ->generator ->generateShuffledFromPositiveSamples ($ positives , 2 );
149+
150+ self ::assertCount (2 , $ result );
151+ foreach ($ result as $ sample ) {
152+ $ ipVec = array_slice ($ sample , 16 , 32 );
153+
154+ self ::assertTrue (
155+ $ ipVec === self ::decToBitArray (1 , 32 ) ||
156+ $ ipVec === self ::decToBitArray (2 , 32 ),
157+ 'Sample has an unique IP '
158+ );
159+ }
160+ }
161+
131162 /**
132163 * @return int[]
133164 */
0 commit comments