getCommand(); $command->setArguments($actualArguments); $this->assertSameValues($expectedArguments, $command->getArguments()); } /** * @group disconnected */ public function testParseResponse(): void { $this->assertSame(1, $this->getCommand()->parseResponse(1)); } /** * @group connected * @group relay-resp3 * @dataProvider structureProvider * @param array $topKArguments * @param string $key * @param array $expectedInfoResponse * @return void * @requiresRedisBfVersion >= 2.0.0 */ public function testReserveInitializeTopKStructureWithGivenConfiguration( array $topKArguments, string $key, array $expectedInfoResponse ): void { $redis = $this->getClient(); $actualResponse = $redis->topkreserve(...$topKArguments); $actualInfoResponse = $redis->topkinfo($key); $this->assertEquals('OK', $actualResponse); $this->assertSameWithPrecision($expectedInfoResponse, $actualInfoResponse, 1); } /** * @group connected * @return void * @requiresRedisBfVersion >= 2.0.0 */ public function testThrowsExceptionOnAlreadyExistingKey(): void { $redis = $this->getClient(); $redis->topkreserve('key', 50); $this->expectException(ServerException::class); $this->expectExceptionMessage('TopK: key already exists'); $redis->topkreserve('key', 50); } public function argumentsProvider(): array { return [ 'with default arguments' => [ ['key', 10], ['key', 10], ], 'with non-default width' => [ ['key', 10, 5], ['key', 10, 5, 7, 0.9], ], 'with non-default depth' => [ ['key', 10, 8, 9], ['key', 10, 8, 9, 0.9], ], 'with non-default decay' => [ ['key', 10, 8, 7, 0.8], ['key', 10, 8, 7, 0.8], ], ]; } public function structureProvider(): array { return [ 'with default configuration' => [ ['key', 50], 'key', ['k' => 50, 'width' => 8, 'depth' => 7, 'decay' => '0.90000000000000002'], ], 'with non-default width' => [ ['key', 50, 9], 'key', ['k' => 50, 'width' => 9, 'depth' => 7, 'decay' => '0.90000000000000002'], ], 'with non-default depth' => [ ['key', 50, 8, 9], 'key', ['k' => 50, 'width' => 8, 'depth' => 9, 'decay' => '0.90000000000000002'], ], 'with non-default decay' => [ ['key', 50, 8, 7, 0.8], 'key', ['k' => 50, 'width' => 8, 'depth' => 7, 'decay' => '0.80000000000000004'], ], 'with all arguments non-default' => [ ['key', 50, 9, 6, 0.8], 'key', ['k' => 50, 'width' => 9, 'depth' => 6, 'decay' => '0.80000000000000004'], ], ]; } }