redis 4.0.1 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.gitignore +3 -0
 - data/.travis.yml +17 -29
 - data/.travis/Gemfile +5 -0
 - data/CHANGELOG.md +29 -0
 - data/Gemfile +5 -0
 - data/README.md +1 -1
 - data/bin/build +71 -0
 - data/lib/redis.rb +198 -12
 - data/lib/redis/client.rb +26 -12
 - data/lib/redis/cluster.rb +285 -0
 - data/lib/redis/cluster/command.rb +81 -0
 - data/lib/redis/cluster/command_loader.rb +32 -0
 - data/lib/redis/cluster/key_slot_converter.rb +72 -0
 - data/lib/redis/cluster/node.rb +104 -0
 - data/lib/redis/cluster/node_key.rb +35 -0
 - data/lib/redis/cluster/node_loader.rb +35 -0
 - data/lib/redis/cluster/option.rb +76 -0
 - data/lib/redis/cluster/slot.rb +69 -0
 - data/lib/redis/cluster/slot_loader.rb +47 -0
 - data/lib/redis/connection/ruby.rb +5 -2
 - data/lib/redis/distributed.rb +10 -2
 - data/lib/redis/errors.rb +46 -0
 - data/lib/redis/pipeline.rb +9 -1
 - data/lib/redis/version.rb +1 -1
 - data/makefile +54 -22
 - data/redis.gemspec +2 -1
 - data/test/client_test.rb +17 -0
 - data/test/cluster_abnormal_state_test.rb +38 -0
 - data/test/cluster_blocking_commands_test.rb +15 -0
 - data/test/cluster_client_internals_test.rb +77 -0
 - data/test/cluster_client_key_hash_tags_test.rb +88 -0
 - data/test/cluster_client_options_test.rb +147 -0
 - data/test/cluster_client_pipelining_test.rb +59 -0
 - data/test/cluster_client_replicas_test.rb +36 -0
 - data/test/cluster_client_slots_test.rb +94 -0
 - data/test/cluster_client_transactions_test.rb +71 -0
 - data/test/cluster_commands_on_cluster_test.rb +165 -0
 - data/test/cluster_commands_on_connection_test.rb +40 -0
 - data/test/cluster_commands_on_geo_test.rb +74 -0
 - data/test/cluster_commands_on_hashes_test.rb +11 -0
 - data/test/cluster_commands_on_hyper_log_log_test.rb +17 -0
 - data/test/cluster_commands_on_keys_test.rb +134 -0
 - data/test/cluster_commands_on_lists_test.rb +15 -0
 - data/test/cluster_commands_on_pub_sub_test.rb +101 -0
 - data/test/cluster_commands_on_scripting_test.rb +56 -0
 - data/test/cluster_commands_on_server_test.rb +221 -0
 - data/test/cluster_commands_on_sets_test.rb +39 -0
 - data/test/cluster_commands_on_sorted_sets_test.rb +35 -0
 - data/test/cluster_commands_on_streams_test.rb +196 -0
 - data/test/cluster_commands_on_strings_test.rb +15 -0
 - data/test/cluster_commands_on_transactions_test.rb +41 -0
 - data/test/cluster_commands_on_value_types_test.rb +14 -0
 - data/test/commands_on_geo_test.rb +116 -0
 - data/test/commands_on_hashes_test.rb +2 -14
 - data/test/commands_on_hyper_log_log_test.rb +2 -14
 - data/test/commands_on_lists_test.rb +2 -13
 - data/test/commands_on_sets_test.rb +2 -70
 - data/test/commands_on_sorted_sets_test.rb +2 -145
 - data/test/commands_on_strings_test.rb +2 -94
 - data/test/commands_on_value_types_test.rb +36 -0
 - data/test/distributed_blocking_commands_test.rb +8 -0
 - data/test/distributed_commands_on_hashes_test.rb +16 -3
 - data/test/distributed_commands_on_hyper_log_log_test.rb +8 -13
 - data/test/distributed_commands_on_lists_test.rb +4 -5
 - data/test/distributed_commands_on_sets_test.rb +45 -46
 - data/test/distributed_commands_on_sorted_sets_test.rb +51 -8
 - data/test/distributed_commands_on_strings_test.rb +10 -0
 - data/test/distributed_commands_on_value_types_test.rb +36 -0
 - data/test/helper.rb +176 -32
 - data/test/internals_test.rb +20 -1
 - data/test/lint/blocking_commands.rb +40 -16
 - data/test/lint/hashes.rb +41 -0
 - data/test/lint/hyper_log_log.rb +15 -1
 - data/test/lint/lists.rb +16 -0
 - data/test/lint/sets.rb +142 -0
 - data/test/lint/sorted_sets.rb +183 -2
 - data/test/lint/strings.rb +102 -0
 - data/test/pipelining_commands_test.rb +8 -0
 - data/test/support/cluster/orchestrator.rb +199 -0
 - data/test/support/redis_mock.rb +1 -1
 - data/test/transactions_test.rb +10 -0
 - metadata +81 -2
 
    
        data/test/lint/hyper_log_log.rb
    CHANGED
    
    | 
         @@ -55,6 +55,20 @@ module Lint 
     | 
|
| 
       55 
55 
     | 
    
         
             
                  end
         
     | 
| 
       56 
56 
     | 
    
         
             
                end
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
      
 58 
     | 
    
         
            +
                def test_pfmerge
         
     | 
| 
      
 59 
     | 
    
         
            +
                  target_version '2.8.9' do
         
     | 
| 
      
 60 
     | 
    
         
            +
                    r.pfadd 'foo', 's1'
         
     | 
| 
      
 61 
     | 
    
         
            +
                    r.pfadd 'bar', 's2'
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    assert_equal true, r.pfmerge('res', 'foo', 'bar')
         
     | 
| 
      
 64 
     | 
    
         
            +
                    assert_equal 2, r.pfcount('res')
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
       59 
67 
     | 
    
         | 
| 
      
 68 
     | 
    
         
            +
                def test_variadic_pfmerge_expanded
         
     | 
| 
      
 69 
     | 
    
         
            +
                  redis.pfadd('{1}foo', %w[foo bar zap a])
         
     | 
| 
      
 70 
     | 
    
         
            +
                  redis.pfadd('{1}bar', %w[a b c foo])
         
     | 
| 
      
 71 
     | 
    
         
            +
                  assert_equal true, redis.pfmerge('{1}baz', '{1}foo', '{1}bar')
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
       60 
74 
     | 
    
         
             
            end
         
     | 
    
        data/test/lint/lists.rb
    CHANGED
    
    | 
         @@ -139,5 +139,21 @@ module Lint 
     | 
|
| 
       139 
139 
     | 
    
         
             
                    r.linsert "foo", :anywhere, "s3", "s2"
         
     | 
| 
       140 
140 
     | 
    
         
             
                  end
         
     | 
| 
       141 
141 
     | 
    
         
             
                end
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                def test_rpoplpush
         
     | 
| 
      
 144 
     | 
    
         
            +
                  r.rpush 'foo', 's1'
         
     | 
| 
      
 145 
     | 
    
         
            +
                  r.rpush 'foo', 's2'
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  assert_equal 's2', r.rpoplpush('foo', 'bar')
         
     | 
| 
      
 148 
     | 
    
         
            +
                  assert_equal ['s2'], r.lrange('bar', 0, -1)
         
     | 
| 
      
 149 
     | 
    
         
            +
                  assert_equal 's1', r.rpoplpush('foo', 'bar')
         
     | 
| 
      
 150 
     | 
    
         
            +
                  assert_equal %w[s1 s2], r.lrange('bar', 0, -1)
         
     | 
| 
      
 151 
     | 
    
         
            +
                end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                def test_variadic_rpoplpush_expand
         
     | 
| 
      
 154 
     | 
    
         
            +
                  redis.rpush('{1}foo', %w[a b c])
         
     | 
| 
      
 155 
     | 
    
         
            +
                  redis.rpush('{1}bar', %w[d e f])
         
     | 
| 
      
 156 
     | 
    
         
            +
                  assert_equal 'c', redis.rpoplpush('{1}foo', '{1}bar')
         
     | 
| 
      
 157 
     | 
    
         
            +
                end
         
     | 
| 
       142 
158 
     | 
    
         
             
              end
         
     | 
| 
       143 
159 
     | 
    
         
             
            end
         
     | 
    
        data/test/lint/sets.rb
    CHANGED
    
    | 
         @@ -136,5 +136,147 @@ module Lint 
     | 
|
| 
       136 
136 
     | 
    
         | 
| 
       137 
137 
     | 
    
         
             
                  assert_equal 4, r.scard("foo")
         
     | 
| 
       138 
138 
     | 
    
         
             
                end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                def test_smove
         
     | 
| 
      
 141 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 142 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                  assert r.smove('foo', 'bar', 's1')
         
     | 
| 
      
 145 
     | 
    
         
            +
                  assert r.sismember('bar', 's1')
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                def test_sinter
         
     | 
| 
      
 149 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 150 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 151 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                  assert_equal ['s2'], r.sinter('foo', 'bar')
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                def test_variadic_smove_expand
         
     | 
| 
      
 157 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 158 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 159 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 160 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 161 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 162 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 163 
     | 
    
         
            +
                  assert_equal true, r.smove('{1}foo', '{1}bar', 's2')
         
     | 
| 
      
 164 
     | 
    
         
            +
                end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                def test_variadic_sinter_expand
         
     | 
| 
      
 167 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 168 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 169 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 170 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 171 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 172 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 173 
     | 
    
         
            +
                  assert_equal %w[s3], r.sinter('{1}foo', '{1}bar')
         
     | 
| 
      
 174 
     | 
    
         
            +
                end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                def test_sinterstore
         
     | 
| 
      
 177 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 178 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 179 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
                  r.sinterstore('baz', 'foo', 'bar')
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                  assert_equal ['s2'], r.smembers('baz')
         
     | 
| 
      
 184 
     | 
    
         
            +
                end
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                def test_variadic_sinterstore_expand
         
     | 
| 
      
 187 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 188 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 189 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 190 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 191 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 192 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 193 
     | 
    
         
            +
                  assert_equal 1, r.sinterstore('{1}baz', '{1}foo', '{1}bar')
         
     | 
| 
      
 194 
     | 
    
         
            +
                end
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
                def test_sunion
         
     | 
| 
      
 197 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 198 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 199 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 200 
     | 
    
         
            +
                  r.sadd 'bar', 's3'
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3], r.sunion('foo', 'bar').sort
         
     | 
| 
      
 203 
     | 
    
         
            +
                end
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                def test_variadic_sunion_expand
         
     | 
| 
      
 206 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 207 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 208 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 209 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 210 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 211 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 212 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3 s4 s5], r.sunion('{1}foo', '{1}bar').sort
         
     | 
| 
      
 213 
     | 
    
         
            +
                end
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                def test_sunionstore
         
     | 
| 
      
 216 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 217 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 218 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 219 
     | 
    
         
            +
                  r.sadd 'bar', 's3'
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                  r.sunionstore('baz', 'foo', 'bar')
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3], r.smembers('baz').sort
         
     | 
| 
      
 224 
     | 
    
         
            +
                end
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                def test_variadic_sunionstore_expand
         
     | 
| 
      
 227 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 228 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 229 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 230 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 231 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 232 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 233 
     | 
    
         
            +
                  assert_equal 5, r.sunionstore('{1}baz', '{1}foo', '{1}bar')
         
     | 
| 
      
 234 
     | 
    
         
            +
                end
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
      
 236 
     | 
    
         
            +
                def test_sdiff
         
     | 
| 
      
 237 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 238 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 239 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 240 
     | 
    
         
            +
                  r.sadd 'bar', 's3'
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                  assert_equal ['s1'], r.sdiff('foo', 'bar')
         
     | 
| 
      
 243 
     | 
    
         
            +
                  assert_equal ['s3'], r.sdiff('bar', 'foo')
         
     | 
| 
      
 244 
     | 
    
         
            +
                end
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
      
 246 
     | 
    
         
            +
                def test_variadic_sdiff_expand
         
     | 
| 
      
 247 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 248 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 249 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 250 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 251 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 252 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 253 
     | 
    
         
            +
                  assert_equal %w[s1 s2], r.sdiff('{1}foo', '{1}bar').sort
         
     | 
| 
      
 254 
     | 
    
         
            +
                end
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                def test_sdiffstore
         
     | 
| 
      
 257 
     | 
    
         
            +
                  r.sadd 'foo', 's1'
         
     | 
| 
      
 258 
     | 
    
         
            +
                  r.sadd 'foo', 's2'
         
     | 
| 
      
 259 
     | 
    
         
            +
                  r.sadd 'bar', 's2'
         
     | 
| 
      
 260 
     | 
    
         
            +
                  r.sadd 'bar', 's3'
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
      
 262 
     | 
    
         
            +
                  r.sdiffstore('baz', 'foo', 'bar')
         
     | 
| 
      
 263 
     | 
    
         
            +
             
     | 
| 
      
 264 
     | 
    
         
            +
                  assert_equal ['s1'], r.smembers('baz')
         
     | 
| 
      
 265 
     | 
    
         
            +
                end
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
                def test_variadic_sdiffstore_expand
         
     | 
| 
      
 268 
     | 
    
         
            +
                  r.sadd('{1}foo', 's1')
         
     | 
| 
      
 269 
     | 
    
         
            +
                  r.sadd('{1}foo', 's2')
         
     | 
| 
      
 270 
     | 
    
         
            +
                  r.sadd('{1}foo', 's3')
         
     | 
| 
      
 271 
     | 
    
         
            +
                  r.sadd('{1}bar', 's3')
         
     | 
| 
      
 272 
     | 
    
         
            +
                  r.sadd('{1}bar', 's4')
         
     | 
| 
      
 273 
     | 
    
         
            +
                  r.sadd('{1}bar', 's5')
         
     | 
| 
      
 274 
     | 
    
         
            +
                  assert_equal 2, r.sdiffstore('{1}baz', '{1}foo', '{1}bar')
         
     | 
| 
      
 275 
     | 
    
         
            +
                end
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
                def test_sscan
         
     | 
| 
      
 278 
     | 
    
         
            +
                  r.sadd('foo', %w[1 2 3 foo foobar feelsgood])
         
     | 
| 
      
 279 
     | 
    
         
            +
                  assert_equal %w[0 feelsgood foo foobar], r.sscan('foo', 0, match: 'f*').flatten.sort
         
     | 
| 
      
 280 
     | 
    
         
            +
                end
         
     | 
| 
       139 
281 
     | 
    
         
             
              end
         
     | 
| 
       140 
282 
     | 
    
         
             
            end
         
     | 
    
        data/test/lint/sorted_sets.rb
    CHANGED
    
    | 
         @@ -41,7 +41,8 @@ module Lint 
     | 
|
| 
       41 
41 
     | 
    
         
             
                    assert_equal 11.0, r.zadd("foo", 10, "s1", :incr => true)
         
     | 
| 
       42 
42 
     | 
    
         
             
                    assert_equal(-Infinity, r.zadd("bar", "-inf", "s1", :incr => true))
         
     | 
| 
       43 
43 
     | 
    
         
             
                    assert_equal(+Infinity, r.zadd("bar", "+inf", "s2", :incr => true))
         
     | 
| 
       44 
     | 
    
         
            -
                    r.del  
     | 
| 
      
 44 
     | 
    
         
            +
                    r.del 'foo'
         
     | 
| 
      
 45 
     | 
    
         
            +
                    r.del 'bar'
         
     | 
| 
       45 
46 
     | 
    
         | 
| 
       46 
47 
     | 
    
         
             
                    # Incompatible options combination
         
     | 
| 
       47 
48 
     | 
    
         
             
                    assert_raise(Redis::CommandError) { r.zadd("foo", 1, "s1", :xx => true, :nx => true) }
         
     | 
| 
         @@ -104,7 +105,8 @@ module Lint 
     | 
|
| 
       104 
105 
     | 
    
         
             
                    assert_equal(-Infinity, r.zadd("bar", ["-inf", "s1"], :incr => true))
         
     | 
| 
       105 
106 
     | 
    
         
             
                    assert_equal(+Infinity, r.zadd("bar", ["+inf", "s2"], :incr => true))
         
     | 
| 
       106 
107 
     | 
    
         
             
                    assert_raise(Redis::CommandError) { r.zadd("foo", [1, "s1", 2, "s2"], :incr => true) }
         
     | 
| 
       107 
     | 
    
         
            -
                    r.del  
     | 
| 
      
 108 
     | 
    
         
            +
                    r.del 'foo'
         
     | 
| 
      
 109 
     | 
    
         
            +
                    r.del 'bar'
         
     | 
| 
       108 
110 
     | 
    
         | 
| 
       109 
111 
     | 
    
         
             
                    # Incompatible options combination
         
     | 
| 
       110 
112 
     | 
    
         
             
                    assert_raise(Redis::CommandError) { r.zadd("foo", [1, "s1"], :xx => true, :nx => true) }
         
     | 
| 
         @@ -312,5 +314,184 @@ module Lint 
     | 
|
| 
       312 
314 
     | 
    
         
             
                  assert_equal 3, r.zremrangebyscore("foo", 2, 4)
         
     | 
| 
       313 
315 
     | 
    
         
             
                  assert_equal ["s1"], r.zrange("foo", 0, -1)
         
     | 
| 
       314 
316 
     | 
    
         
             
                end
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
      
 318 
     | 
    
         
            +
                def test_zpopmax
         
     | 
| 
      
 319 
     | 
    
         
            +
                  target_version('4.9.0') do
         
     | 
| 
      
 320 
     | 
    
         
            +
                    r.zadd('foo', %w[0 a 1 b 2 c])
         
     | 
| 
      
 321 
     | 
    
         
            +
                    assert_equal %w[c 2], r.zpopmax('foo')
         
     | 
| 
      
 322 
     | 
    
         
            +
                  end
         
     | 
| 
      
 323 
     | 
    
         
            +
                end
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
                def test_zpopmin
         
     | 
| 
      
 326 
     | 
    
         
            +
                  target_version('4.9.0') do
         
     | 
| 
      
 327 
     | 
    
         
            +
                    r.zadd('foo', %w[0 a 1 b 2 c])
         
     | 
| 
      
 328 
     | 
    
         
            +
                    assert_equal %w[a 0], r.zpopmin('foo')
         
     | 
| 
      
 329 
     | 
    
         
            +
                  end
         
     | 
| 
      
 330 
     | 
    
         
            +
                end
         
     | 
| 
      
 331 
     | 
    
         
            +
             
     | 
| 
      
 332 
     | 
    
         
            +
                def test_zremrangebylex
         
     | 
| 
      
 333 
     | 
    
         
            +
                  r.zadd('foo', %w[0 a 0 b 0 c 0 d 0 e 0 f 0 g])
         
     | 
| 
      
 334 
     | 
    
         
            +
                  assert_equal 5, r.zremrangebylex('foo', '(b', '[g')
         
     | 
| 
      
 335 
     | 
    
         
            +
                end
         
     | 
| 
      
 336 
     | 
    
         
            +
             
     | 
| 
      
 337 
     | 
    
         
            +
                def test_zlexcount
         
     | 
| 
      
 338 
     | 
    
         
            +
                  target_version '2.8.9' do
         
     | 
| 
      
 339 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'aaren'
         
     | 
| 
      
 340 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abagael'
         
     | 
| 
      
 341 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abby'
         
     | 
| 
      
 342 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abbygail'
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
                    assert_equal 4, r.zlexcount('foo', '[a', "[a\xff")
         
     | 
| 
      
 345 
     | 
    
         
            +
                    assert_equal 4, r.zlexcount('foo', '[aa', "[ab\xff")
         
     | 
| 
      
 346 
     | 
    
         
            +
                    assert_equal 3, r.zlexcount('foo', '(aaren', "[ab\xff")
         
     | 
| 
      
 347 
     | 
    
         
            +
                    assert_equal 2, r.zlexcount('foo', '[aba', '(abbygail')
         
     | 
| 
      
 348 
     | 
    
         
            +
                    assert_equal 1, r.zlexcount('foo', '(aaren', '(abby')
         
     | 
| 
      
 349 
     | 
    
         
            +
                  end
         
     | 
| 
      
 350 
     | 
    
         
            +
                end
         
     | 
| 
      
 351 
     | 
    
         
            +
             
     | 
| 
      
 352 
     | 
    
         
            +
                def test_zrangebylex
         
     | 
| 
      
 353 
     | 
    
         
            +
                  target_version '2.8.9' do
         
     | 
| 
      
 354 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'aaren'
         
     | 
| 
      
 355 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abagael'
         
     | 
| 
      
 356 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abby'
         
     | 
| 
      
 357 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abbygail'
         
     | 
| 
      
 358 
     | 
    
         
            +
             
     | 
| 
      
 359 
     | 
    
         
            +
                    assert_equal %w[aaren abagael abby abbygail], r.zrangebylex('foo', '[a', "[a\xff")
         
     | 
| 
      
 360 
     | 
    
         
            +
                    assert_equal %w[aaren abagael], r.zrangebylex('foo', '[a', "[a\xff", limit: [0, 2])
         
     | 
| 
      
 361 
     | 
    
         
            +
                    assert_equal %w[abby abbygail], r.zrangebylex('foo', '(abb', "(abb\xff")
         
     | 
| 
      
 362 
     | 
    
         
            +
                    assert_equal %w[abbygail], r.zrangebylex('foo', '(abby', "(abby\xff")
         
     | 
| 
      
 363 
     | 
    
         
            +
                  end
         
     | 
| 
      
 364 
     | 
    
         
            +
                end
         
     | 
| 
      
 365 
     | 
    
         
            +
             
     | 
| 
      
 366 
     | 
    
         
            +
                def test_zrevrangebylex
         
     | 
| 
      
 367 
     | 
    
         
            +
                  target_version '2.9.9' do
         
     | 
| 
      
 368 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'aaren'
         
     | 
| 
      
 369 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abagael'
         
     | 
| 
      
 370 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abby'
         
     | 
| 
      
 371 
     | 
    
         
            +
                    r.zadd 'foo', 0, 'abbygail'
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
                    assert_equal %w[abbygail abby abagael aaren], r.zrevrangebylex('foo', "[a\xff", '[a')
         
     | 
| 
      
 374 
     | 
    
         
            +
                    assert_equal %w[abbygail abby], r.zrevrangebylex('foo', "[a\xff", '[a', limit: [0, 2])
         
     | 
| 
      
 375 
     | 
    
         
            +
                    assert_equal %w[abbygail abby], r.zrevrangebylex('foo', "(abb\xff", '(abb')
         
     | 
| 
      
 376 
     | 
    
         
            +
                    assert_equal %w[abbygail], r.zrevrangebylex('foo', "(abby\xff", '(abby')
         
     | 
| 
      
 377 
     | 
    
         
            +
                  end
         
     | 
| 
      
 378 
     | 
    
         
            +
                end
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
                def test_zcount
         
     | 
| 
      
 381 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 382 
     | 
    
         
            +
                  r.zadd 'foo', 2, 's2'
         
     | 
| 
      
 383 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
      
 385 
     | 
    
         
            +
                  assert_equal 2, r.zcount('foo', 2, 3)
         
     | 
| 
      
 386 
     | 
    
         
            +
                end
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
                def test_zunionstore
         
     | 
| 
      
 389 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 390 
     | 
    
         
            +
                  r.zadd 'bar', 2, 's2'
         
     | 
| 
      
 391 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 392 
     | 
    
         
            +
                  r.zadd 'bar', 4, 's4'
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
      
 394 
     | 
    
         
            +
                  assert_equal 4, r.zunionstore('foobar', %w[foo bar])
         
     | 
| 
      
 395 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3 s4], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 396 
     | 
    
         
            +
                end
         
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
      
 398 
     | 
    
         
            +
                def test_zunionstore_with_weights
         
     | 
| 
      
 399 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 400 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 401 
     | 
    
         
            +
                  r.zadd 'bar', 20, 's2'
         
     | 
| 
      
 402 
     | 
    
         
            +
                  r.zadd 'bar', 40, 's4'
         
     | 
| 
      
 403 
     | 
    
         
            +
             
     | 
| 
      
 404 
     | 
    
         
            +
                  assert_equal 4, r.zunionstore('foobar', %w[foo bar])
         
     | 
| 
      
 405 
     | 
    
         
            +
                  assert_equal %w[s1 s3 s2 s4], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 406 
     | 
    
         
            +
             
     | 
| 
      
 407 
     | 
    
         
            +
                  assert_equal 4, r.zunionstore('foobar', %w[foo bar], weights: [10, 1])
         
     | 
| 
      
 408 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3 s4], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 409 
     | 
    
         
            +
                end
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
      
 411 
     | 
    
         
            +
                def test_zunionstore_with_aggregate
         
     | 
| 
      
 412 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 413 
     | 
    
         
            +
                  r.zadd 'foo', 2, 's2'
         
     | 
| 
      
 414 
     | 
    
         
            +
                  r.zadd 'bar', 4, 's2'
         
     | 
| 
      
 415 
     | 
    
         
            +
                  r.zadd 'bar', 3, 's3'
         
     | 
| 
      
 416 
     | 
    
         
            +
             
     | 
| 
      
 417 
     | 
    
         
            +
                  assert_equal 3, r.zunionstore('foobar', %w[foo bar])
         
     | 
| 
      
 418 
     | 
    
         
            +
                  assert_equal %w[s1 s3 s2], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
                  assert_equal 3, r.zunionstore('foobar', %w[foo bar], aggregate: :min)
         
     | 
| 
      
 421 
     | 
    
         
            +
                  assert_equal %w[s1 s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 422 
     | 
    
         
            +
             
     | 
| 
      
 423 
     | 
    
         
            +
                  assert_equal 3, r.zunionstore('foobar', %w[foo bar], aggregate: :max)
         
     | 
| 
      
 424 
     | 
    
         
            +
                  assert_equal %w[s1 s3 s2], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 425 
     | 
    
         
            +
                end
         
     | 
| 
      
 426 
     | 
    
         
            +
             
     | 
| 
      
 427 
     | 
    
         
            +
                def test_zunionstore_expand
         
     | 
| 
      
 428 
     | 
    
         
            +
                  r.zadd('{1}foo', %w[0 a 1 b 2 c])
         
     | 
| 
      
 429 
     | 
    
         
            +
                  r.zadd('{1}bar', %w[0 c 1 d 2 e])
         
     | 
| 
      
 430 
     | 
    
         
            +
                  assert_equal 5, r.zunionstore('{1}baz', %w[{1}foo {1}bar])
         
     | 
| 
      
 431 
     | 
    
         
            +
                end
         
     | 
| 
      
 432 
     | 
    
         
            +
             
     | 
| 
      
 433 
     | 
    
         
            +
                def test_zinterstore
         
     | 
| 
      
 434 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 435 
     | 
    
         
            +
                  r.zadd 'bar', 2, 's1'
         
     | 
| 
      
 436 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 437 
     | 
    
         
            +
                  r.zadd 'bar', 4, 's4'
         
     | 
| 
      
 438 
     | 
    
         
            +
             
     | 
| 
      
 439 
     | 
    
         
            +
                  assert_equal 1, r.zinterstore('foobar', %w[foo bar])
         
     | 
| 
      
 440 
     | 
    
         
            +
                  assert_equal ['s1'], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 441 
     | 
    
         
            +
                end
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                def test_zinterstore_with_weights
         
     | 
| 
      
 444 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 445 
     | 
    
         
            +
                  r.zadd 'foo', 2, 's2'
         
     | 
| 
      
 446 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 447 
     | 
    
         
            +
                  r.zadd 'bar', 20, 's2'
         
     | 
| 
      
 448 
     | 
    
         
            +
                  r.zadd 'bar', 30, 's3'
         
     | 
| 
      
 449 
     | 
    
         
            +
                  r.zadd 'bar', 40, 's4'
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                  assert_equal 2, r.zinterstore('foobar', %w[foo bar])
         
     | 
| 
      
 452 
     | 
    
         
            +
                  assert_equal %w[s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 453 
     | 
    
         
            +
             
     | 
| 
      
 454 
     | 
    
         
            +
                  assert_equal 2, r.zinterstore('foobar', %w[foo bar], weights: [10, 1])
         
     | 
| 
      
 455 
     | 
    
         
            +
                  assert_equal %w[s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 456 
     | 
    
         
            +
             
     | 
| 
      
 457 
     | 
    
         
            +
                  assert_equal 40.0, r.zscore('foobar', 's2')
         
     | 
| 
      
 458 
     | 
    
         
            +
                  assert_equal 60.0, r.zscore('foobar', 's3')
         
     | 
| 
      
 459 
     | 
    
         
            +
                end
         
     | 
| 
      
 460 
     | 
    
         
            +
             
     | 
| 
      
 461 
     | 
    
         
            +
                def test_zinterstore_with_aggregate
         
     | 
| 
      
 462 
     | 
    
         
            +
                  r.zadd 'foo', 1, 's1'
         
     | 
| 
      
 463 
     | 
    
         
            +
                  r.zadd 'foo', 2, 's2'
         
     | 
| 
      
 464 
     | 
    
         
            +
                  r.zadd 'foo', 3, 's3'
         
     | 
| 
      
 465 
     | 
    
         
            +
                  r.zadd 'bar', 20, 's2'
         
     | 
| 
      
 466 
     | 
    
         
            +
                  r.zadd 'bar', 30, 's3'
         
     | 
| 
      
 467 
     | 
    
         
            +
                  r.zadd 'bar', 40, 's4'
         
     | 
| 
      
 468 
     | 
    
         
            +
             
     | 
| 
      
 469 
     | 
    
         
            +
                  assert_equal 2, r.zinterstore('foobar', %w[foo bar])
         
     | 
| 
      
 470 
     | 
    
         
            +
                  assert_equal %w[s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 471 
     | 
    
         
            +
                  assert_equal 22.0, r.zscore('foobar', 's2')
         
     | 
| 
      
 472 
     | 
    
         
            +
                  assert_equal 33.0, r.zscore('foobar', 's3')
         
     | 
| 
      
 473 
     | 
    
         
            +
             
     | 
| 
      
 474 
     | 
    
         
            +
                  assert_equal 2, r.zinterstore('foobar', %w[foo bar], aggregate: :min)
         
     | 
| 
      
 475 
     | 
    
         
            +
                  assert_equal %w[s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 476 
     | 
    
         
            +
                  assert_equal 2.0, r.zscore('foobar', 's2')
         
     | 
| 
      
 477 
     | 
    
         
            +
                  assert_equal 3.0, r.zscore('foobar', 's3')
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
      
 479 
     | 
    
         
            +
                  assert_equal 2, r.zinterstore('foobar', %w[foo bar], aggregate: :max)
         
     | 
| 
      
 480 
     | 
    
         
            +
                  assert_equal %w[s2 s3], r.zrange('foobar', 0, -1)
         
     | 
| 
      
 481 
     | 
    
         
            +
                  assert_equal 20.0, r.zscore('foobar', 's2')
         
     | 
| 
      
 482 
     | 
    
         
            +
                  assert_equal 30.0, r.zscore('foobar', 's3')
         
     | 
| 
      
 483 
     | 
    
         
            +
                end
         
     | 
| 
      
 484 
     | 
    
         
            +
             
     | 
| 
      
 485 
     | 
    
         
            +
                def test_zinterstore_expand
         
     | 
| 
      
 486 
     | 
    
         
            +
                  r.zadd '{1}foo', %w[0 s1 1 s2 2 s3]
         
     | 
| 
      
 487 
     | 
    
         
            +
                  r.zadd '{1}bar', %w[0 s3 1 s4 2 s5]
         
     | 
| 
      
 488 
     | 
    
         
            +
                  assert_equal 1, r.zinterstore('{1}baz', %w[{1}foo {1}bar], weights: [2.0, 3.0])
         
     | 
| 
      
 489 
     | 
    
         
            +
                end
         
     | 
| 
      
 490 
     | 
    
         
            +
             
     | 
| 
      
 491 
     | 
    
         
            +
                def test_zscan
         
     | 
| 
      
 492 
     | 
    
         
            +
                  r.zadd('foo', %w[0 a 1 b 2 c])
         
     | 
| 
      
 493 
     | 
    
         
            +
                  expected = ['0', [['a', 0.0], ['b', 1.0], ['c', 2.0]]]
         
     | 
| 
      
 494 
     | 
    
         
            +
                  assert_equal expected, r.zscan('foo', 0)
         
     | 
| 
      
 495 
     | 
    
         
            +
                end
         
     | 
| 
       315 
496 
     | 
    
         
             
              end
         
     | 
| 
       316 
497 
     | 
    
         
             
            end
         
     | 
    
        data/test/lint/strings.rb
    CHANGED
    
    | 
         @@ -1,6 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Lint
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
              module Strings
         
     | 
| 
      
 4 
     | 
    
         
            +
                def mock(*args, &block)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  redis_mock(*args, &block)
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
       4 
7 
     | 
    
         | 
| 
       5 
8 
     | 
    
         
             
                def test_set_and_get
         
     | 
| 
       6 
9 
     | 
    
         
             
                  r.set("foo", "s1")
         
     | 
| 
         @@ -242,5 +245,104 @@ module Lint 
     | 
|
| 
       242 
245 
     | 
    
         | 
| 
       243 
246 
     | 
    
         
             
                  assert_equal 5, r.strlen("foo")
         
     | 
| 
       244 
247 
     | 
    
         
             
                end
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
      
 249 
     | 
    
         
            +
                def test_bitfield
         
     | 
| 
      
 250 
     | 
    
         
            +
                  target_version('3.2.0') do
         
     | 
| 
      
 251 
     | 
    
         
            +
                    mock(bitfield: ->(*_) { "*2\r\n:1\r\n:0\r\n" }) do |redis|
         
     | 
| 
      
 252 
     | 
    
         
            +
                      assert_equal [1, 0], redis.bitfield('foo', 'INCRBY', 'i5', 100, 1, 'GET', 'u4', 0)
         
     | 
| 
      
 253 
     | 
    
         
            +
                    end
         
     | 
| 
      
 254 
     | 
    
         
            +
                  end
         
     | 
| 
      
 255 
     | 
    
         
            +
                end
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
                def test_mget
         
     | 
| 
      
 258 
     | 
    
         
            +
                  r.set('{1}foo', 's1')
         
     | 
| 
      
 259 
     | 
    
         
            +
                  r.set('{1}bar', 's2')
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
                  assert_equal %w[s1 s2],         r.mget('{1}foo', '{1}bar')
         
     | 
| 
      
 262 
     | 
    
         
            +
                  assert_equal ['s1', 's2', nil], r.mget('{1}foo', '{1}bar', '{1}baz')
         
     | 
| 
      
 263 
     | 
    
         
            +
                end
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                def test_mget_mapped
         
     | 
| 
      
 266 
     | 
    
         
            +
                  r.set('{1}foo', 's1')
         
     | 
| 
      
 267 
     | 
    
         
            +
                  r.set('{1}bar', 's2')
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
                  response = r.mapped_mget('{1}foo', '{1}bar')
         
     | 
| 
      
 270 
     | 
    
         
            +
             
     | 
| 
      
 271 
     | 
    
         
            +
                  assert_equal 's1', response['{1}foo']
         
     | 
| 
      
 272 
     | 
    
         
            +
                  assert_equal 's2', response['{1}bar']
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
      
 274 
     | 
    
         
            +
                  response = r.mapped_mget('{1}foo', '{1}bar', '{1}baz')
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                  assert_equal 's1', response['{1}foo']
         
     | 
| 
      
 277 
     | 
    
         
            +
                  assert_equal 's2', response['{1}bar']
         
     | 
| 
      
 278 
     | 
    
         
            +
                  assert_equal nil,  response['{1}baz']
         
     | 
| 
      
 279 
     | 
    
         
            +
                end
         
     | 
| 
      
 280 
     | 
    
         
            +
             
     | 
| 
      
 281 
     | 
    
         
            +
                def test_mapped_mget_in_a_pipeline_returns_hash
         
     | 
| 
      
 282 
     | 
    
         
            +
                  r.set('{1}foo', 's1')
         
     | 
| 
      
 283 
     | 
    
         
            +
                  r.set('{1}bar', 's2')
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
                  result = r.pipelined do
         
     | 
| 
      
 286 
     | 
    
         
            +
                    r.mapped_mget('{1}foo', '{1}bar')
         
     | 
| 
      
 287 
     | 
    
         
            +
                  end
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
                  assert_equal({ '{1}foo' => 's1', '{1}bar' => 's2' }, result[0])
         
     | 
| 
      
 290 
     | 
    
         
            +
                end
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
      
 292 
     | 
    
         
            +
                def test_mset
         
     | 
| 
      
 293 
     | 
    
         
            +
                  r.mset('{1}foo', 's1', '{1}bar', 's2')
         
     | 
| 
      
 294 
     | 
    
         
            +
             
     | 
| 
      
 295 
     | 
    
         
            +
                  assert_equal 's1', r.get('{1}foo')
         
     | 
| 
      
 296 
     | 
    
         
            +
                  assert_equal 's2', r.get('{1}bar')
         
     | 
| 
      
 297 
     | 
    
         
            +
                end
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
                def test_mset_mapped
         
     | 
| 
      
 300 
     | 
    
         
            +
                  r.mapped_mset('{1}foo' => 's1', '{1}bar' => 's2')
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
      
 302 
     | 
    
         
            +
                  assert_equal 's1', r.get('{1}foo')
         
     | 
| 
      
 303 
     | 
    
         
            +
                  assert_equal 's2', r.get('{1}bar')
         
     | 
| 
      
 304 
     | 
    
         
            +
                end
         
     | 
| 
      
 305 
     | 
    
         
            +
             
     | 
| 
      
 306 
     | 
    
         
            +
                def test_msetnx
         
     | 
| 
      
 307 
     | 
    
         
            +
                  r.set('{1}foo', 's1')
         
     | 
| 
      
 308 
     | 
    
         
            +
                  assert_equal false, r.msetnx('{1}foo', 's2', '{1}bar', 's3')
         
     | 
| 
      
 309 
     | 
    
         
            +
                  assert_equal 's1', r.get('{1}foo')
         
     | 
| 
      
 310 
     | 
    
         
            +
                  assert_equal nil, r.get('{1}bar')
         
     | 
| 
      
 311 
     | 
    
         
            +
             
     | 
| 
      
 312 
     | 
    
         
            +
                  r.del('{1}foo')
         
     | 
| 
      
 313 
     | 
    
         
            +
                  assert_equal true, r.msetnx('{1}foo', 's2', '{1}bar', 's3')
         
     | 
| 
      
 314 
     | 
    
         
            +
                  assert_equal 's2', r.get('{1}foo')
         
     | 
| 
      
 315 
     | 
    
         
            +
                  assert_equal 's3', r.get('{1}bar')
         
     | 
| 
      
 316 
     | 
    
         
            +
                end
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
      
 318 
     | 
    
         
            +
                def test_msetnx_mapped
         
     | 
| 
      
 319 
     | 
    
         
            +
                  r.set('{1}foo', 's1')
         
     | 
| 
      
 320 
     | 
    
         
            +
                  assert_equal false, r.mapped_msetnx('{1}foo' => 's2', '{1}bar' => 's3')
         
     | 
| 
      
 321 
     | 
    
         
            +
                  assert_equal 's1', r.get('{1}foo')
         
     | 
| 
      
 322 
     | 
    
         
            +
                  assert_equal nil, r.get('{1}bar')
         
     | 
| 
      
 323 
     | 
    
         
            +
             
     | 
| 
      
 324 
     | 
    
         
            +
                  r.del('{1}foo')
         
     | 
| 
      
 325 
     | 
    
         
            +
                  assert_equal true, r.mapped_msetnx('{1}foo' => 's2', '{1}bar' => 's3')
         
     | 
| 
      
 326 
     | 
    
         
            +
                  assert_equal 's2', r.get('{1}foo')
         
     | 
| 
      
 327 
     | 
    
         
            +
                  assert_equal 's3', r.get('{1}bar')
         
     | 
| 
      
 328 
     | 
    
         
            +
                end
         
     | 
| 
      
 329 
     | 
    
         
            +
             
     | 
| 
      
 330 
     | 
    
         
            +
                def test_bitop
         
     | 
| 
      
 331 
     | 
    
         
            +
                  with_external_encoding('UTF-8') do
         
     | 
| 
      
 332 
     | 
    
         
            +
                    target_version '2.5.10' do
         
     | 
| 
      
 333 
     | 
    
         
            +
                      r.set('foo{1}', 'a')
         
     | 
| 
      
 334 
     | 
    
         
            +
                      r.set('bar{1}', 'b')
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
      
 336 
     | 
    
         
            +
                      r.bitop(:and, 'foo&bar{1}', 'foo{1}', 'bar{1}')
         
     | 
| 
      
 337 
     | 
    
         
            +
                      assert_equal "\x60", r.get('foo&bar{1}')
         
     | 
| 
      
 338 
     | 
    
         
            +
                      r.bitop(:or, 'foo|bar{1}', 'foo{1}', 'bar{1}')
         
     | 
| 
      
 339 
     | 
    
         
            +
                      assert_equal "\x63", r.get('foo|bar{1}')
         
     | 
| 
      
 340 
     | 
    
         
            +
                      r.bitop(:xor, 'foo^bar{1}', 'foo{1}', 'bar{1}')
         
     | 
| 
      
 341 
     | 
    
         
            +
                      assert_equal "\x03", r.get('foo^bar{1}')
         
     | 
| 
      
 342 
     | 
    
         
            +
                      r.bitop(:not, '~foo{1}', 'foo{1}')
         
     | 
| 
      
 343 
     | 
    
         
            +
                      assert_equal "\x9E", r.get('~foo{1}')
         
     | 
| 
      
 344 
     | 
    
         
            +
                    end
         
     | 
| 
      
 345 
     | 
    
         
            +
                  end
         
     | 
| 
      
 346 
     | 
    
         
            +
                end
         
     | 
| 
       245 
347 
     | 
    
         
             
              end
         
     | 
| 
       246 
348 
     | 
    
         
             
            end
         
     |