diff --git a/lib/Service/NegativeSampleGenerator.php b/lib/Service/NegativeSampleGenerator.php index 99a3eecf..3705fc37 100644 --- a/lib/Service/NegativeSampleGenerator.php +++ b/lib/Service/NegativeSampleGenerator.php @@ -71,7 +71,7 @@ private function getUniqueIPsPerUser(Dataset $positives): array { private function generateFromRealData(array $uidVec, array $uniqueIps): array { return array_merge( $uidVec, - $uniqueIps[random_int(0, count($uniqueIps) - 1)] + empty($uniqueIps) ? [] : $uniqueIps[random_int(0, count($uniqueIps) - 1)] ); } diff --git a/tests/Unit/Service/NegativeSampleGeneratorTest.php b/tests/Unit/Service/NegativeSampleGeneratorTest.php index c04073e5..76fa1d3e 100644 --- a/tests/Unit/Service/NegativeSampleGeneratorTest.php +++ b/tests/Unit/Service/NegativeSampleGeneratorTest.php @@ -131,6 +131,17 @@ public function testGenerateMultipleShuffledFromLimitedUnique(): void { 'sample has a unique IP' ); } + + $positives = new Unlabeled([ + array_merge(self::decToBitArray(1, 16), self::decToBitArray(1, 32)), + array_merge(self::decToBitArray(2, 16), self::decToBitArray(1, 32)), + array_merge(self::decToBitArray(3, 16), self::decToBitArray(1, 32)), + array_merge(self::decToBitArray(4, 16), self::decToBitArray(1, 32)), + ]); + + $result = $this->generator->generateShuffledFromPositiveSamples($positives, 5); + + self::assertCount(5, $result); } /**