tbpgr_utils 0.0.23 → 0.0.24

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.
@@ -1,678 +1,752 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
- require 'tbpgr_utils'
4
-
5
- describe Array do
6
- context :together do
7
- cases = [
8
- {
9
- case_no: 1,
10
- case_title: 'valid case',
11
- inputs: [[1, 2, 3], %w{one two three}],
12
- expected: ['1:one', '2:two', '3:three'],
13
- },
14
- {
15
- case_no: 2,
16
- case_title: 'contain nil case',
17
- inputs: [[1, 2, 3], %w{one two}],
18
- expected: ['1:one', '2:two', '3:'],
19
- },
20
- ]
21
-
22
- cases.each do |c|
23
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
24
- begin
25
- case_before c
26
-
27
- # -- given --
28
- # nothing
29
-
30
- # -- when/then --
31
- actual = []
32
- c[:inputs].together do |first, second|
33
- actual << "#{first}:#{second}"
34
- end
35
-
36
- expect(actual).to eq(c[:expected])
37
- ensure
38
- case_after c
39
- end
40
- end
41
-
42
- def case_before(c)
43
- # implement each case before
44
- end
45
-
46
- def case_after(c)
47
- # implement each case after
48
- end
49
- end
50
- end
51
-
52
- context :together_with_index do
53
- cases = [
54
- {
55
- case_no: 1,
56
- case_title: 'valid case',
57
- inputs: [[1, 2, 3], %w{one two three}],
58
- expected: ['0:1:one', '1:2:two', '2:3:three'],
59
- },
60
- {
61
- case_no: 2,
62
- case_title: 'contain nil case',
63
- inputs: [[1, 2, 3], %w{one two}],
64
- expected: ['0:1:one', '1:2:two', '2:3:'],
65
- },
66
- ]
67
-
68
- cases.each do |c|
69
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
70
- begin
71
- case_before c
72
-
73
- # -- given --
74
- # nothing
75
-
76
- # -- when/then --
77
- actual = []
78
- c[:inputs].together_with_index do |first, second, index|
79
- actual << "#{index.to_s}:#{first}:#{second}"
80
- end
81
-
82
- expect(actual).to eq(c[:expected])
83
- ensure
84
- case_after c
85
- end
86
- end
87
-
88
- def case_before(c)
89
- # implement each case before
90
- end
91
-
92
- def case_after(c)
93
- # implement each case after
94
- end
95
- end
96
- end
97
-
98
- context :together_map do
99
- cases = [
100
- {
101
- case_no: 1,
102
- case_title: 'valid case',
103
- method_name: :together_map,
104
- inputs: [[1, 2, 3], %w{one two three}],
105
- expected: ['1:one', '2:two', '3:three'],
106
- },
107
- {
108
- case_no: 2,
109
- case_title: 'contain nil case',
110
- method_name: :together_map,
111
- inputs: [[1, 2, 3], %w{one two}],
112
- expected: ['1:one', '2:two', '3:'],
113
- },
114
- {
115
- case_no: 3,
116
- case_title: 'valid case',
117
- method_name: :together_map,
118
- inputs: [[1, 2, 3], %w{one two three}],
119
- expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
120
- is_multi: true,
121
- },
122
- {
123
- case_no: 4,
124
- case_title: 'valid case(alias together_collect)',
125
- method_name: :together_collect,
126
- inputs: [[1, 2, 3], %w{one two three}],
127
- expected: ['1:one', '2:two', '3:three'],
128
- },
129
- {
130
- case_no: 5,
131
- case_title: 'valid case(alias tmap)',
132
- method_name: :tmap,
133
- inputs: [[1, 2, 3], %w{one two three}],
134
- expected: ['1:one', '2:two', '3:three'],
135
- },
136
- {
137
- case_no: 6,
138
- case_title: 'valid case(alias tcollect)',
139
- method_name: :tcollect,
140
- inputs: [[1, 2, 3], %w{one two three}],
141
- expected: ['1:one', '2:two', '3:three'],
142
- },
143
- ]
144
-
145
- cases.each do |c|
146
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
147
- begin
148
- case_before c
149
-
150
- # -- given --
151
- # nothing
152
-
153
- # -- when/then --
154
- if c[:is_multi]
155
- actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
156
- else
157
- actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
158
- end
159
-
160
- expect(actual).to eq(c[:expected])
161
- ensure
162
- case_after c
163
- end
164
- end
165
-
166
- def case_before(c)
167
- # implement each case before
168
- end
169
-
170
- def case_after(c)
171
- # implement each case after
172
- end
173
- end
174
- end
175
-
176
- context :together_map! do
177
- cases = [
178
- {
179
- case_no: 1,
180
- case_title: 'valid case',
181
- method_name: :together_map!,
182
- inputs: [[1, 2, 3], %w{one two three}],
183
- expected_ret: ['1:one', '2:two', '3:three'],
184
- expected_self: ['1:one', '2:two', '3:three'],
185
- },
186
- {
187
- case_no: 2,
188
- case_title: 'contain nil case',
189
- method_name: :together_map!,
190
- inputs: [[1, 2, 3], %w{one two}],
191
- expected_ret: ['1:one', '2:two', '3:'],
192
- expected_self: ['1:one', '2:two', '3:'],
193
- },
194
- {
195
- case_no: 3,
196
- case_title: 'valid case',
197
- method_name: :together_map!,
198
- inputs: [[1, 2, 3], %w{one two three}],
199
- expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
200
- expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
201
- is_multi: true,
202
- },
203
- {
204
- case_no: 4,
205
- case_title: 'valid case(alias together_collect!)',
206
- method_name: :together_collect!,
207
- inputs: [[1, 2, 3], %w{one two three}],
208
- expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
209
- expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
210
- is_multi: true,
211
- },
212
- {
213
- case_no: 5,
214
- case_title: 'valid case(alias tmap!)',
215
- method_name: :tmap!,
216
- inputs: [[1, 2, 3], %w{one two three}],
217
- expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
218
- expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
219
- is_multi: true,
220
- },
221
- {
222
- case_no: 6,
223
- case_title: 'valid case(alias tcollect!)',
224
- method_name: :tcollect!,
225
- inputs: [[1, 2, 3], %w{one two three}],
226
- expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
227
- expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
228
- is_multi: true,
229
- },
230
- ]
231
-
232
- cases.each do |c|
233
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
234
- begin
235
- case_before c
236
-
237
- # -- given --
238
- # nothing
239
-
240
- # -- when/then --
241
- if c[:is_multi]
242
- actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
243
- else
244
- actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
245
- end
246
-
247
- expect(actual).to eq(c[:expected_ret])
248
- expect(c[:inputs]).to eq(c[:expected_self])
249
- ensure
250
- case_after c
251
- end
252
- end
253
-
254
- def case_before(c)
255
- # implement each case before
256
- end
257
-
258
- def case_after(c)
259
- # implement each case after
260
- end
261
- end
262
- end
263
-
264
- context :together_select do
265
- cases = [
266
- {
267
- case_no: 1,
268
- case_title: 'single valid case',
269
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
270
- condition: 'first == second',
271
- method_name: :together_select,
272
- expected: [[2, 3], [2, 3]],
273
- },
274
- {
275
- case_no: 2,
276
- case_title: 'multi valid case',
277
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
278
- condition: '[first.odd?, second.even?]',
279
- expected: [[1, 3], [4, 2]],
280
- method_name: :together_select,
281
- },
282
- {
283
- case_no: 3,
284
- case_title: 'multi valid case',
285
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
286
- condition: '[first.odd?, second.even?]',
287
- expected: [[1, 3], [4, 2]],
288
- method_name: :tselect,
289
- },
290
- {
291
- case_no: 4,
292
- case_title: 'multi valid case',
293
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
294
- condition: '[first.odd?, second.even?]',
295
- expected: [[1, 3], [4, 2]],
296
- method_name: :together_find_all,
297
- },
298
- {
299
- case_no: 5,
300
- case_title: 'multi valid case',
301
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
302
- condition: '[first.odd?, second.even?]',
303
- expected: [[1, 3], [4, 2]],
304
- method_name: :tfindall,
305
- },
306
- ]
307
-
308
- cases.each do |c|
309
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
310
- begin
311
- case_before c
312
-
313
- # -- given --
314
- # nothing
315
-
316
- # -- when/then --
317
- actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
318
-
319
- expect(actual).to eq(c[:expected])
320
- ensure
321
- case_after c
322
- end
323
- end
324
-
325
- def case_before(c)
326
- # implement each case before
327
- end
328
-
329
- def case_after(c)
330
- # implement each case after
331
- end
332
- end
333
- end
334
-
335
- context :together_reduce do
336
- cases = [
337
- {
338
- case_no: 1,
339
- case_title: 'single valid case',
340
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
341
- init: nil,
342
- logic: 'memo + first + second',
343
- method_name: :together_reduce,
344
- expected: 20,
345
- },
346
- {
347
- case_no: 2,
348
- case_title: 'single with init valid case',
349
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
350
- init: 10,
351
- logic: 'memo + first + second',
352
- method_name: :together_reduce,
353
- expected: 30,
354
- },
355
- {
356
- case_no: 5,
357
- case_title: 'single valid case',
358
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
359
- logic: 'memo + first + second',
360
- expected: 20,
361
- method_name: :treduce,
362
- },
363
- {
364
- case_no: 6,
365
- case_title: 'single valid case',
366
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
367
- logic: 'memo + first + second',
368
- expected: 20,
369
- method_name: :together_inject,
370
- },
371
- {
372
- case_no: 7,
373
- case_title: 'multi valid case',
374
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
375
- logic: 'memo + first + second',
376
- expected: 20,
377
- method_name: :tinject,
378
- },
379
- {
380
- case_no: 8,
381
- case_title: 'single with init valid array case',
382
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
383
- init: [],
384
- logic: 'memo << first + second',
385
- method_name: :together_reduce,
386
- expected: [5, 4, 6, 5],
387
- },
388
- {
389
- case_no: 9,
390
- case_title: 'single with init valid array case',
391
- inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
392
- init: {},
393
- logic: 'memo[first] = second; memo',
394
- method_name: :together_reduce,
395
- expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
396
- },
397
- ]
398
-
399
- cases.each do |c|
400
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
401
- begin
402
- case_before c
403
-
404
- # -- given --
405
- # nothing
406
-
407
- # -- when/then --
408
- if c[:init]
409
- actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
410
- else
411
- actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
412
- end
413
-
414
- expect(actual).to eq(c[:expected])
415
- ensure
416
- case_after c
417
- end
418
- end
419
-
420
- def case_before(c)
421
- # implement each case before
422
- end
423
-
424
- def case_after(c)
425
- # implement each case after
426
- end
427
- end
428
- end
429
-
430
- context :together_concat do
431
- cases = [
432
- {
433
- case_no: 1,
434
- case_title: 'valid case',
435
- inputs: [[1, 2, 3], %w{one two three}],
436
- add_list: [4, 5, 6],
437
- method_name: :together_concat,
438
- expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
439
- },
440
- {
441
- case_no: 2,
442
- case_title: 'valid case',
443
- inputs: [[1, 2, 3], %w{one two three}],
444
- add_list: [4, 5, 6],
445
- method_name: :tconcat,
446
- expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
447
- },
448
- ]
449
-
450
- cases.each do |c|
451
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
452
- begin
453
- case_before c
454
-
455
- # -- given --
456
- # nothing
457
-
458
- # -- when --
459
- c[:inputs].send c[:method_name], c[:add_list]
460
-
461
- # -- then --
462
- expect(c[:inputs]).to eq(c[:expected])
463
- ensure
464
- case_after c
465
- end
466
- end
467
-
468
- def case_before(c)
469
- # implement each case before
470
- end
471
-
472
- def case_after(c)
473
- # implement each case after
474
- end
475
- end
476
- end
477
-
478
- context :together_at do
479
- cases = [
480
- {
481
- case_no: 1,
482
- case_title: 'valid case',
483
- inputs: [[1, 2, 3], %w{one two three}],
484
- index: 2,
485
- method_name: :together_at,
486
- expected: [3, 'three'],
487
- },
488
- {
489
- case_no: 2,
490
- case_title: 'contain nil case',
491
- inputs: [[1, 2, 3], %w{one two}],
492
- index: 2,
493
- method_name: :together_at,
494
- expected: [3, nil],
495
- },
496
- {
497
- case_no: 3,
498
- case_title: 'valid case',
499
- inputs: [[1, 2, 3], %w{one two three}],
500
- index: 2,
501
- method_name: :tat,
502
- expected: [3, 'three'],
503
- },
504
- ]
505
-
506
- cases.each do |c|
507
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
508
- begin
509
- case_before c
510
-
511
- # -- given --
512
- # nothing
513
-
514
- # -- when --
515
- actual = c[:inputs].send c[:method_name], c[:index]
516
-
517
- # -- then --
518
- expect(actual).to eq(c[:expected])
519
- ensure
520
- case_after c
521
- end
522
- end
523
-
524
- def case_before(c)
525
- # implement each case before
526
- end
527
-
528
- def case_after(c)
529
- # implement each case after
530
- end
531
- end
532
- end
533
-
534
- context :together_clear do
535
- cases = [
536
- {
537
- case_no: 1,
538
- case_title: 'valid case',
539
- inputs: [[1, 2, 3], %w{one two three}],
540
- method_name: :together_clear,
541
- expected: [[], []],
542
- },
543
- {
544
- case_no: 2,
545
- case_title: 'valid case',
546
- inputs: [[1, 2, 3], %w{one two three}],
547
- method_name: :tclear,
548
- expected: [[], []],
549
- },
550
- ]
551
-
552
- cases.each do |c|
553
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
554
- begin
555
- case_before c
556
-
557
- # -- given --
558
- # nothing
559
-
560
- # -- when --
561
- actual = c[:inputs].send c[:method_name]
562
-
563
- # -- then --
564
- expect(actual).to eq(c[:expected])
565
- ensure
566
- case_after c
567
- end
568
- end
569
-
570
- def case_before(c)
571
- # implement each case before
572
- end
573
-
574
- def case_after(c)
575
- # implement each case after
576
- end
577
- end
578
- end
579
-
580
- context :together_compact do
581
- cases = [
582
- {
583
- case_no: 1,
584
- case_title: 'valid case',
585
- inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
586
- method_name: :together_compact,
587
- expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
588
- expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
589
- },
590
- {
591
- case_no: 2,
592
- case_title: 'valid case(use alias tcompact)',
593
- inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
594
- method_name: :tcompact,
595
- expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
596
- expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
597
- },
598
- ]
599
-
600
- cases.each do |c|
601
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
602
- begin
603
- case_before c
604
-
605
- # -- given --
606
- # nothing
607
-
608
- # -- when --
609
- actual = c[:inputs].send c[:method_name]
610
-
611
- # -- then --
612
- expect(c[:inputs]).to eq(c[:expected_self])
613
- expect(actual).to eq(c[:expected_ret])
614
- ensure
615
- case_after c
616
- end
617
- end
618
-
619
- def case_before(c)
620
- # implement each case before
621
- end
622
-
623
- def case_after(c)
624
- # implement each case after
625
- end
626
- end
627
- end
628
-
629
-
630
- context :together_compact! do
631
- cases = [
632
- {
633
- case_no: 1,
634
- case_title: 'valid case',
635
- inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
636
- method_name: :together_compact!,
637
- expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
638
- expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
639
- },
640
- {
641
- case_no: 2,
642
- case_title: 'valid case(use alias tcompact)',
643
- inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
644
- method_name: :tcompact!,
645
- expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
646
- expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
647
- },
648
- ]
649
-
650
- cases.each do |c|
651
- it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
652
- begin
653
- case_before c
654
-
655
- # -- given --
656
- # nothing
657
-
658
- # -- when --
659
- actual = c[:inputs].send c[:method_name]
660
-
661
- # -- then --
662
- expect(c[:inputs]).to eq(c[:expected_self])
663
- expect(actual).to eq(c[:expected_ret])
664
- ensure
665
- case_after c
666
- end
667
- end
668
-
669
- def case_before(c)
670
- # implement each case before
671
- end
672
-
673
- def case_after(c)
674
- # implement each case after
675
- end
676
- end
677
- end
678
- end
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'valid case',
11
+ inputs: [[1, 2, 3], %w{one two three}],
12
+ expected: ['1:one', '2:two', '3:three'],
13
+ },
14
+ {
15
+ case_no: 2,
16
+ case_title: 'contain nil case',
17
+ inputs: [[1, 2, 3], %w{one two}],
18
+ expected: ['1:one', '2:two', '3:'],
19
+ },
20
+ ]
21
+
22
+ cases.each do |c|
23
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
24
+ begin
25
+ case_before c
26
+
27
+ # -- given --
28
+ # nothing
29
+
30
+ # -- when/then --
31
+ actual = []
32
+ c[:inputs].together do |first, second|
33
+ actual << "#{first}:#{second}"
34
+ end
35
+
36
+ expect(actual).to eq(c[:expected])
37
+ ensure
38
+ case_after c
39
+ end
40
+ end
41
+
42
+ def case_before(c)
43
+ # implement each case before
44
+ end
45
+
46
+ def case_after(c)
47
+ # implement each case after
48
+ end
49
+ end
50
+ end
51
+
52
+ context :together_with_index do
53
+ cases = [
54
+ {
55
+ case_no: 1,
56
+ case_title: 'valid case',
57
+ inputs: [[1, 2, 3], %w{one two three}],
58
+ expected: ['0:1:one', '1:2:two', '2:3:three'],
59
+ },
60
+ {
61
+ case_no: 2,
62
+ case_title: 'contain nil case',
63
+ inputs: [[1, 2, 3], %w{one two}],
64
+ expected: ['0:1:one', '1:2:two', '2:3:'],
65
+ },
66
+ ]
67
+
68
+ cases.each do |c|
69
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
70
+ begin
71
+ case_before c
72
+
73
+ # -- given --
74
+ # nothing
75
+
76
+ # -- when/then --
77
+ actual = []
78
+ c[:inputs].together_with_index do |first, second, index|
79
+ actual << "#{index.to_s}:#{first}:#{second}"
80
+ end
81
+
82
+ expect(actual).to eq(c[:expected])
83
+ ensure
84
+ case_after c
85
+ end
86
+ end
87
+
88
+ def case_before(c)
89
+ # implement each case before
90
+ end
91
+
92
+ def case_after(c)
93
+ # implement each case after
94
+ end
95
+ end
96
+ end
97
+
98
+ context :together_map do
99
+ cases = [
100
+ {
101
+ case_no: 1,
102
+ case_title: 'valid case',
103
+ method_name: :together_map,
104
+ inputs: [[1, 2, 3], %w{one two three}],
105
+ expected: ['1:one', '2:two', '3:three'],
106
+ },
107
+ {
108
+ case_no: 2,
109
+ case_title: 'contain nil case',
110
+ method_name: :together_map,
111
+ inputs: [[1, 2, 3], %w{one two}],
112
+ expected: ['1:one', '2:two', '3:'],
113
+ },
114
+ {
115
+ case_no: 3,
116
+ case_title: 'valid case',
117
+ method_name: :together_map,
118
+ inputs: [[1, 2, 3], %w{one two three}],
119
+ expected: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
120
+ is_multi: true,
121
+ },
122
+ {
123
+ case_no: 4,
124
+ case_title: 'valid case(alias together_collect)',
125
+ method_name: :together_collect,
126
+ inputs: [[1, 2, 3], %w{one two three}],
127
+ expected: ['1:one', '2:two', '3:three'],
128
+ },
129
+ {
130
+ case_no: 5,
131
+ case_title: 'valid case(alias tmap)',
132
+ method_name: :tmap,
133
+ inputs: [[1, 2, 3], %w{one two three}],
134
+ expected: ['1:one', '2:two', '3:three'],
135
+ },
136
+ {
137
+ case_no: 6,
138
+ case_title: 'valid case(alias tcollect)',
139
+ method_name: :tcollect,
140
+ inputs: [[1, 2, 3], %w{one two three}],
141
+ expected: ['1:one', '2:two', '3:three'],
142
+ },
143
+ ]
144
+
145
+ cases.each do |c|
146
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
147
+ begin
148
+ case_before c
149
+
150
+ # -- given --
151
+ # nothing
152
+
153
+ # -- when/then --
154
+ if c[:is_multi]
155
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
156
+ else
157
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
158
+ end
159
+
160
+ expect(actual).to eq(c[:expected])
161
+ ensure
162
+ case_after c
163
+ end
164
+ end
165
+
166
+ def case_before(c)
167
+ # implement each case before
168
+ end
169
+
170
+ def case_after(c)
171
+ # implement each case after
172
+ end
173
+ end
174
+ end
175
+
176
+ context :together_map! do
177
+ cases = [
178
+ {
179
+ case_no: 1,
180
+ case_title: 'valid case',
181
+ method_name: :together_map!,
182
+ inputs: [[1, 2, 3], %w{one two three}],
183
+ expected_ret: ['1:one', '2:two', '3:three'],
184
+ expected_self: ['1:one', '2:two', '3:three'],
185
+ },
186
+ {
187
+ case_no: 2,
188
+ case_title: 'contain nil case',
189
+ method_name: :together_map!,
190
+ inputs: [[1, 2, 3], %w{one two}],
191
+ expected_ret: ['1:one', '2:two', '3:'],
192
+ expected_self: ['1:one', '2:two', '3:'],
193
+ },
194
+ {
195
+ case_no: 3,
196
+ case_title: 'valid case',
197
+ method_name: :together_map!,
198
+ inputs: [[1, 2, 3], %w{one two three}],
199
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
200
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
201
+ is_multi: true,
202
+ },
203
+ {
204
+ case_no: 4,
205
+ case_title: 'valid case(alias together_collect!)',
206
+ method_name: :together_collect!,
207
+ inputs: [[1, 2, 3], %w{one two three}],
208
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
209
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
210
+ is_multi: true,
211
+ },
212
+ {
213
+ case_no: 5,
214
+ case_title: 'valid case(alias tmap!)',
215
+ method_name: :tmap!,
216
+ inputs: [[1, 2, 3], %w{one two three}],
217
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
218
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
219
+ is_multi: true,
220
+ },
221
+ {
222
+ case_no: 6,
223
+ case_title: 'valid case(alias tcollect!)',
224
+ method_name: :tcollect!,
225
+ inputs: [[1, 2, 3], %w{one two three}],
226
+ expected_ret: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
227
+ expected_self: [['1:one', '2:two', '3:three'], ['one:1', 'two:2', 'three:3']],
228
+ is_multi: true,
229
+ },
230
+ ]
231
+
232
+ cases.each do |c|
233
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
234
+ begin
235
+ case_before c
236
+
237
+ # -- given --
238
+ # nothing
239
+
240
+ # -- when/then --
241
+ if c[:is_multi]
242
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|["#{first}:#{second}", "#{second}:#{first}"] }
243
+ else
244
+ actual = c[:inputs].method(c[:method_name]).call { |first, second|"#{first}:#{second}" }
245
+ end
246
+
247
+ expect(actual).to eq(c[:expected_ret])
248
+ expect(c[:inputs]).to eq(c[:expected_self])
249
+ ensure
250
+ case_after c
251
+ end
252
+ end
253
+
254
+ def case_before(c)
255
+ # implement each case before
256
+ end
257
+
258
+ def case_after(c)
259
+ # implement each case after
260
+ end
261
+ end
262
+ end
263
+
264
+ context :together_select do
265
+ cases = [
266
+ {
267
+ case_no: 1,
268
+ case_title: 'single valid case',
269
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
270
+ condition: 'first == second',
271
+ method_name: :together_select,
272
+ expected: [[2, 3], [2, 3]],
273
+ },
274
+ {
275
+ case_no: 2,
276
+ case_title: 'multi valid case',
277
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
278
+ condition: '[first.odd?, second.even?]',
279
+ expected: [[1, 3], [4, 2]],
280
+ method_name: :together_select,
281
+ },
282
+ {
283
+ case_no: 3,
284
+ case_title: 'multi valid case',
285
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
286
+ condition: '[first.odd?, second.even?]',
287
+ expected: [[1, 3], [4, 2]],
288
+ method_name: :tselect,
289
+ },
290
+ {
291
+ case_no: 4,
292
+ case_title: 'multi valid case',
293
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
294
+ condition: '[first.odd?, second.even?]',
295
+ expected: [[1, 3], [4, 2]],
296
+ method_name: :together_find_all,
297
+ },
298
+ {
299
+ case_no: 5,
300
+ case_title: 'multi valid case',
301
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
302
+ condition: '[first.odd?, second.even?]',
303
+ expected: [[1, 3], [4, 2]],
304
+ method_name: :tfindall,
305
+ },
306
+ ]
307
+
308
+ cases.each do |c|
309
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
310
+ begin
311
+ case_before c
312
+
313
+ # -- given --
314
+ # nothing
315
+
316
+ # -- when/then --
317
+ actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
318
+
319
+ expect(actual).to eq(c[:expected])
320
+ ensure
321
+ case_after c
322
+ end
323
+ end
324
+
325
+ def case_before(c)
326
+ # implement each case before
327
+ end
328
+
329
+ def case_after(c)
330
+ # implement each case after
331
+ end
332
+ end
333
+ end
334
+
335
+ context :together_reduce do
336
+ cases = [
337
+ {
338
+ case_no: 1,
339
+ case_title: 'single valid case',
340
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
341
+ init: nil,
342
+ logic: 'memo + first + second',
343
+ method_name: :together_reduce,
344
+ expected: 20,
345
+ },
346
+ {
347
+ case_no: 2,
348
+ case_title: 'single with init valid case',
349
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
350
+ init: 10,
351
+ logic: 'memo + first + second',
352
+ method_name: :together_reduce,
353
+ expected: 30,
354
+ },
355
+ {
356
+ case_no: 5,
357
+ case_title: 'single valid case',
358
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
359
+ logic: 'memo + first + second',
360
+ expected: 20,
361
+ method_name: :treduce,
362
+ },
363
+ {
364
+ case_no: 6,
365
+ case_title: 'single valid case',
366
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
367
+ logic: 'memo + first + second',
368
+ expected: 20,
369
+ method_name: :together_inject,
370
+ },
371
+ {
372
+ case_no: 7,
373
+ case_title: 'multi valid case',
374
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
375
+ logic: 'memo + first + second',
376
+ expected: 20,
377
+ method_name: :tinject,
378
+ },
379
+ {
380
+ case_no: 8,
381
+ case_title: 'single with init valid array case',
382
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
383
+ init: [],
384
+ logic: 'memo << first + second',
385
+ method_name: :together_reduce,
386
+ expected: [5, 4, 6, 5],
387
+ },
388
+ {
389
+ case_no: 9,
390
+ case_title: 'single with init valid array case',
391
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
392
+ init: {},
393
+ logic: 'memo[first] = second; memo',
394
+ method_name: :together_reduce,
395
+ expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
396
+ },
397
+ ]
398
+
399
+ cases.each do |c|
400
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
401
+ begin
402
+ case_before c
403
+
404
+ # -- given --
405
+ # nothing
406
+
407
+ # -- when/then --
408
+ if c[:init]
409
+ actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
410
+ else
411
+ actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
412
+ end
413
+
414
+ expect(actual).to eq(c[:expected])
415
+ ensure
416
+ case_after c
417
+ end
418
+ end
419
+
420
+ def case_before(c)
421
+ # implement each case before
422
+ end
423
+
424
+ def case_after(c)
425
+ # implement each case after
426
+ end
427
+ end
428
+ end
429
+
430
+ context :together_concat do
431
+ cases = [
432
+ {
433
+ case_no: 1,
434
+ case_title: 'valid case',
435
+ inputs: [[1, 2, 3], %w{one two three}],
436
+ add_list: [4, 5, 6],
437
+ method_name: :together_concat,
438
+ expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
439
+ },
440
+ {
441
+ case_no: 2,
442
+ case_title: 'valid case',
443
+ inputs: [[1, 2, 3], %w{one two three}],
444
+ add_list: [4, 5, 6],
445
+ method_name: :tconcat,
446
+ expected: [[1, 2, 3, 4, 5, 6], ['one', 'two', 'three', 4, 5, 6]],
447
+ },
448
+ ]
449
+
450
+ cases.each do |c|
451
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
452
+ begin
453
+ case_before c
454
+
455
+ # -- given --
456
+ # nothing
457
+
458
+ # -- when --
459
+ c[:inputs].send c[:method_name], c[:add_list]
460
+
461
+ # -- then --
462
+ expect(c[:inputs]).to eq(c[:expected])
463
+ ensure
464
+ case_after c
465
+ end
466
+ end
467
+
468
+ def case_before(c)
469
+ # implement each case before
470
+ end
471
+
472
+ def case_after(c)
473
+ # implement each case after
474
+ end
475
+ end
476
+ end
477
+
478
+ context :together_at do
479
+ cases = [
480
+ {
481
+ case_no: 1,
482
+ case_title: 'valid case',
483
+ inputs: [[1, 2, 3], %w{one two three}],
484
+ index: 2,
485
+ method_name: :together_at,
486
+ expected: [3, 'three'],
487
+ },
488
+ {
489
+ case_no: 2,
490
+ case_title: 'contain nil case',
491
+ inputs: [[1, 2, 3], %w{one two}],
492
+ index: 2,
493
+ method_name: :together_at,
494
+ expected: [3, nil],
495
+ },
496
+ {
497
+ case_no: 3,
498
+ case_title: 'valid case',
499
+ inputs: [[1, 2, 3], %w{one two three}],
500
+ index: 2,
501
+ method_name: :tat,
502
+ expected: [3, 'three'],
503
+ },
504
+ ]
505
+
506
+ cases.each do |c|
507
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
508
+ begin
509
+ case_before c
510
+
511
+ # -- given --
512
+ # nothing
513
+
514
+ # -- when --
515
+ actual = c[:inputs].send c[:method_name], c[:index]
516
+
517
+ # -- then --
518
+ expect(actual).to eq(c[:expected])
519
+ ensure
520
+ case_after c
521
+ end
522
+ end
523
+
524
+ def case_before(c)
525
+ # implement each case before
526
+ end
527
+
528
+ def case_after(c)
529
+ # implement each case after
530
+ end
531
+ end
532
+ end
533
+
534
+ context :together_clear do
535
+ cases = [
536
+ {
537
+ case_no: 1,
538
+ case_title: 'valid case',
539
+ inputs: [[1, 2, 3], %w{one two three}],
540
+ method_name: :together_clear,
541
+ expected: [[], []],
542
+ },
543
+ {
544
+ case_no: 2,
545
+ case_title: 'valid case',
546
+ inputs: [[1, 2, 3], %w{one two three}],
547
+ method_name: :tclear,
548
+ expected: [[], []],
549
+ },
550
+ ]
551
+
552
+ cases.each do |c|
553
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
554
+ begin
555
+ case_before c
556
+
557
+ # -- given --
558
+ # nothing
559
+
560
+ # -- when --
561
+ actual = c[:inputs].send c[:method_name]
562
+
563
+ # -- then --
564
+ expect(actual).to eq(c[:expected])
565
+ ensure
566
+ case_after c
567
+ end
568
+ end
569
+
570
+ def case_before(c)
571
+ # implement each case before
572
+ end
573
+
574
+ def case_after(c)
575
+ # implement each case after
576
+ end
577
+ end
578
+ end
579
+
580
+ context :together_compact do
581
+ cases = [
582
+ {
583
+ case_no: 1,
584
+ case_title: 'valid case',
585
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
586
+ method_name: :together_compact,
587
+ expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
588
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
589
+ },
590
+ {
591
+ case_no: 2,
592
+ case_title: 'valid case(use alias tcompact)',
593
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
594
+ method_name: :tcompact,
595
+ expected_self: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
596
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
597
+ },
598
+ ]
599
+
600
+ cases.each do |c|
601
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
602
+ begin
603
+ case_before c
604
+
605
+ # -- given --
606
+ # nothing
607
+
608
+ # -- when --
609
+ actual = c[:inputs].send c[:method_name]
610
+
611
+ # -- then --
612
+ expect(c[:inputs]).to eq(c[:expected_self])
613
+ expect(actual).to eq(c[:expected_ret])
614
+ ensure
615
+ case_after c
616
+ end
617
+ end
618
+
619
+ def case_before(c)
620
+ # implement each case before
621
+ end
622
+
623
+ def case_after(c)
624
+ # implement each case after
625
+ end
626
+ end
627
+ end
628
+
629
+ context :together_compact! do
630
+ cases = [
631
+ {
632
+ case_no: 1,
633
+ case_title: 'valid case',
634
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
635
+ method_name: :together_compact!,
636
+ expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
637
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
638
+ },
639
+ {
640
+ case_no: 2,
641
+ case_title: 'valid case(use alias tcompact)',
642
+ inputs: [[1, 2, nil, 3], ['a', 'b', 'c', nil, 'd']],
643
+ method_name: :tcompact!,
644
+ expected_self: [[1, 2, 3], ['a', 'b', 'c', 'd']],
645
+ expected_ret: [[1, 2, 3], ['a', 'b', 'c', 'd']],
646
+ },
647
+ ]
648
+
649
+ cases.each do |c|
650
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
651
+ begin
652
+ case_before c
653
+
654
+ # -- given --
655
+ # nothing
656
+
657
+ # -- when --
658
+ actual = c[:inputs].send c[:method_name]
659
+
660
+ # -- then --
661
+ expect(c[:inputs]).to eq(c[:expected_self])
662
+ expect(actual).to eq(c[:expected_ret])
663
+ ensure
664
+ case_after c
665
+ end
666
+ end
667
+
668
+ def case_before(c)
669
+ # implement each case before
670
+ end
671
+
672
+ def case_after(c)
673
+ # implement each case after
674
+ end
675
+ end
676
+ end
677
+
678
+ context :together_delete do
679
+ cases = [
680
+ {
681
+ case_no: 1,
682
+ case_title: 'valid case',
683
+ inputs: [[1, 2, 3, 4], [2, 3, 4, 5]],
684
+ delete_value: 2,
685
+ method_name: :together_delete,
686
+ expected: [[1, 3, 4], [3, 4, 5]],
687
+ ret: 2,
688
+ },
689
+ {
690
+ case_no: 2,
691
+ case_title: 'valid case(not exist and block use)',
692
+ inputs: [[1, 2, 3, 4], [2, 3, 4, 5]],
693
+ delete_value: 6,
694
+ method_name: :together_delete,
695
+ expected: [[1, 2, 3, 4], [2, 3, 4, 5]],
696
+ ret: :ret,
697
+ has_block: true,
698
+ block: :ret,
699
+ },
700
+ {
701
+ case_no: 3,
702
+ case_title: 'valid case(not exist and block unuse)',
703
+ inputs: [[1, 2, 3, 4], [2, 3, 4, 5]],
704
+ delete_value: 6,
705
+ method_name: :together_delete,
706
+ expected: [[1, 2, 3, 4], [2, 3, 4, 5]],
707
+ ret: nil,
708
+ },
709
+ {
710
+ case_no: 4,
711
+ case_title: 'valid case(alias tdelete)',
712
+ inputs: [[1, 2, 3, 4], [2, 3, 4, 5]],
713
+ delete_value: 2,
714
+ method_name: :tdelete,
715
+ expected: [[1, 3, 4], [3, 4, 5]],
716
+ ret: 2,
717
+ },
718
+ ]
719
+
720
+ cases.each do |c|
721
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
722
+ begin
723
+ case_before c
724
+
725
+ # -- given --
726
+ # nothing
727
+
728
+ # -- when --
729
+ if c[:has_block]
730
+ actual = c[:inputs].send c[:method_name], c[:delete_value] {c[:block] }
731
+ else
732
+ actual = c[:inputs].send c[:method_name], c[:delete_value]
733
+ end
734
+
735
+ # -- then --
736
+ expect(actual).to eq(c[:ret])
737
+ expect(c[:inputs]).to eq(c[:expected])
738
+ ensure
739
+ case_after c
740
+ end
741
+ end
742
+
743
+ def case_before(c)
744
+ # implement each case before
745
+ end
746
+
747
+ def case_after(c)
748
+ # implement each case after
749
+ end
750
+ end
751
+ end
752
+ end