tbpgr_utils 0.0.36 → 0.0.37

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/README.md +40 -1
  2. data/lib/open_classes/array/together.rb +23 -0
  3. data/lib/open_classes/array/together_at.rb +29 -0
  4. data/lib/open_classes/array/together_clear.rb +24 -0
  5. data/lib/open_classes/array/together_compact.rb +44 -0
  6. data/lib/open_classes/array/together_concat.rb +25 -0
  7. data/lib/open_classes/array/together_delete.rb +46 -0
  8. data/lib/open_classes/array/together_delete_at.rb +43 -0
  9. data/lib/open_classes/array/together_delete_if.rb +38 -0
  10. data/lib/open_classes/array/together_empty.rb +31 -0
  11. data/lib/open_classes/array/together_fill.rb +43 -0
  12. data/lib/open_classes/array/together_first.rb +40 -0
  13. data/lib/open_classes/array/together_helper.rb +25 -0
  14. data/lib/open_classes/array/together_include.rb +50 -0
  15. data/lib/open_classes/array/together_index.rb +34 -0
  16. data/lib/open_classes/array/together_insert.rb +34 -0
  17. data/lib/open_classes/array/together_last.rb +40 -0
  18. data/lib/open_classes/array/together_map.rb +87 -0
  19. data/lib/open_classes/array/together_pop.rb +47 -0
  20. data/lib/open_classes/array/together_reduce.rb +59 -0
  21. data/lib/open_classes/array/together_reverse.rb +53 -0
  22. data/lib/open_classes/array/together_sample.rb +49 -0
  23. data/lib/open_classes/array/together_select.rb +50 -0
  24. data/lib/open_classes/array/together_shift.rb +47 -0
  25. data/lib/open_classes/array/together_with_index.rb +24 -0
  26. data/lib/open_classes/array.rb +23 -718
  27. data/lib/tbpgr_utils/version.rb +1 -1
  28. data/spec/open_classes/array/together_at_spec.rb +61 -0
  29. data/spec/open_classes/array/together_clear_spec.rb +51 -0
  30. data/spec/open_classes/array/together_compact_spec.rb +103 -0
  31. data/spec/open_classes/array/together_concat_spec.rb +53 -0
  32. data/spec/open_classes/array/together_delete_at_spec.rb +78 -0
  33. data/spec/open_classes/array/together_delete_if_spec.rb +61 -0
  34. data/spec/open_classes/array/together_delete_spec.rb +80 -0
  35. data/spec/open_classes/array/together_empty_spec.rb +58 -0
  36. data/spec/open_classes/array/together_fill_spec.rb +79 -0
  37. data/spec/open_classes/array/together_first_spec.rb +84 -0
  38. data/spec/open_classes/array/together_include_spec.rb +100 -0
  39. data/spec/open_classes/array/together_index_spec.rb +69 -0
  40. data/spec/open_classes/array/together_insert_spec.rb +65 -0
  41. data/spec/open_classes/array/together_last_spec.rb +84 -0
  42. data/spec/open_classes/array/together_map_spec.rb +171 -0
  43. data/spec/open_classes/array/together_pop_spec.rb +105 -0
  44. data/spec/open_classes/array/together_reduce_spec.rb +100 -0
  45. data/spec/open_classes/array/together_reverse_spec.rb +119 -0
  46. data/spec/open_classes/array/together_select_spec.rb +76 -0
  47. data/spec/open_classes/array/together_shift_spec.rb +105 -0
  48. data/spec/open_classes/array/together_spec.rb +51 -0
  49. data/spec/open_classes/array/together_with_index_spec.rb +51 -0
  50. data/spec/open_classes/together_sample_spec.rb +122 -0
  51. data/spec/spec_helper.rb +1 -1
  52. metadata +82 -14
  53. data/spec/open_classes/array_spec.rb +0 -1699
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_reduce do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'single valid case',
11
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
12
+ init: nil,
13
+ logic: 'memo + first + second',
14
+ method_name: :together_reduce,
15
+ expected: 20,
16
+ },
17
+ {
18
+ case_no: 2,
19
+ case_title: 'single with init valid case',
20
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
21
+ init: 10,
22
+ logic: 'memo + first + second',
23
+ method_name: :together_reduce,
24
+ expected: 30,
25
+ },
26
+ {
27
+ case_no: 5,
28
+ case_title: 'single valid case',
29
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
30
+ logic: 'memo + first + second',
31
+ expected: 20,
32
+ method_name: :treduce,
33
+ },
34
+ {
35
+ case_no: 6,
36
+ case_title: 'single valid case',
37
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
38
+ logic: 'memo + first + second',
39
+ expected: 20,
40
+ method_name: :together_inject,
41
+ },
42
+ {
43
+ case_no: 7,
44
+ case_title: 'multi valid case',
45
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
46
+ logic: 'memo + first + second',
47
+ expected: 20,
48
+ method_name: :tinject,
49
+ },
50
+ {
51
+ case_no: 8,
52
+ case_title: 'single with init valid array case',
53
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
54
+ init: [],
55
+ logic: 'memo << first + second',
56
+ method_name: :together_reduce,
57
+ expected: [5, 4, 6, 5],
58
+ },
59
+ {
60
+ case_no: 9,
61
+ case_title: 'single with init valid array case',
62
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
63
+ init: {},
64
+ logic: 'memo[first] = second; memo',
65
+ method_name: :together_reduce,
66
+ expected: { 1 => 4, 2 => 2, 3 => 3, 4 => 1 },
67
+ },
68
+ ]
69
+
70
+ cases.each do |c|
71
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
72
+ begin
73
+ case_before c
74
+
75
+ # -- given --
76
+ # nothing
77
+
78
+ # -- when/then --
79
+ if c[:init]
80
+ actual = c[:inputs].method(c[:method_name]).call(c[:init]) { |memo, first, second| eval c[:logic], binding }
81
+ else
82
+ actual = c[:inputs].method(c[:method_name]).call { |memo, first, second| eval c[:logic], binding }
83
+ end
84
+
85
+ expect(actual).to eq(c[:expected])
86
+ ensure
87
+ case_after c
88
+ end
89
+ end
90
+
91
+ def case_before(c)
92
+ # implement each case before
93
+ end
94
+
95
+ def case_after(c)
96
+ # implement each case after
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_reverse do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not empty case',
11
+ inputs: [[1, 2], [5, 6]],
12
+ method_name: 'together_reverse',
13
+ expected_ret: [[2, 1], [6, 5]],
14
+ expected_self: [[1, 2], [5, 6]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one empty case',
19
+ inputs: [[1, 2], []],
20
+ method_name: 'together_reverse',
21
+ expected_ret: [[2, 1], []],
22
+ expected_self: [[1, 2], []],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'not empty case(alias treverse)',
27
+ inputs: [[1, 2], [5, 6]],
28
+ method_name: 'treverse',
29
+ expected_ret: [[2, 1], [6, 5]],
30
+ expected_self: [[1, 2], [5, 6]],
31
+ },
32
+ ]
33
+
34
+ cases.each do |c|
35
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
36
+ begin
37
+ case_before c
38
+
39
+ # -- given --
40
+ # nothing
41
+
42
+ # -- when --
43
+ actual = c[:inputs].send c[:method_name]
44
+
45
+ # -- then --
46
+ expect(actual).to eq(c[:expected_ret])
47
+ expect(c[:inputs]).to eq(c[:expected_self])
48
+ ensure
49
+ case_after c
50
+ end
51
+ end
52
+
53
+ def case_before(c)
54
+ # implement each case before
55
+ end
56
+
57
+ def case_after(c)
58
+ # implement each case after
59
+ end
60
+ end
61
+ end
62
+
63
+ context :together_reverse! do
64
+ cases = [
65
+ {
66
+ case_no: 1,
67
+ case_title: 'not empty case',
68
+ inputs: [[1, 2], [5, 6]],
69
+ method_name: 'together_reverse!',
70
+ expected_ret: [[2, 1], [6, 5]],
71
+ expected_self: [[2, 1], [6, 5]],
72
+ },
73
+ {
74
+ case_no: 2,
75
+ case_title: 'one empty case',
76
+ inputs: [[1, 2], []],
77
+ method_name: 'together_reverse!',
78
+ expected_ret: [[2, 1], []],
79
+ expected_self: [[2, 1], []],
80
+ },
81
+ {
82
+ case_no: 3,
83
+ case_title: 'not empty case(alias treverse!)',
84
+ inputs: [[1, 2], [5, 6]],
85
+ method_name: 'treverse!',
86
+ expected_ret: [[2, 1], [6, 5]],
87
+ expected_self: [[2, 1], [6, 5]],
88
+ },
89
+ ]
90
+
91
+ cases.each do |c|
92
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
93
+ begin
94
+ case_before c
95
+
96
+ # -- given --
97
+ # nothing
98
+
99
+ # -- when --
100
+ actual = c[:inputs].send c[:method_name]
101
+
102
+ # -- then --
103
+ expect(actual).to eq(c[:expected_ret])
104
+ expect(c[:inputs]).to eq(c[:expected_self])
105
+ ensure
106
+ case_after c
107
+ end
108
+ end
109
+
110
+ def case_before(c)
111
+ # implement each case before
112
+ end
113
+
114
+ def case_after(c)
115
+ # implement each case after
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_select do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'single valid case',
11
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
12
+ condition: 'first == second',
13
+ method_name: :together_select,
14
+ expected: [[2, 3], [2, 3]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'multi valid case',
19
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
20
+ condition: '[first.odd?, second.even?]',
21
+ expected: [[1, 3], [4, 2]],
22
+ method_name: :together_select,
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'multi valid case',
27
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
28
+ condition: '[first.odd?, second.even?]',
29
+ expected: [[1, 3], [4, 2]],
30
+ method_name: :tselect,
31
+ },
32
+ {
33
+ case_no: 4,
34
+ case_title: 'multi valid case',
35
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
36
+ condition: '[first.odd?, second.even?]',
37
+ expected: [[1, 3], [4, 2]],
38
+ method_name: :together_find_all,
39
+ },
40
+ {
41
+ case_no: 5,
42
+ case_title: 'multi valid case',
43
+ inputs: [[1, 2, 3, 4], [4, 2, 3, 1]],
44
+ condition: '[first.odd?, second.even?]',
45
+ expected: [[1, 3], [4, 2]],
46
+ method_name: :tfindall,
47
+ },
48
+ ]
49
+
50
+ cases.each do |c|
51
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
52
+ begin
53
+ case_before c
54
+
55
+ # -- given --
56
+ # nothing
57
+
58
+ # -- when/then --
59
+ actual = c[:inputs].method(c[:method_name]).call { |first, second| eval c[:condition], binding }
60
+
61
+ expect(actual).to eq(c[:expected])
62
+ ensure
63
+ case_after c
64
+ end
65
+ end
66
+
67
+ def case_before(c)
68
+ # implement each case before
69
+ end
70
+
71
+ def case_after(c)
72
+ # implement each case after
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_shift do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'not empty case',
11
+ inputs: [[1, 2], [5, 6]],
12
+ method_name: 'together_shift',
13
+ expected_ret: [1, 5],
14
+ expected_self: [[2], [6]],
15
+ },
16
+ {
17
+ case_no: 2,
18
+ case_title: 'one empty case',
19
+ inputs: [[1, 2], []],
20
+ method_name: 'together_shift',
21
+ expected_ret: [1, nil],
22
+ expected_self: [[2], []],
23
+ },
24
+ {
25
+ case_no: 3,
26
+ case_title: 'both empty case',
27
+ inputs: [[], []],
28
+ method_name: 'together_shift',
29
+ expected_ret: [nil, nil],
30
+ expected_self: [[], []],
31
+ },
32
+ {
33
+ case_no: 4,
34
+ case_title: 'not empty, has args case',
35
+ inputs: [[1, 2], [5, 6]],
36
+ method_name: 'together_shift',
37
+ args: 2,
38
+ expected_ret: [[1, 2], [5, 6]],
39
+ expected_self: [[], []],
40
+ has_args: true,
41
+ },
42
+ {
43
+ case_no: 5,
44
+ case_title: 'one empty, has args case',
45
+ inputs: [[1, 2], []],
46
+ method_name: 'together_shift',
47
+ args: 2,
48
+ expected_ret: [[1, 2], []],
49
+ expected_self: [[], []],
50
+ has_args: true,
51
+ },
52
+ {
53
+ case_no: 6,
54
+ case_title: 'both empty, has args case',
55
+ inputs: [[], []],
56
+ method_name: 'together_shift',
57
+ args: 2,
58
+ expected_ret: [[], []],
59
+ expected_self: [[], []],
60
+ has_args: true,
61
+ },
62
+ {
63
+ case_no: 7,
64
+ case_title: 'not empty case(alias tshift)',
65
+ inputs: [[1, 2], [5, 6]],
66
+ method_name: 'tshift',
67
+ expected_ret: [1, 5],
68
+ expected_self: [[2], [6]],
69
+ },
70
+ ]
71
+
72
+ cases.each do |c|
73
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
74
+ begin
75
+ case_before c
76
+
77
+ # -- given --
78
+ # nothing
79
+
80
+ # -- when --
81
+ actual = \
82
+ if c[:has_args]
83
+ c[:inputs].send c[:method_name], c[:args]
84
+ else
85
+ c[:inputs].send c[:method_name]
86
+ end
87
+
88
+ # -- then --
89
+ expect(actual).to eq(c[:expected_ret])
90
+ expect(c[:inputs]).to eq(c[:expected_self])
91
+ ensure
92
+ case_after c
93
+ end
94
+ end
95
+
96
+ def case_before(c)
97
+ # implement each case before
98
+ end
99
+
100
+ def case_after(c)
101
+ # implement each case after
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
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
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'tbpgr_utils'
4
+
5
+ describe Array do
6
+ context :together_with_index do
7
+ cases = [
8
+ {
9
+ case_no: 1,
10
+ case_title: 'valid case',
11
+ inputs: [[1, 2, 3], %w{one two three}],
12
+ expected: ['0:1:one', '1:2:two', '2:3:three'],
13
+ },
14
+ {
15
+ case_no: 2,
16
+ case_title: 'contain nil case',
17
+ inputs: [[1, 2, 3], %w{one two}],
18
+ expected: ['0:1:one', '1:2:two', '2: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_with_index do |first, second, index|
33
+ actual << "#{index.to_s}:#{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
+ end
@@ -0,0 +1,122 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require "active_support/core_ext/object/inclusion"
4
+ require 'tbpgr_utils'
5
+
6
+ describe Array do
7
+ context :together_sample do
8
+ cases = [
9
+ {
10
+ case_no: 1,
11
+ case_title: 'not empty case',
12
+ inputs: [[1, 2], [5, 6]],
13
+ method_name: 'together_sample',
14
+ expected_first: "actual[0].in? [1, 2]",
15
+ expected_second: "actual[1].in? [5, 6]",
16
+ },
17
+ {
18
+ case_no: 2,
19
+ case_title: 'one empty case',
20
+ inputs: [[1, 2], []],
21
+ method_name: 'together_sample',
22
+ expected_first: "actual[0].in? [1, 2]",
23
+ expected_second: "actual[1].nil?",
24
+ },
25
+ {
26
+ case_no: 3,
27
+ case_title: 'both empty case',
28
+ inputs: [[], []],
29
+ method_name: 'together_sample',
30
+ expected_first: "actual[0].nil?",
31
+ expected_second: "actual[1].nil?",
32
+ },
33
+ {
34
+ case_no: 4,
35
+ case_title: 'not empty, has args case',
36
+ inputs: [[1, 2], [5, 6]],
37
+ method_name: 'together_sample',
38
+ args: 2,
39
+ expected_size: 2,
40
+ expected_first: "f.in? [1, 2]",
41
+ expected_second: "s.in? [5, 6]",
42
+ has_args: true,
43
+ },
44
+ {
45
+ case_no: 5,
46
+ case_title: 'both empty, has args case',
47
+ inputs: [[], []],
48
+ method_name: 'together_sample',
49
+ args: 2,
50
+ expected_size: 0,
51
+ expected_ret: [[], []],
52
+ expected_self: [[], []],
53
+ has_args: true,
54
+ },
55
+ {
56
+ case_no: 6,
57
+ case_title: 'not empty, over size, has args case',
58
+ inputs: [[1, 2], [5, 6]],
59
+ method_name: 'together_sample',
60
+ args: 3,
61
+ expected_size: 2,
62
+ expected_first: "f.in? [1, 2]",
63
+ expected_second: "s.in? [5, 6]",
64
+ has_args: true,
65
+ },
66
+ {
67
+ case_no: 7,
68
+ case_title: 'not empty case',
69
+ inputs: [[1, 2], [5, 6]],
70
+ method_name: 'tsample',
71
+ expected_first: "actual[0].in? [1, 2]",
72
+ expected_second: "actual[1].in? [5, 6]",
73
+ },
74
+ ]
75
+
76
+ cases.each do |c|
77
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
78
+ begin
79
+ case_before c
80
+
81
+ # -- given --
82
+ # nothing
83
+
84
+ # -- when --
85
+ if c[:has_args]
86
+ actual = c[:inputs].send c[:method_name], c[:args]
87
+ # -- then --
88
+ actual[0].each do |f|
89
+ first_ret = eval c[:expected_first], binding
90
+ expect(first_ret).to be_true
91
+ end
92
+ expect(actual[0].size).to eq(c[:expected_size])
93
+
94
+ actual[1].each do |s|
95
+ second_ret = eval c[:expected_second], binding
96
+ expect(second_ret).to be_true
97
+ end
98
+ expect(actual[1].size).to eq(c[:expected_size])
99
+ else
100
+ actual = c[:inputs].send c[:method_name]
101
+ # -- then --
102
+ first_ret = eval c[:expected_first], binding
103
+ expect(first_ret).to be_true
104
+ second_ret = eval c[:expected_second], binding
105
+ expect(second_ret).to be_true
106
+ end
107
+
108
+ ensure
109
+ case_after c
110
+ end
111
+ end
112
+
113
+ def case_before(c)
114
+ # implement each case before
115
+ end
116
+
117
+ def case_after(c)
118
+ # implement each case after
119
+ end
120
+ end
121
+ end
122
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,7 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
7
7
  Coveralls::SimpleCov::Formatter
8
8
  ]
9
9
  SimpleCov.start do
10
- add_filter "/spec/"
10
+ add_filter '/spec/'
11
11
  end
12
12
  RSpec.configure do |config|
13
13
  config.treat_symbols_as_metadata_keys_with_true_values = true