discourse-redis 3.2.2

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.
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