xqsr3 0.8.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 +7 -0
- data/LICENSE +27 -0
- data/README.md +26 -0
- data/lib/xqsr3/command_line_utilities/map_option_string.rb +137 -0
- data/lib/xqsr3/containers/frequency_map.rb +473 -0
- data/lib/xqsr3/containers/multi_map.rb +383 -0
- data/lib/xqsr3/diagnostics/exception_utilities.rb +216 -0
- data/lib/xqsr3/doc_.rb +116 -0
- data/lib/xqsr3/extensions/enumerable.rb +4 -0
- data/lib/xqsr3/extensions/enumerable/collect_with_index.rb +71 -0
- data/lib/xqsr3/extensions/enumerable/unique.rb +102 -0
- data/lib/xqsr3/extensions/io.rb +3 -0
- data/lib/xqsr3/extensions/io/writelines.rb +66 -0
- data/lib/xqsr3/extensions/kernel.rb +3 -0
- data/lib/xqsr3/extensions/kernel/raise_with_options.rb +68 -0
- data/lib/xqsr3/extensions/string.rb +5 -0
- data/lib/xqsr3/extensions/string/ends_with.rb +8 -0
- data/lib/xqsr3/extensions/string/map_option_string.rb +8 -0
- data/lib/xqsr3/extensions/string/starts_with.rb +8 -0
- data/lib/xqsr3/extensions/string/to_symbol.rb +8 -0
- data/lib/xqsr3/extensions/test/unit.rb +5 -0
- data/lib/xqsr3/extensions/test/unit/assert_eql.rb +18 -0
- data/lib/xqsr3/extensions/test/unit/assert_not.rb +18 -0
- data/lib/xqsr3/extensions/test/unit/assert_not_eql.rb +18 -0
- data/lib/xqsr3/io/writelines.rb +192 -0
- data/lib/xqsr3/quality/parameter_checking.rb +343 -0
- data/lib/xqsr3/string_utilities/ends_with.rb +134 -0
- data/lib/xqsr3/string_utilities/starts_with.rb +127 -0
- data/lib/xqsr3/string_utilities/to_symbol.rb +145 -0
- data/lib/xqsr3/version.rb +68 -0
- data/test/unit/command_line_utilities/tc_map_option_string.rb +39 -0
- data/test/unit/command_line_utilities/ts_all.rb +13 -0
- data/test/unit/containers/tc_frequency_map.rb +738 -0
- data/test/unit/containers/tc_multi_map.rb +640 -0
- data/test/unit/containers/ts_all.rb +13 -0
- data/test/unit/diagnostics/tc_exception_utilities.rb +221 -0
- data/test/unit/diagnostics/ts_all.rb +13 -0
- data/test/unit/extensions/enumerable/tc_collect_with_index.rb +36 -0
- data/test/unit/extensions/enumerable/tc_unique.rb +47 -0
- data/test/unit/extensions/enumerable/ts_all.rb +13 -0
- data/test/unit/extensions/io/tc_writelines.rb +110 -0
- data/test/unit/extensions/io/ts_all.rb +13 -0
- data/test/unit/extensions/kernel/tc_raise_with_options.rb +239 -0
- data/test/unit/extensions/kernel/ts_all.rb +13 -0
- data/test/unit/extensions/string/tc_ends_with.rb +70 -0
- data/test/unit/extensions/string/tc_map_option_string.rb +37 -0
- data/test/unit/extensions/string/tc_starts_with.rb +70 -0
- data/test/unit/extensions/string/tc_to_symbol.rb +51 -0
- data/test/unit/extensions/string/ts_all.rb +13 -0
- data/test/unit/extensions/ts_all.rb +13 -0
- data/test/unit/io/tc_writelines.rb +200 -0
- data/test/unit/io/ts_all.rb +13 -0
- data/test/unit/quality/tc_parameter_checking.rb +181 -0
- data/test/unit/quality/ts_all.rb +13 -0
- data/test/unit/tc_version.rb +37 -0
- data/test/unit/ts_all.rb +13 -0
- metadata +101 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../../../lib')
|
4
|
+
|
5
|
+
require 'xqsr3/command_line_utilities/map_option_string'
|
6
|
+
|
7
|
+
require 'xqsr3/extensions/test/unit'
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
include ::Xqsr3::CommandLineUtilities
|
11
|
+
|
12
|
+
class Test_Xqsr3_CommandLineUtilities_map_option_string < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_simple_uses
|
15
|
+
|
16
|
+
assert_nil MapOptionString.map_option_string_from_string 'abc', [ 'option-1', 'option-2' ]
|
17
|
+
|
18
|
+
assert_equal :abc, MapOptionString.map_option_string_from_string('abc', [ 'abc' ])
|
19
|
+
|
20
|
+
assert_equal :option_1, MapOptionString.map_option_string_from_string('option-1', [ 'option-1', 'option-2' ])
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_shortcuts
|
24
|
+
|
25
|
+
option_strings = [ '[n]ame-only', '[f]ull-[p]ath' ]
|
26
|
+
|
27
|
+
assert_equal :name_only, MapOptionString.map_option_string_from_string('name-only', option_strings)
|
28
|
+
assert_equal :full_path, MapOptionString.map_option_string_from_string('full-path', option_strings)
|
29
|
+
|
30
|
+
assert_equal :name_only, MapOptionString.map_option_string_from_string('n', option_strings)
|
31
|
+
assert_equal :full_path, MapOptionString.map_option_string_from_string('fp', option_strings)
|
32
|
+
|
33
|
+
%w{ a m e - o l y u l p a t h }.each do |shortcut|
|
34
|
+
|
35
|
+
assert_nil MapOptionString.map_option_string_from_string(shortcut, option_strings)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
#
|
3
|
+
# executes all other tests
|
4
|
+
|
5
|
+
this_file = File.expand_path(__FILE__)
|
6
|
+
this_dir = File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
# all tc_*rb in current directory
|
9
|
+
Dir[File.join(this_dir, 'tc_*rb')].each { |file| require file }
|
10
|
+
|
11
|
+
# all ts_*rb in immediate sub-directories
|
12
|
+
Dir[File.join(this_dir, '*', 'ts_*rb')].each { |file| require file }
|
13
|
+
|
@@ -0,0 +1,738 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '../../../lib')
|
4
|
+
|
5
|
+
require 'xqsr3/containers/frequency_map'
|
6
|
+
|
7
|
+
require 'xqsr3/extensions/test/unit'
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
include ::Xqsr3::Containers
|
11
|
+
|
12
|
+
class Test_Xqsr3_Containers_FrequencyMap < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_class_operator_subscript_1
|
15
|
+
|
16
|
+
fm1 = FrequencyMap[]
|
17
|
+
|
18
|
+
assert_equal 0, fm1.count
|
19
|
+
assert fm1.empty?
|
20
|
+
assert_equal 0, fm1.size
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_class_operator_subscript_2
|
24
|
+
|
25
|
+
fm2 = FrequencyMap[ abc: 1, def: 2 ]
|
26
|
+
|
27
|
+
assert_equal 3, fm2.count
|
28
|
+
assert_not fm2.empty?
|
29
|
+
assert_equal 2, fm2.size
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_class_operator_subscript_3
|
33
|
+
|
34
|
+
fm3 = FrequencyMap[ [ [ :abc, 1 ], [ :def, 2 ] ] ]
|
35
|
+
|
36
|
+
assert_equal 3, fm3.count
|
37
|
+
assert_not fm3.empty?
|
38
|
+
assert_equal 2, fm3.size
|
39
|
+
|
40
|
+
assert_raise(::TypeError) { FrequencyMap[ [ [ :abc, 1 ], [ :def, '2' ] ] ] }
|
41
|
+
assert_raise(::ArgumentError) { FrequencyMap[ [ [ :abc, 1 ], [ :def ] ] ] }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_class_operator_subscript_4
|
45
|
+
|
46
|
+
fm3 = FrequencyMap[ [ :abc, 1, :def, 2 ] ]
|
47
|
+
|
48
|
+
assert_equal 3, fm3.count
|
49
|
+
assert_not fm3.empty?
|
50
|
+
assert_equal 2, fm3.size
|
51
|
+
|
52
|
+
fm4 = FrequencyMap[ [] ]
|
53
|
+
|
54
|
+
assert_equal 0, fm4.count
|
55
|
+
assert fm4.empty?
|
56
|
+
assert_equal 0, fm4.size
|
57
|
+
|
58
|
+
assert_raise(::ArgumentError) { FrequencyMap[ [ :abc, 1, :def, '2' ] ] }
|
59
|
+
assert_raise(::ArgumentError) { FrequencyMap[ [ :abc, 1, :def ] ] }
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_class_operator_subscript_5
|
63
|
+
|
64
|
+
assert_raise(::ArgumentError) { FrequencyMap[ [ :abc ] ] }
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_class_operator_subscript_6
|
68
|
+
|
69
|
+
assert_raise(::TypeError) { FrequencyMap[ :abc ] }
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_class_operator_subscript_7
|
73
|
+
|
74
|
+
fm3 = FrequencyMap[ :abc, 1, :def, 2 ]
|
75
|
+
|
76
|
+
assert_equal 3, fm3.count
|
77
|
+
assert_not fm3.empty?
|
78
|
+
assert_equal 2, fm3.size
|
79
|
+
|
80
|
+
fm4 = FrequencyMap[]
|
81
|
+
|
82
|
+
assert_equal 0, fm4.count
|
83
|
+
assert fm4.empty?
|
84
|
+
assert_equal 0, fm4.size
|
85
|
+
|
86
|
+
assert_raise(::ArgumentError) { FrequencyMap[ :abc, 1, :def, '2' ] }
|
87
|
+
assert_raise(::ArgumentError) { FrequencyMap[ :abc, 1, :def ] }
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_class_operator_subscript_8
|
91
|
+
|
92
|
+
fm = FrequencyMap::ByElement[ :abc, :def, :abc, 1, :ghi, 'jkl', :abc, 1, 'jkl' ]
|
93
|
+
|
94
|
+
assert_equal 9, fm.count
|
95
|
+
assert_not fm.empty?
|
96
|
+
assert_equal 5, fm.size
|
97
|
+
|
98
|
+
assert_equal 3, fm[:abc]
|
99
|
+
assert_equal 1, fm[:def]
|
100
|
+
assert_equal 2, fm[1]
|
101
|
+
assert_equal 1, fm[:ghi]
|
102
|
+
assert_equal 2, fm['jkl']
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_instance_operator_equals
|
106
|
+
|
107
|
+
fm1 = FrequencyMap.new
|
108
|
+
fm2 = FrequencyMap.new
|
109
|
+
|
110
|
+
assert fm1 == fm1
|
111
|
+
assert fm2 == fm2
|
112
|
+
assert fm1 == fm2
|
113
|
+
|
114
|
+
fm1 << :abc << :def
|
115
|
+
|
116
|
+
assert fm1 == fm1
|
117
|
+
assert fm2 == fm2
|
118
|
+
assert_not fm1 == fm2
|
119
|
+
|
120
|
+
fm2 << :def << :abc
|
121
|
+
|
122
|
+
assert fm1 == fm1
|
123
|
+
assert fm2 == fm2
|
124
|
+
assert fm1 == fm2
|
125
|
+
|
126
|
+
# can compare against Hash
|
127
|
+
|
128
|
+
fm1 = FrequencyMap.new
|
129
|
+
fm2 = Hash.new
|
130
|
+
|
131
|
+
assert fm1 == fm1
|
132
|
+
assert fm2 == fm2
|
133
|
+
assert fm1 == fm2
|
134
|
+
|
135
|
+
fm1 << :abc << :def
|
136
|
+
|
137
|
+
assert_not fm1 == fm2
|
138
|
+
assert fm1 == fm1
|
139
|
+
assert fm2 == fm2
|
140
|
+
|
141
|
+
fm2[:abc] = 1
|
142
|
+
fm2[:def] = 1
|
143
|
+
|
144
|
+
assert fm1 == fm1
|
145
|
+
assert fm2 == fm2
|
146
|
+
assert fm1 == fm2
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_instance_operator_subscript
|
150
|
+
|
151
|
+
fm = FrequencyMap.new
|
152
|
+
|
153
|
+
assert_nil fm[:abc]
|
154
|
+
assert_nil fm[:def]
|
155
|
+
|
156
|
+
fm << :abc
|
157
|
+
|
158
|
+
assert_equal 1, fm[:abc]
|
159
|
+
assert_nil fm[:def]
|
160
|
+
|
161
|
+
fm << :def << :def << :def
|
162
|
+
|
163
|
+
assert_equal 1, fm[:abc]
|
164
|
+
assert_equal 3, fm[:def]
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_instance_operator_subscript_assign
|
168
|
+
|
169
|
+
fm = FrequencyMap.new
|
170
|
+
|
171
|
+
fm[:abc] = 1
|
172
|
+
|
173
|
+
assert_equal 1, fm[:abc]
|
174
|
+
|
175
|
+
fm[:def] = 3
|
176
|
+
|
177
|
+
assert_equal 3, fm[:def]
|
178
|
+
|
179
|
+
fm[:abc] = 2
|
180
|
+
|
181
|
+
assert_equal 2, fm[:abc]
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_assoc
|
185
|
+
|
186
|
+
fm = FrequencyMap.new
|
187
|
+
|
188
|
+
assert_nil fm.assoc :abc
|
189
|
+
|
190
|
+
fm << :abc
|
191
|
+
|
192
|
+
assert_equal [:abc, 1], fm.assoc(:abc)
|
193
|
+
|
194
|
+
fm << :abc
|
195
|
+
|
196
|
+
assert_equal [:abc, 2], fm.assoc(:abc)
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_clear
|
200
|
+
|
201
|
+
fm = FrequencyMap.new
|
202
|
+
|
203
|
+
assert_nil fm['abc']
|
204
|
+
assert_equal 0, fm.count
|
205
|
+
assert fm.empty?
|
206
|
+
assert_equal 0, fm.size
|
207
|
+
|
208
|
+
fm << 'abc'
|
209
|
+
|
210
|
+
assert_not_nil fm['abc']
|
211
|
+
assert_equal 1, fm.count
|
212
|
+
assert_not fm.empty?
|
213
|
+
assert_equal 1, fm.size
|
214
|
+
|
215
|
+
fm.clear
|
216
|
+
|
217
|
+
assert_nil fm['abc']
|
218
|
+
assert_equal 0, fm.count
|
219
|
+
assert fm.empty?
|
220
|
+
assert_equal 0, fm.size
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_count_and_delete
|
224
|
+
|
225
|
+
fm = FrequencyMap.new
|
226
|
+
|
227
|
+
assert_equal 0, fm.count
|
228
|
+
|
229
|
+
fm << :abc
|
230
|
+
|
231
|
+
assert_equal 1, fm.count
|
232
|
+
|
233
|
+
fm << :abc
|
234
|
+
|
235
|
+
assert_equal 2, fm.count
|
236
|
+
|
237
|
+
fm << :def
|
238
|
+
|
239
|
+
assert_equal 3, fm.count
|
240
|
+
|
241
|
+
fm.delete :ghi
|
242
|
+
|
243
|
+
assert_equal 3, fm.count
|
244
|
+
|
245
|
+
fm.delete :abc
|
246
|
+
|
247
|
+
assert_equal 1, fm.count
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_count
|
251
|
+
|
252
|
+
test_count_and_delete
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_default
|
256
|
+
|
257
|
+
fm = FrequencyMap.new
|
258
|
+
|
259
|
+
assert_nil fm.default
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_delete
|
263
|
+
|
264
|
+
test_count_and_delete
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_dup
|
268
|
+
|
269
|
+
fm1 = FrequencyMap.new
|
270
|
+
fm2 = fm1.dup
|
271
|
+
|
272
|
+
assert_equal fm1, fm2
|
273
|
+
assert_eql fm1, fm2
|
274
|
+
|
275
|
+
fm1 << :abc
|
276
|
+
|
277
|
+
assert_not_equal fm1, fm2
|
278
|
+
assert_not_eql fm1, fm2
|
279
|
+
|
280
|
+
fm3 = fm1.dup
|
281
|
+
|
282
|
+
assert_equal fm1, fm3
|
283
|
+
assert_eql fm1, fm3
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_each
|
287
|
+
|
288
|
+
fm = FrequencyMap.new
|
289
|
+
|
290
|
+
fm << :def
|
291
|
+
fm << :abc << :abc << :abc << :abc
|
292
|
+
fm << :ghi << :ghi
|
293
|
+
|
294
|
+
r = []
|
295
|
+
|
296
|
+
fm.each do |k, v|
|
297
|
+
|
298
|
+
r << [k, v]
|
299
|
+
end
|
300
|
+
|
301
|
+
r.sort! { |a, b| a[0] <=> b[0] }
|
302
|
+
|
303
|
+
assert_equal 3, r.size
|
304
|
+
assert_equal [:abc, 4], r[0]
|
305
|
+
assert_equal [:def, 1], r[1]
|
306
|
+
assert_equal [:ghi, 2], r[2]
|
307
|
+
end
|
308
|
+
|
309
|
+
def test_each_by_frequency
|
310
|
+
|
311
|
+
fm = FrequencyMap.new
|
312
|
+
|
313
|
+
fm << :def
|
314
|
+
fm << :abc << :abc << :abc << :abc
|
315
|
+
fm << :ghi << :ghi
|
316
|
+
|
317
|
+
r = []
|
318
|
+
|
319
|
+
fm.each_by_frequency do |k, v|
|
320
|
+
|
321
|
+
r << [k, v]
|
322
|
+
end
|
323
|
+
|
324
|
+
assert_equal 3, r.size
|
325
|
+
assert_equal [:abc, 4], r[0]
|
326
|
+
assert_equal [:ghi, 2], r[1]
|
327
|
+
assert_equal [:def, 1], r[2]
|
328
|
+
end
|
329
|
+
|
330
|
+
def each_value
|
331
|
+
|
332
|
+
fm = FrequencyMap.new
|
333
|
+
|
334
|
+
fm << :def
|
335
|
+
fm << :abc << :abc << :abc << :abc
|
336
|
+
fm << :ghi << :ghi
|
337
|
+
|
338
|
+
r = []
|
339
|
+
|
340
|
+
fm.each_value do |v|
|
341
|
+
|
342
|
+
r << [v]
|
343
|
+
end
|
344
|
+
|
345
|
+
r.sort!
|
346
|
+
|
347
|
+
assert_equal 3, r.size
|
348
|
+
assert_equal [1, 2, 4], r
|
349
|
+
end
|
350
|
+
|
351
|
+
def each_with_index
|
352
|
+
|
353
|
+
fm = FrequencyMap.new
|
354
|
+
|
355
|
+
fm << :def
|
356
|
+
fm << :abc << :abc << :abc << :abc
|
357
|
+
fm << :ghi << :ghi
|
358
|
+
|
359
|
+
fm.each_with_index do |k, v, index|
|
360
|
+
|
361
|
+
case index
|
362
|
+
when 0
|
363
|
+
assert_equal :abc, k
|
364
|
+
assert_equal 2, v
|
365
|
+
when 1
|
366
|
+
assert_equal :def, k
|
367
|
+
assert_equal 1, v
|
368
|
+
else
|
369
|
+
assert false, "should never get here"
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
def test_empty
|
375
|
+
|
376
|
+
fm = FrequencyMap.new
|
377
|
+
|
378
|
+
assert fm.empty?
|
379
|
+
|
380
|
+
fm << :def
|
381
|
+
|
382
|
+
assert_not fm.empty?
|
383
|
+
assert_equal 1, fm.size
|
384
|
+
assert_equal 1, fm.count
|
385
|
+
|
386
|
+
fm.clear
|
387
|
+
|
388
|
+
assert fm.empty?
|
389
|
+
|
390
|
+
assert_equal 0, fm.size
|
391
|
+
assert_equal 0, fm.count
|
392
|
+
end
|
393
|
+
|
394
|
+
def test_eql?
|
395
|
+
|
396
|
+
fm1 = FrequencyMap.new
|
397
|
+
fm2 = FrequencyMap.new
|
398
|
+
|
399
|
+
assert fm1.eql? fm1
|
400
|
+
assert fm2.eql? fm2
|
401
|
+
assert fm1.eql? fm2
|
402
|
+
|
403
|
+
fm1 << :abc << :def
|
404
|
+
|
405
|
+
assert fm1.eql? fm1
|
406
|
+
assert fm2.eql? fm2
|
407
|
+
assert_not fm1.eql? fm2
|
408
|
+
|
409
|
+
fm2 << :def << :abc
|
410
|
+
|
411
|
+
assert fm1.eql? fm1
|
412
|
+
assert fm2.eql? fm2
|
413
|
+
assert fm1.eql? fm2
|
414
|
+
|
415
|
+
assert_equal 2, fm1.size
|
416
|
+
assert_equal 2, fm1.count
|
417
|
+
end
|
418
|
+
|
419
|
+
def test_fetch
|
420
|
+
|
421
|
+
fm = FrequencyMap.new
|
422
|
+
|
423
|
+
assert_raise(::KeyError) { fm.fetch(:does_not_exist) }
|
424
|
+
assert_equal 2, fm.fetch(:does_not_exist, 2)
|
425
|
+
assert_raise(::TypeError) { fm.fetch(:does_not_exist, :wrong_type) }
|
426
|
+
assert_equal 33, fm.fetch(:does_not_exist) { |k| 33 }
|
427
|
+
assert_equal 34, fm.fetch(:does_not_exist) { 34 }
|
428
|
+
|
429
|
+
fm << :abc << :abc << :abc
|
430
|
+
|
431
|
+
assert_equal 3, fm.fetch(:abc)
|
432
|
+
assert_equal 3, fm.fetch(:abc, 1)
|
433
|
+
assert_equal 3, (fm.fetch(:abc) { |k| 33 })
|
434
|
+
|
435
|
+
assert_equal 1, fm.size
|
436
|
+
assert_equal 3, fm.count
|
437
|
+
end
|
438
|
+
|
439
|
+
def test_flatten
|
440
|
+
|
441
|
+
fm = FrequencyMap.new
|
442
|
+
|
443
|
+
assert_equal [], fm.flatten
|
444
|
+
|
445
|
+
fm << :def
|
446
|
+
|
447
|
+
assert_equal [:def, 1], fm.flatten
|
448
|
+
|
449
|
+
fm << :def
|
450
|
+
|
451
|
+
assert_equal [:def, 2], fm.flatten
|
452
|
+
|
453
|
+
fm << :abc
|
454
|
+
|
455
|
+
assert_equal [:def, 2, :abc, 1], fm.flatten
|
456
|
+
end
|
457
|
+
|
458
|
+
def test_has_key?
|
459
|
+
|
460
|
+
fm = FrequencyMap.new
|
461
|
+
|
462
|
+
assert_not fm.has_key? nil
|
463
|
+
assert_not fm.has_key? :abc
|
464
|
+
assert_not fm.has_key? 'abc'
|
465
|
+
|
466
|
+
fm << :abc
|
467
|
+
|
468
|
+
assert_not fm.has_key? nil
|
469
|
+
assert fm.has_key? :abc
|
470
|
+
assert_not fm.has_key? 'abc'
|
471
|
+
|
472
|
+
fm << 'abc'
|
473
|
+
|
474
|
+
assert_not fm.has_key? nil
|
475
|
+
assert fm.has_key? :abc
|
476
|
+
assert fm.has_key? 'abc'
|
477
|
+
end
|
478
|
+
|
479
|
+
def test_has_value?
|
480
|
+
|
481
|
+
fm = FrequencyMap.new
|
482
|
+
|
483
|
+
assert_not fm.has_value? 1
|
484
|
+
assert_not fm.has_value? 2
|
485
|
+
assert_raise(::TypeError) { fm.has_value? 1.1 }
|
486
|
+
|
487
|
+
fm << :abc
|
488
|
+
|
489
|
+
assert fm.has_value? 1
|
490
|
+
assert_not fm.has_value? 2
|
491
|
+
|
492
|
+
fm << :abc
|
493
|
+
|
494
|
+
assert_not fm.has_value? 1
|
495
|
+
assert fm.has_value? 2
|
496
|
+
end
|
497
|
+
|
498
|
+
def test_key
|
499
|
+
|
500
|
+
fm = FrequencyMap.new
|
501
|
+
|
502
|
+
assert_nil fm.key 1
|
503
|
+
assert_nil fm.key 2
|
504
|
+
assert_raise(::TypeError) { fm.key 1.1 }
|
505
|
+
|
506
|
+
fm << :abc
|
507
|
+
|
508
|
+
assert_equal :abc, fm.key(1)
|
509
|
+
assert_not_equal :abc, fm.key(2)
|
510
|
+
|
511
|
+
fm << :abc
|
512
|
+
|
513
|
+
assert_not_equal :abc, fm.key(1)
|
514
|
+
assert_equal :abc, fm.key(2)
|
515
|
+
end
|
516
|
+
|
517
|
+
def test_length_and_size
|
518
|
+
|
519
|
+
fm = FrequencyMap.new
|
520
|
+
|
521
|
+
assert_equal 0, fm.length
|
522
|
+
assert_equal 0, fm.size
|
523
|
+
|
524
|
+
fm << :abc
|
525
|
+
|
526
|
+
assert_equal 1, fm.length
|
527
|
+
assert_equal 1, fm.size
|
528
|
+
|
529
|
+
fm << :abc
|
530
|
+
|
531
|
+
assert_equal 1, fm.length
|
532
|
+
assert_equal 1, fm.size
|
533
|
+
|
534
|
+
fm << :def
|
535
|
+
|
536
|
+
assert_equal 2, fm.length
|
537
|
+
assert_equal 2, fm.size
|
538
|
+
|
539
|
+
fm.delete :abc
|
540
|
+
|
541
|
+
assert_equal 1, fm.length
|
542
|
+
assert_equal 1, fm.size
|
543
|
+
end
|
544
|
+
|
545
|
+
def test_length
|
546
|
+
|
547
|
+
test_length_and_size
|
548
|
+
end
|
549
|
+
|
550
|
+
def test_merge
|
551
|
+
|
552
|
+
fm1 = FrequencyMap.new
|
553
|
+
fm2 = FrequencyMap.new
|
554
|
+
|
555
|
+
fm1 << :abc << :def << :ghi << :ghi
|
556
|
+
fm2 << :abc << :ghi << :jkl << :jkl
|
557
|
+
|
558
|
+
fm3 = fm1.merge fm2
|
559
|
+
|
560
|
+
assert_equal 8, fm3.count
|
561
|
+
assert_equal 4, fm3.size
|
562
|
+
|
563
|
+
assert_equal 2, fm3[:abc]
|
564
|
+
assert_equal 1, fm3[:def]
|
565
|
+
assert_equal 3, fm3[:ghi]
|
566
|
+
assert_equal 2, fm3[:jkl]
|
567
|
+
end
|
568
|
+
|
569
|
+
def test_merge!
|
570
|
+
|
571
|
+
fm1 = FrequencyMap.new
|
572
|
+
fm2 = FrequencyMap.new
|
573
|
+
|
574
|
+
fm1 << :abc << :def << :ghi << :ghi
|
575
|
+
fm2 << :abc << :ghi << :jkl << :jkl
|
576
|
+
|
577
|
+
fm1.merge! fm2
|
578
|
+
|
579
|
+
assert_equal 8, fm1.count
|
580
|
+
assert_equal 4, fm1.size
|
581
|
+
|
582
|
+
assert_equal 2, fm1[:abc]
|
583
|
+
assert_equal 1, fm1[:def]
|
584
|
+
assert_equal 3, fm1[:ghi]
|
585
|
+
assert_equal 2, fm1[:jkl]
|
586
|
+
end
|
587
|
+
|
588
|
+
def test_push
|
589
|
+
|
590
|
+
fm = FrequencyMap.new
|
591
|
+
|
592
|
+
assert fm.empty?
|
593
|
+
|
594
|
+
fm.push :abc
|
595
|
+
fm.push :def, 2
|
596
|
+
fm.push :ghi, 1
|
597
|
+
fm.push :ghi, 0
|
598
|
+
fm.push :ghi, 1
|
599
|
+
|
600
|
+
assert_equal 5, fm.count
|
601
|
+
assert_not fm.empty?
|
602
|
+
assert_equal 3, fm.size
|
603
|
+
|
604
|
+
assert_equal 1, fm[:abc]
|
605
|
+
assert_equal 2, fm[:def]
|
606
|
+
assert_equal 2, fm[:ghi]
|
607
|
+
end
|
608
|
+
|
609
|
+
def test_shift
|
610
|
+
|
611
|
+
fm = FrequencyMap.new
|
612
|
+
|
613
|
+
assert_nil fm.shift
|
614
|
+
|
615
|
+
|
616
|
+
fm << :abc
|
617
|
+
|
618
|
+
assert_equal 1, fm.count
|
619
|
+
assert_not fm.empty?
|
620
|
+
assert_equal 1, fm.size
|
621
|
+
|
622
|
+
r = fm.shift
|
623
|
+
|
624
|
+
assert_equal 0, fm.count
|
625
|
+
assert fm.empty?
|
626
|
+
assert_equal 0, fm.size
|
627
|
+
|
628
|
+
assert_equal [:abc, 1], r
|
629
|
+
|
630
|
+
|
631
|
+
fm << :def << :def
|
632
|
+
|
633
|
+
assert_equal 2, fm.count
|
634
|
+
assert_not fm.empty?
|
635
|
+
assert_equal 1, fm.size
|
636
|
+
|
637
|
+
r = fm.shift
|
638
|
+
|
639
|
+
assert_equal 0, fm.count
|
640
|
+
assert fm.empty?
|
641
|
+
assert_equal 0, fm.size
|
642
|
+
|
643
|
+
assert_equal [:def, 2], r
|
644
|
+
|
645
|
+
|
646
|
+
fm << :abc << :def << :def
|
647
|
+
|
648
|
+
assert_equal 3, fm.count
|
649
|
+
assert_not fm.empty?
|
650
|
+
assert_equal 2, fm.size
|
651
|
+
|
652
|
+
r = fm.shift
|
653
|
+
|
654
|
+
assert_equal 2, fm.count
|
655
|
+
assert_not fm.empty?
|
656
|
+
assert_equal 1, fm.size
|
657
|
+
|
658
|
+
assert_equal [:abc, 1], r
|
659
|
+
|
660
|
+
r = fm.shift
|
661
|
+
|
662
|
+
assert_equal 0, fm.count
|
663
|
+
assert fm.empty?
|
664
|
+
assert_equal 0, fm.size
|
665
|
+
|
666
|
+
assert_equal [:def, 2], r
|
667
|
+
end
|
668
|
+
|
669
|
+
def test_size
|
670
|
+
|
671
|
+
test_length_and_size
|
672
|
+
end
|
673
|
+
|
674
|
+
def test_store
|
675
|
+
|
676
|
+
fm = FrequencyMap.new
|
677
|
+
|
678
|
+
assert_equal 0, fm.count
|
679
|
+
assert fm.empty?
|
680
|
+
assert_equal 0, fm.size
|
681
|
+
|
682
|
+
fm.store :abc, 1
|
683
|
+
|
684
|
+
assert_equal 1, fm.count
|
685
|
+
assert_not fm.empty?
|
686
|
+
assert_equal 1, fm.size
|
687
|
+
|
688
|
+
fm.store :def, 2
|
689
|
+
|
690
|
+
assert_equal 3, fm.count
|
691
|
+
assert_not fm.empty?
|
692
|
+
assert_equal 2, fm.size
|
693
|
+
|
694
|
+
assert_raise(::TypeError) { fm.store :ghi, :blah }
|
695
|
+
end
|
696
|
+
|
697
|
+
def test_to_a
|
698
|
+
|
699
|
+
fm = FrequencyMap.new
|
700
|
+
|
701
|
+
assert_equal [], fm.to_a
|
702
|
+
|
703
|
+
fm << :abc << :abc
|
704
|
+
|
705
|
+
assert_equal [[:abc, 2]], fm.to_a
|
706
|
+
|
707
|
+
fm << :def << :def << :def
|
708
|
+
|
709
|
+
assert_equal [[:abc, 2], [:def, 3]], fm.to_a
|
710
|
+
end
|
711
|
+
|
712
|
+
def test_to_h
|
713
|
+
|
714
|
+
fm = FrequencyMap.new
|
715
|
+
|
716
|
+
assert_equal Hash.new, fm.to_h
|
717
|
+
|
718
|
+
fm << :abc << :abc
|
719
|
+
|
720
|
+
assert_equal ({:abc => 2}), fm.to_h
|
721
|
+
|
722
|
+
fm << :def << :def << :def
|
723
|
+
|
724
|
+
assert_equal ({:abc => 2, :def => 3}), fm.to_h
|
725
|
+
end
|
726
|
+
|
727
|
+
def test_values
|
728
|
+
|
729
|
+
fm = FrequencyMap.new
|
730
|
+
|
731
|
+
assert_equal [], fm.values
|
732
|
+
|
733
|
+
fm << :abc << :def << :def << :ghi
|
734
|
+
|
735
|
+
assert_equal [1, 2, 1], fm.values
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|