discourse-redis 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +59 -0
  4. data/.travis/Gemfile +11 -0
  5. data/.yardopts +3 -0
  6. data/CHANGELOG.md +349 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE +20 -0
  9. data/README.md +328 -0
  10. data/Rakefile +87 -0
  11. data/benchmarking/logging.rb +71 -0
  12. data/benchmarking/pipeline.rb +51 -0
  13. data/benchmarking/speed.rb +21 -0
  14. data/benchmarking/suite.rb +24 -0
  15. data/benchmarking/worker.rb +71 -0
  16. data/examples/basic.rb +15 -0
  17. data/examples/consistency.rb +114 -0
  18. data/examples/dist_redis.rb +43 -0
  19. data/examples/incr-decr.rb +17 -0
  20. data/examples/list.rb +26 -0
  21. data/examples/pubsub.rb +37 -0
  22. data/examples/sentinel.rb +41 -0
  23. data/examples/sentinel/start +49 -0
  24. data/examples/sets.rb +36 -0
  25. data/examples/unicorn/config.ru +3 -0
  26. data/examples/unicorn/unicorn.rb +20 -0
  27. data/lib/redis.rb +2731 -0
  28. data/lib/redis/client.rb +575 -0
  29. data/lib/redis/connection.rb +9 -0
  30. data/lib/redis/connection/command_helper.rb +44 -0
  31. data/lib/redis/connection/hiredis.rb +64 -0
  32. data/lib/redis/connection/registry.rb +12 -0
  33. data/lib/redis/connection/ruby.rb +322 -0
  34. data/lib/redis/connection/synchrony.rb +124 -0
  35. data/lib/redis/distributed.rb +873 -0
  36. data/lib/redis/errors.rb +40 -0
  37. data/lib/redis/hash_ring.rb +132 -0
  38. data/lib/redis/pipeline.rb +141 -0
  39. data/lib/redis/subscribe.rb +83 -0
  40. data/lib/redis/version.rb +3 -0
  41. data/redis.gemspec +34 -0
  42. data/test/bitpos_test.rb +69 -0
  43. data/test/blocking_commands_test.rb +42 -0
  44. data/test/command_map_test.rb +30 -0
  45. data/test/commands_on_hashes_test.rb +21 -0
  46. data/test/commands_on_hyper_log_log_test.rb +21 -0
  47. data/test/commands_on_lists_test.rb +20 -0
  48. data/test/commands_on_sets_test.rb +77 -0
  49. data/test/commands_on_sorted_sets_test.rb +137 -0
  50. data/test/commands_on_strings_test.rb +101 -0
  51. data/test/commands_on_value_types_test.rb +133 -0
  52. data/test/connection_handling_test.rb +250 -0
  53. data/test/distributed_blocking_commands_test.rb +46 -0
  54. data/test/distributed_commands_on_hashes_test.rb +10 -0
  55. data/test/distributed_commands_on_hyper_log_log_test.rb +33 -0
  56. data/test/distributed_commands_on_lists_test.rb +22 -0
  57. data/test/distributed_commands_on_sets_test.rb +83 -0
  58. data/test/distributed_commands_on_sorted_sets_test.rb +18 -0
  59. data/test/distributed_commands_on_strings_test.rb +59 -0
  60. data/test/distributed_commands_on_value_types_test.rb +95 -0
  61. data/test/distributed_commands_requiring_clustering_test.rb +164 -0
  62. data/test/distributed_connection_handling_test.rb +23 -0
  63. data/test/distributed_internals_test.rb +79 -0
  64. data/test/distributed_key_tags_test.rb +52 -0
  65. data/test/distributed_persistence_control_commands_test.rb +26 -0
  66. data/test/distributed_publish_subscribe_test.rb +92 -0
  67. data/test/distributed_remote_server_control_commands_test.rb +66 -0
  68. data/test/distributed_scripting_test.rb +102 -0
  69. data/test/distributed_sorting_test.rb +20 -0
  70. data/test/distributed_test.rb +58 -0
  71. data/test/distributed_transactions_test.rb +32 -0
  72. data/test/encoding_test.rb +18 -0
  73. data/test/error_replies_test.rb +59 -0
  74. data/test/fork_safety_test.rb +65 -0
  75. data/test/helper.rb +232 -0
  76. data/test/helper_test.rb +24 -0
  77. data/test/internals_test.rb +437 -0
  78. data/test/lint/blocking_commands.rb +150 -0
  79. data/test/lint/hashes.rb +162 -0
  80. data/test/lint/hyper_log_log.rb +60 -0
  81. data/test/lint/lists.rb +143 -0
  82. data/test/lint/sets.rb +125 -0
  83. data/test/lint/sorted_sets.rb +316 -0
  84. data/test/lint/strings.rb +260 -0
  85. data/test/lint/value_types.rb +122 -0
  86. data/test/persistence_control_commands_test.rb +26 -0
  87. data/test/pipelining_commands_test.rb +242 -0
  88. data/test/publish_subscribe_test.rb +254 -0
  89. data/test/remote_server_control_commands_test.rb +118 -0
  90. data/test/scanning_test.rb +413 -0
  91. data/test/scripting_test.rb +78 -0
  92. data/test/sentinel_command_test.rb +80 -0
  93. data/test/sentinel_test.rb +255 -0
  94. data/test/sorting_test.rb +59 -0
  95. data/test/support/connection/hiredis.rb +1 -0
  96. data/test/support/connection/ruby.rb +1 -0
  97. data/test/support/connection/synchrony.rb +17 -0
  98. data/test/support/redis_mock.rb +119 -0
  99. data/test/support/wire/synchrony.rb +24 -0
  100. data/test/support/wire/thread.rb +5 -0
  101. data/test/synchrony_driver.rb +88 -0
  102. data/test/test.conf.erb +9 -0
  103. data/test/thread_safety_test.rb +32 -0
  104. data/test/transactions_test.rb +264 -0
  105. data/test/unknown_commands_test.rb +14 -0
  106. data/test/url_param_test.rb +138 -0
  107. metadata +182 -0
@@ -0,0 +1,125 @@
1
+ module Lint
2
+
3
+ module Sets
4
+
5
+ def test_sadd
6
+ assert_equal true, r.sadd("foo", "s1")
7
+ assert_equal true, r.sadd("foo", "s2")
8
+ assert_equal false, r.sadd("foo", "s1")
9
+
10
+ assert_equal ["s1", "s2"], r.smembers("foo").sort
11
+ end
12
+
13
+ def test_variadic_sadd
14
+ target_version "2.3.9" do # 2.4-rc6
15
+ assert_equal 2, r.sadd("foo", ["s1", "s2"])
16
+ assert_equal 1, r.sadd("foo", ["s1", "s2", "s3"])
17
+
18
+ assert_equal ["s1", "s2", "s3"], r.smembers("foo").sort
19
+ end
20
+ end
21
+
22
+ def test_srem
23
+ r.sadd("foo", "s1")
24
+ r.sadd("foo", "s2")
25
+
26
+ assert_equal true, r.srem("foo", "s1")
27
+ assert_equal false, r.srem("foo", "s3")
28
+
29
+ assert_equal ["s2"], r.smembers("foo")
30
+ end
31
+
32
+ def test_variadic_srem
33
+ target_version "2.3.9" do # 2.4-rc6
34
+ r.sadd("foo", "s1")
35
+ r.sadd("foo", "s2")
36
+ r.sadd("foo", "s3")
37
+
38
+ assert_equal 1, r.srem("foo", ["s1", "aaa"])
39
+ assert_equal 0, r.srem("foo", ["bbb", "ccc" "ddd"])
40
+ assert_equal 1, r.srem("foo", ["eee", "s3"])
41
+
42
+ assert_equal ["s2"], r.smembers("foo")
43
+ end
44
+ end
45
+
46
+ def test_spop
47
+ r.sadd "foo", "s1"
48
+ r.sadd "foo", "s2"
49
+
50
+ assert ["s1", "s2"].include?(r.spop("foo"))
51
+ assert ["s1", "s2"].include?(r.spop("foo"))
52
+ assert_equal nil, r.spop("foo")
53
+ end
54
+
55
+ def test_scard
56
+ assert_equal 0, r.scard("foo")
57
+
58
+ r.sadd "foo", "s1"
59
+
60
+ assert_equal 1, r.scard("foo")
61
+
62
+ r.sadd "foo", "s2"
63
+
64
+ assert_equal 2, r.scard("foo")
65
+ end
66
+
67
+ def test_sismember
68
+ assert_equal false, r.sismember("foo", "s1")
69
+
70
+ r.sadd "foo", "s1"
71
+
72
+ assert_equal true, r.sismember("foo", "s1")
73
+ assert_equal false, r.sismember("foo", "s2")
74
+ end
75
+
76
+ def test_smembers
77
+ assert_equal [], r.smembers("foo")
78
+
79
+ r.sadd "foo", "s1"
80
+ r.sadd "foo", "s2"
81
+
82
+ assert_equal ["s1", "s2"], r.smembers("foo").sort
83
+ end
84
+
85
+ def test_srandmember
86
+ r.sadd "foo", "s1"
87
+ r.sadd "foo", "s2"
88
+
89
+ 4.times do
90
+ assert ["s1", "s2"].include?(r.srandmember("foo"))
91
+ end
92
+
93
+ assert_equal 2, r.scard("foo")
94
+ end
95
+
96
+ def test_srandmember_with_positive_count
97
+ r.sadd "foo", "s1"
98
+ r.sadd "foo", "s2"
99
+ r.sadd "foo", "s3"
100
+ r.sadd "foo", "s4"
101
+
102
+ 4.times do
103
+ assert !(["s1", "s2", "s3", "s4"] & r.srandmember("foo", 3)).empty?
104
+
105
+ assert_equal 3, r.srandmember("foo", 3).size
106
+ end
107
+
108
+ assert_equal 4, r.scard("foo")
109
+ end
110
+
111
+ def test_srandmember_with_negative_count
112
+ r.sadd "foo", "s1"
113
+ r.sadd "foo", "s2"
114
+ r.sadd "foo", "s3"
115
+ r.sadd "foo", "s4"
116
+
117
+ 4.times do
118
+ assert !(["s1", "s2", "s3", "s4"] & r.srandmember("foo", -6)).empty?
119
+ assert_equal 6, r.srandmember("foo", -6).size
120
+ end
121
+
122
+ assert_equal 4, r.scard("foo")
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,316 @@
1
+ module Lint
2
+
3
+ module SortedSets
4
+
5
+ Infinity = 1.0/0.0
6
+
7
+ def test_zadd
8
+ assert_equal 0, r.zcard("foo")
9
+ assert_equal true, r.zadd("foo", 1, "s1")
10
+ assert_equal false, r.zadd("foo", 1, "s1")
11
+ assert_equal 1, r.zcard("foo")
12
+ r.del "foo"
13
+
14
+ target_version "3.0.2" do
15
+ # XX option
16
+ assert_equal 0, r.zcard("foo")
17
+ assert_equal false, r.zadd("foo", 1, "s1", :xx => true)
18
+ r.zadd("foo", 1, "s1")
19
+ assert_equal false, r.zadd("foo", 2, "s1", :xx => true)
20
+ assert_equal 2, r.zscore("foo", "s1")
21
+ r.del "foo"
22
+
23
+ # NX option
24
+ assert_equal 0, r.zcard("foo")
25
+ assert_equal true, r.zadd("foo", 1, "s1", :nx => true)
26
+ assert_equal false, r.zadd("foo", 2, "s1", :nx => true)
27
+ assert_equal 1, r.zscore("foo", "s1")
28
+ assert_equal 1, r.zcard("foo")
29
+ r.del "foo"
30
+
31
+ # CH option
32
+ assert_equal 0, r.zcard("foo")
33
+ assert_equal true, r.zadd("foo", 1, "s1", :ch => true)
34
+ assert_equal false, r.zadd("foo", 1, "s1", :ch => true)
35
+ assert_equal true, r.zadd("foo", 2, "s1", :ch => true)
36
+ assert_equal 1, r.zcard("foo")
37
+ r.del "foo"
38
+
39
+ # INCR option
40
+ assert_equal 1.0, r.zadd("foo", 1, "s1", :incr => true)
41
+ assert_equal 11.0, r.zadd("foo", 10, "s1", :incr => true)
42
+ assert_equal -Infinity, r.zadd("bar", "-inf", "s1", :incr => true)
43
+ assert_equal +Infinity, r.zadd("bar", "+inf", "s2", :incr => true)
44
+ r.del "foo", "bar"
45
+
46
+ # Incompatible options combination
47
+ assert_raise(Redis::CommandError) { r.zadd("foo", 1, "s1", :xx => true, :nx => true) }
48
+ end
49
+ end
50
+
51
+ def test_variadic_zadd
52
+ target_version "2.3.9" do # 2.4-rc6
53
+ # Non-nested array with pairs
54
+ assert_equal 0, r.zcard("foo")
55
+ assert_equal 2, r.zadd("foo", [1, "s1", 2, "s2"])
56
+ assert_equal 1, r.zadd("foo", [4, "s1", 5, "s2", 6, "s3"])
57
+ assert_equal 3, r.zcard("foo")
58
+ r.del "foo"
59
+
60
+ # Nested array with pairs
61
+ assert_equal 0, r.zcard("foo")
62
+ assert_equal 2, r.zadd("foo", [[1, "s1"], [2, "s2"]])
63
+ assert_equal 1, r.zadd("foo", [[4, "s1"], [5, "s2"], [6, "s3"]])
64
+ assert_equal 3, r.zcard("foo")
65
+ r.del "foo"
66
+
67
+ # Wrong number of arguments
68
+ assert_raise(Redis::CommandError) { r.zadd("foo", ["bar"]) }
69
+ assert_raise(Redis::CommandError) { r.zadd("foo", ["bar", "qux", "zap"]) }
70
+ end
71
+
72
+ target_version "3.0.2" do
73
+ # XX option
74
+ assert_equal 0, r.zcard("foo")
75
+ assert_equal 0, r.zadd("foo", [1, "s1", 2, "s2"], :xx => true)
76
+ r.zadd("foo", [1, "s1", 2, "s2"])
77
+ assert_equal 0, r.zadd("foo", [2, "s1", 3, "s2", 4, "s3"], :xx => true)
78
+ assert_equal 2, r.zscore("foo", "s1")
79
+ assert_equal 3, r.zscore("foo", "s2")
80
+ assert_equal nil, r.zscore("foo", "s3")
81
+ assert_equal 2, r.zcard("foo")
82
+ r.del "foo"
83
+
84
+ # NX option
85
+ assert_equal 0, r.zcard("foo")
86
+ assert_equal 2, r.zadd("foo", [1, "s1", 2, "s2"], :nx => true)
87
+ assert_equal 1, r.zadd("foo", [2, "s1", 3, "s2", 4, "s3"], :nx => true)
88
+ assert_equal 1, r.zscore("foo", "s1")
89
+ assert_equal 2, r.zscore("foo", "s2")
90
+ assert_equal 4, r.zscore("foo", "s3")
91
+ assert_equal 3, r.zcard("foo")
92
+ r.del "foo"
93
+
94
+ # CH option
95
+ assert_equal 0, r.zcard("foo")
96
+ assert_equal 2, r.zadd("foo", [1, "s1", 2, "s2"], :ch => true)
97
+ assert_equal 2, r.zadd("foo", [1, "s1", 3, "s2", 4, "s3"], :ch => true)
98
+ assert_equal 3, r.zcard("foo")
99
+ r.del "foo"
100
+
101
+ # INCR option
102
+ assert_equal 1.0, r.zadd("foo", [1, "s1"], :incr => true)
103
+ assert_equal 11.0, r.zadd("foo", [10, "s1"], :incr => true)
104
+ assert_equal -Infinity, r.zadd("bar", ["-inf", "s1"], :incr => true)
105
+ assert_equal +Infinity, r.zadd("bar", ["+inf", "s2"], :incr => true)
106
+ assert_raise(Redis::CommandError) { r.zadd("foo", [1, "s1", 2, "s2"], :incr => true) }
107
+ r.del "foo", "bar"
108
+
109
+ # Incompatible options combination
110
+ assert_raise(Redis::CommandError) { r.zadd("foo", [1, "s1"], :xx => true, :nx => true) }
111
+ end
112
+ end
113
+
114
+ def test_zrem
115
+ r.zadd("foo", 1, "s1")
116
+ r.zadd("foo", 2, "s2")
117
+
118
+ assert_equal 2, r.zcard("foo")
119
+ assert_equal true, r.zrem("foo", "s1")
120
+ assert_equal false, r.zrem("foo", "s1")
121
+ assert_equal 1, r.zcard("foo")
122
+ end
123
+
124
+ def test_variadic_zrem
125
+ target_version "2.3.9" do # 2.4-rc6
126
+ r.zadd("foo", 1, "s1")
127
+ r.zadd("foo", 2, "s2")
128
+ r.zadd("foo", 3, "s3")
129
+
130
+ assert_equal 3, r.zcard("foo")
131
+ assert_equal 1, r.zrem("foo", ["s1", "aaa"])
132
+ assert_equal 0, r.zrem("foo", ["bbb", "ccc" "ddd"])
133
+ assert_equal 1, r.zrem("foo", ["eee", "s3"])
134
+ assert_equal 1, r.zcard("foo")
135
+ end
136
+ end
137
+
138
+ def test_zincrby
139
+ rv = r.zincrby "foo", 1, "s1"
140
+ assert_equal 1.0, rv
141
+
142
+ rv = r.zincrby "foo", 10, "s1"
143
+ assert_equal 11.0, rv
144
+
145
+ rv = r.zincrby "bar", "-inf", "s1"
146
+ assert_equal(-Infinity, rv)
147
+
148
+ rv = r.zincrby "bar", "+inf", "s2"
149
+ assert_equal(+Infinity, rv)
150
+ end
151
+
152
+ def test_zrank
153
+ r.zadd "foo", 1, "s1"
154
+ r.zadd "foo", 2, "s2"
155
+ r.zadd "foo", 3, "s3"
156
+
157
+ assert_equal 2, r.zrank("foo", "s3")
158
+ end
159
+
160
+ def test_zrevrank
161
+ r.zadd "foo", 1, "s1"
162
+ r.zadd "foo", 2, "s2"
163
+ r.zadd "foo", 3, "s3"
164
+
165
+ assert_equal 0, r.zrevrank("foo", "s3")
166
+ end
167
+
168
+ def test_zrange
169
+ r.zadd "foo", 1, "s1"
170
+ r.zadd "foo", 2, "s2"
171
+ r.zadd "foo", 3, "s3"
172
+
173
+ assert_equal ["s1", "s2"], r.zrange("foo", 0, 1)
174
+ assert_equal [["s1", 1.0], ["s2", 2.0]], r.zrange("foo", 0, 1, :with_scores => true)
175
+ assert_equal [["s1", 1.0], ["s2", 2.0]], r.zrange("foo", 0, 1, :withscores => true)
176
+
177
+ r.zadd "bar", "-inf", "s1"
178
+ r.zadd "bar", "+inf", "s2"
179
+ assert_equal [["s1", -Infinity], ["s2", +Infinity]], r.zrange("bar", 0, 1, :with_scores => true)
180
+ assert_equal [["s1", -Infinity], ["s2", +Infinity]], r.zrange("bar", 0, 1, :withscores => true)
181
+ end
182
+
183
+ def test_zrevrange
184
+ r.zadd "foo", 1, "s1"
185
+ r.zadd "foo", 2, "s2"
186
+ r.zadd "foo", 3, "s3"
187
+
188
+ assert_equal ["s3", "s2"], r.zrevrange("foo", 0, 1)
189
+ assert_equal [["s3", 3.0], ["s2", 2.0]], r.zrevrange("foo", 0, 1, :with_scores => true)
190
+ assert_equal [["s3", 3.0], ["s2", 2.0]], r.zrevrange("foo", 0, 1, :withscores => true)
191
+
192
+ r.zadd "bar", "-inf", "s1"
193
+ r.zadd "bar", "+inf", "s2"
194
+ assert_equal [["s2", +Infinity], ["s1", -Infinity]], r.zrevrange("bar", 0, 1, :with_scores => true)
195
+ assert_equal [["s2", +Infinity], ["s1", -Infinity]], r.zrevrange("bar", 0, 1, :withscores => true)
196
+ end
197
+
198
+ def test_zrangebyscore
199
+ r.zadd "foo", 1, "s1"
200
+ r.zadd "foo", 2, "s2"
201
+ r.zadd "foo", 3, "s3"
202
+
203
+ assert_equal ["s2", "s3"], r.zrangebyscore("foo", 2, 3)
204
+ end
205
+
206
+ def test_zrevrangebyscore
207
+ r.zadd "foo", 1, "s1"
208
+ r.zadd "foo", 2, "s2"
209
+ r.zadd "foo", 3, "s3"
210
+
211
+ assert_equal ["s3", "s2"], r.zrevrangebyscore("foo", 3, 2)
212
+ end
213
+
214
+ def test_zrangebyscore_with_limit
215
+ r.zadd "foo", 1, "s1"
216
+ r.zadd "foo", 2, "s2"
217
+ r.zadd "foo", 3, "s3"
218
+ r.zadd "foo", 4, "s4"
219
+
220
+ assert_equal ["s2"], r.zrangebyscore("foo", 2, 4, :limit => [0, 1])
221
+ assert_equal ["s3"], r.zrangebyscore("foo", 2, 4, :limit => [1, 1])
222
+ assert_equal ["s3", "s4"], r.zrangebyscore("foo", 2, 4, :limit => [1, 2])
223
+ end
224
+
225
+ def test_zrevrangebyscore_with_limit
226
+ r.zadd "foo", 1, "s1"
227
+ r.zadd "foo", 2, "s2"
228
+ r.zadd "foo", 3, "s3"
229
+ r.zadd "foo", 4, "s4"
230
+
231
+ assert_equal ["s4"], r.zrevrangebyscore("foo", 4, 2, :limit => [0, 1])
232
+ assert_equal ["s3"], r.zrevrangebyscore("foo", 4, 2, :limit => [1, 1])
233
+ assert_equal ["s3", "s2"], r.zrevrangebyscore("foo", 4, 2, :limit => [1, 2])
234
+ end
235
+
236
+ def test_zrangebyscore_with_withscores
237
+ r.zadd "foo", 1, "s1"
238
+ r.zadd "foo", 2, "s2"
239
+ r.zadd "foo", 3, "s3"
240
+ r.zadd "foo", 4, "s4"
241
+
242
+ assert_equal [["s2", 2.0]], r.zrangebyscore("foo", 2, 4, :limit => [0, 1], :with_scores => true)
243
+ assert_equal [["s3", 3.0]], r.zrangebyscore("foo", 2, 4, :limit => [1, 1], :with_scores => true)
244
+ assert_equal [["s2", 2.0]], r.zrangebyscore("foo", 2, 4, :limit => [0, 1], :withscores => true)
245
+ assert_equal [["s3", 3.0]], r.zrangebyscore("foo", 2, 4, :limit => [1, 1], :withscores => true)
246
+
247
+ r.zadd "bar", "-inf", "s1"
248
+ r.zadd "bar", "+inf", "s2"
249
+ assert_equal [["s1", -Infinity]], r.zrangebyscore("bar", -Infinity, +Infinity, :limit => [0, 1], :with_scores => true)
250
+ assert_equal [["s2", +Infinity]], r.zrangebyscore("bar", -Infinity, +Infinity, :limit => [1, 1], :with_scores => true)
251
+ assert_equal [["s1", -Infinity]], r.zrangebyscore("bar", -Infinity, +Infinity, :limit => [0, 1], :withscores => true)
252
+ assert_equal [["s2", +Infinity]], r.zrangebyscore("bar", -Infinity, +Infinity, :limit => [1, 1], :withscores => true)
253
+ end
254
+
255
+ def test_zrevrangebyscore_with_withscores
256
+ r.zadd "foo", 1, "s1"
257
+ r.zadd "foo", 2, "s2"
258
+ r.zadd "foo", 3, "s3"
259
+ r.zadd "foo", 4, "s4"
260
+
261
+ assert_equal [["s4", 4.0]], r.zrevrangebyscore("foo", 4, 2, :limit => [0, 1], :with_scores => true)
262
+ assert_equal [["s3", 3.0]], r.zrevrangebyscore("foo", 4, 2, :limit => [1, 1], :with_scores => true)
263
+ assert_equal [["s4", 4.0]], r.zrevrangebyscore("foo", 4, 2, :limit => [0, 1], :withscores => true)
264
+ assert_equal [["s3", 3.0]], r.zrevrangebyscore("foo", 4, 2, :limit => [1, 1], :withscores => true)
265
+
266
+ r.zadd "bar", "-inf", "s1"
267
+ r.zadd "bar", "+inf", "s2"
268
+ assert_equal [["s2", +Infinity]], r.zrevrangebyscore("bar", +Infinity, -Infinity, :limit => [0, 1], :with_scores => true)
269
+ assert_equal [["s1", -Infinity]], r.zrevrangebyscore("bar", +Infinity, -Infinity, :limit => [1, 1], :with_scores => true)
270
+ assert_equal [["s2", +Infinity]], r.zrevrangebyscore("bar", +Infinity, -Infinity, :limit => [0, 1], :withscores => true)
271
+ assert_equal [["s1", -Infinity]], r.zrevrangebyscore("bar", +Infinity, -Infinity, :limit => [1, 1], :withscores => true)
272
+ end
273
+
274
+ def test_zcard
275
+ assert_equal 0, r.zcard("foo")
276
+
277
+ r.zadd "foo", 1, "s1"
278
+
279
+ assert_equal 1, r.zcard("foo")
280
+ end
281
+
282
+ def test_zscore
283
+ r.zadd "foo", 1, "s1"
284
+
285
+ assert_equal 1.0, r.zscore("foo", "s1")
286
+
287
+ assert_equal nil, r.zscore("foo", "s2")
288
+ assert_equal nil, r.zscore("bar", "s1")
289
+
290
+ r.zadd "bar", "-inf", "s1"
291
+ r.zadd "bar", "+inf", "s2"
292
+ assert_equal(-Infinity, r.zscore("bar", "s1"))
293
+ assert_equal(+Infinity, r.zscore("bar", "s2"))
294
+ end
295
+
296
+ def test_zremrangebyrank
297
+ r.zadd "foo", 10, "s1"
298
+ r.zadd "foo", 20, "s2"
299
+ r.zadd "foo", 30, "s3"
300
+ r.zadd "foo", 40, "s4"
301
+
302
+ assert_equal 3, r.zremrangebyrank("foo", 1, 3)
303
+ assert_equal ["s1"], r.zrange("foo", 0, -1)
304
+ end
305
+
306
+ def test_zremrangebyscore
307
+ r.zadd "foo", 1, "s1"
308
+ r.zadd "foo", 2, "s2"
309
+ r.zadd "foo", 3, "s3"
310
+ r.zadd "foo", 4, "s4"
311
+
312
+ assert_equal 3, r.zremrangebyscore("foo", 2, 4)
313
+ assert_equal ["s1"], r.zrange("foo", 0, -1)
314
+ end
315
+ end
316
+ end
@@ -0,0 +1,260 @@
1
+ module Lint
2
+
3
+ module Strings
4
+
5
+ def test_set_and_get
6
+ r.set("foo", "s1")
7
+
8
+ assert_equal "s1", r.get("foo")
9
+ end
10
+
11
+ def test_set_and_get_with_brackets
12
+ r["foo"] = "s1"
13
+
14
+ assert_equal "s1", r["foo"]
15
+ end
16
+
17
+ def test_set_and_get_with_brackets_and_symbol
18
+ r[:foo] = "s1"
19
+
20
+ assert_equal "s1", r[:foo]
21
+ end
22
+
23
+ def test_set_and_get_with_newline_characters
24
+ r.set("foo", "1\n")
25
+
26
+ assert_equal "1\n", r.get("foo")
27
+ end
28
+
29
+ def test_set_and_get_with_non_string_value
30
+ value = ["a", "b"]
31
+
32
+ r.set("foo", value)
33
+
34
+ assert_equal value.to_s, r.get("foo")
35
+ end
36
+
37
+ def test_set_and_get_with_ascii_characters
38
+ if defined?(Encoding)
39
+ with_external_encoding("ASCII-8BIT") do
40
+ (0..255).each do |i|
41
+ str = "#{i.chr}---#{i.chr}"
42
+ r.set("foo", str)
43
+
44
+ assert_equal str, r.get("foo")
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ def test_set_with_ex
51
+ target_version "2.6.12" do
52
+ r.set("foo", "bar", :ex => 2)
53
+ assert_in_range 0..2, r.ttl("foo")
54
+ end
55
+ end
56
+
57
+ def test_set_with_px
58
+ target_version "2.6.12" do
59
+ r.set("foo", "bar", :px => 2000)
60
+ assert_in_range 0..2, r.ttl("foo")
61
+ end
62
+ end
63
+
64
+ def test_set_with_nx
65
+ target_version "2.6.12" do
66
+ r.set("foo", "qux", :nx => true)
67
+ assert !r.set("foo", "bar", :nx => true)
68
+ assert_equal "qux", r.get("foo")
69
+
70
+ r.del("foo")
71
+ assert r.set("foo", "bar", :nx => true)
72
+ assert_equal "bar", r.get("foo")
73
+ end
74
+ end
75
+
76
+ def test_set_with_xx
77
+ target_version "2.6.12" do
78
+ r.set("foo", "qux")
79
+ assert r.set("foo", "bar", :xx => true)
80
+ assert_equal "bar", r.get("foo")
81
+
82
+ r.del("foo")
83
+ assert !r.set("foo", "bar", :xx => true)
84
+ end
85
+ end
86
+
87
+ def test_setex
88
+ assert r.setex("foo", 1, "bar")
89
+ assert_equal "bar", r.get("foo")
90
+ assert [0, 1].include? r.ttl("foo")
91
+ end
92
+
93
+ def test_setex_with_non_string_value
94
+ value = ["b", "a", "r"]
95
+
96
+ assert r.setex("foo", 1, value)
97
+ assert_equal value.to_s, r.get("foo")
98
+ assert [0, 1].include? r.ttl("foo")
99
+ end
100
+
101
+ def test_psetex
102
+ target_version "2.5.4" do
103
+ assert r.psetex("foo", 1000, "bar")
104
+ assert_equal "bar", r.get("foo")
105
+ assert [0, 1].include? r.ttl("foo")
106
+ end
107
+ end
108
+
109
+ def test_psetex_with_non_string_value
110
+ target_version "2.5.4" do
111
+ value = ["b", "a", "r"]
112
+
113
+ assert r.psetex("foo", 1000, value)
114
+ assert_equal value.to_s, r.get("foo")
115
+ assert [0, 1].include? r.ttl("foo")
116
+ end
117
+ end
118
+
119
+ def test_getset
120
+ r.set("foo", "bar")
121
+
122
+ assert_equal "bar", r.getset("foo", "baz")
123
+ assert_equal "baz", r.get("foo")
124
+ end
125
+
126
+ def test_getset_with_non_string_value
127
+ r.set("foo", "zap")
128
+
129
+ value = ["b", "a", "r"]
130
+
131
+ assert_equal "zap", r.getset("foo", value)
132
+ assert_equal value.to_s, r.get("foo")
133
+ end
134
+
135
+ def test_setnx
136
+ r.set("foo", "qux")
137
+ assert !r.setnx("foo", "bar")
138
+ assert_equal "qux", r.get("foo")
139
+
140
+ r.del("foo")
141
+ assert r.setnx("foo", "bar")
142
+ assert_equal "bar", r.get("foo")
143
+ end
144
+
145
+ def test_setnx_with_non_string_value
146
+ value = ["b", "a", "r"]
147
+
148
+ r.set("foo", "qux")
149
+ assert !r.setnx("foo", value)
150
+ assert_equal "qux", r.get("foo")
151
+
152
+ r.del("foo")
153
+ assert r.setnx("foo", value)
154
+ assert_equal value.to_s, r.get("foo")
155
+ end
156
+
157
+ def test_incr
158
+ assert_equal 1, r.incr("foo")
159
+ assert_equal 2, r.incr("foo")
160
+ assert_equal 3, r.incr("foo")
161
+ end
162
+
163
+ def test_incrby
164
+ assert_equal 1, r.incrby("foo", 1)
165
+ assert_equal 3, r.incrby("foo", 2)
166
+ assert_equal 6, r.incrby("foo", 3)
167
+ end
168
+
169
+ def test_incrbyfloat
170
+ target_version "2.5.4" do
171
+ assert_equal 1.23, r.incrbyfloat("foo", 1.23)
172
+ assert_equal 2 , r.incrbyfloat("foo", 0.77)
173
+ assert_equal 1.9 , r.incrbyfloat("foo", -0.1)
174
+ end
175
+ end
176
+
177
+ def test_decr
178
+ r.set("foo", 3)
179
+
180
+ assert_equal 2, r.decr("foo")
181
+ assert_equal 1, r.decr("foo")
182
+ assert_equal 0, r.decr("foo")
183
+ end
184
+
185
+ def test_decrby
186
+ r.set("foo", 6)
187
+
188
+ assert_equal 3, r.decrby("foo", 3)
189
+ assert_equal 1, r.decrby("foo", 2)
190
+ assert_equal 0, r.decrby("foo", 1)
191
+ end
192
+
193
+ def test_append
194
+ r.set "foo", "s"
195
+ r.append "foo", "1"
196
+
197
+ assert_equal "s1", r.get("foo")
198
+ end
199
+
200
+ def test_getbit
201
+ r.set("foo", "a")
202
+
203
+ assert_equal 1, r.getbit("foo", 1)
204
+ assert_equal 1, r.getbit("foo", 2)
205
+ assert_equal 0, r.getbit("foo", 3)
206
+ assert_equal 0, r.getbit("foo", 4)
207
+ assert_equal 0, r.getbit("foo", 5)
208
+ assert_equal 0, r.getbit("foo", 6)
209
+ assert_equal 1, r.getbit("foo", 7)
210
+ end
211
+
212
+ def test_setbit
213
+ r.set("foo", "a")
214
+
215
+ r.setbit("foo", 6, 1)
216
+
217
+ assert_equal "c", r.get("foo")
218
+ end
219
+
220
+ def test_bitcount
221
+ target_version "2.5.10" do
222
+ r.set("foo", "abcde")
223
+
224
+ assert_equal 10, r.bitcount("foo", 1, 3)
225
+ assert_equal 17, r.bitcount("foo", 0, -1)
226
+ end
227
+ end
228
+
229
+ def test_getrange
230
+ r.set("foo", "abcde")
231
+
232
+ assert_equal "bcd", r.getrange("foo", 1, 3)
233
+ assert_equal "abcde", r.getrange("foo", 0, -1)
234
+ end
235
+
236
+ def test_setrange
237
+ r.set("foo", "abcde")
238
+
239
+ r.setrange("foo", 1, "bar")
240
+
241
+ assert_equal "abare", r.get("foo")
242
+ end
243
+
244
+ def test_setrange_with_non_string_value
245
+ r.set("foo", "abcde")
246
+
247
+ value = ["b", "a", "r"]
248
+
249
+ r.setrange("foo", 2, value)
250
+
251
+ assert_equal "ab#{value.to_s}", r.get("foo")
252
+ end
253
+
254
+ def test_strlen
255
+ r.set "foo", "lorem"
256
+
257
+ assert_equal 5, r.strlen("foo")
258
+ end
259
+ end
260
+ end