function testSetDifferenceStore() { $setA = RC::setAddAndReturn($this->redis, 'setA', array(0, 1, 2, 3, 4, 5, 6)); $setB = RC::setAddAndReturn($this->redis, 'setB', array(1, 3, 4, 6, 9, 10)); $this->assertEquals(count($setA), $this->redis->sdiffstore('setC', 'setA')); $this->assertTrue(RC::sameValuesInArrays($setA, $this->redis->smembers('setC'))); $this->redis->del('setC'); $this->assertEquals(3, $this->redis->sdiffstore('setC', 'setA', 'setB')); $this->assertTrue(RC::sameValuesInArrays(array_diff($setA, $setB), $this->redis->smembers('setC'))); // non-existing keys are considered empty sets $this->redis->del('setC'); $this->assertEquals(0, $this->redis->sdiffstore('setC', 'setDoesNotExist')); $this->assertFalse($this->redis->exists('setC')); $this->assertEquals(0, $this->redis->scard('setC')); // existing keys are replaced by SDIFFSTORE $this->redis->set('foo', 'bar'); $this->assertEquals(count($setA), $this->redis->sdiffstore('foo', 'setA')); // wrong type $this->redis->set('foo', 'bar'); RC::testForServerException($this, RC::EXCEPTION_WRONG_TYPE, p_anon("\$test", "\n \$test->redis->sdiffstore('setA', 'foo');\n ")); }