piko-max-mod 0.0.1

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 (78) hide show
  1. checksums.yaml +7 -0
  2. data/piko-max-mod.gemspec +12 -0
  3. data/test-unit-3.7.8/BSDL +24 -0
  4. data/test-unit-3.7.8/COPYING +64 -0
  5. data/test-unit-3.7.8/PSFL +271 -0
  6. data/test-unit-3.7.8/README.md +108 -0
  7. data/test-unit-3.7.8/Rakefile +74 -0
  8. data/test-unit-3.7.8/bin/test-unit +5 -0
  9. data/test-unit-3.7.8/doc/text/getting-started.md +120 -0
  10. data/test-unit-3.7.8/doc/text/how-to.md +90 -0
  11. data/test-unit-3.7.8/doc/text/news.md +2070 -0
  12. data/test-unit-3.7.8/lib/test/unit/assertion-failed-error.rb +60 -0
  13. data/test-unit-3.7.8/lib/test/unit/assertions.rb +2536 -0
  14. data/test-unit-3.7.8/lib/test/unit/attribute-matcher.rb +26 -0
  15. data/test-unit-3.7.8/lib/test/unit/attribute.rb +228 -0
  16. data/test-unit-3.7.8/lib/test/unit/auto-runner-loader.rb +17 -0
  17. data/test-unit-3.7.8/lib/test/unit/autorunner.rb +654 -0
  18. data/test-unit-3.7.8/lib/test/unit/code-snippet-fetcher.rb +58 -0
  19. data/test-unit-3.7.8/lib/test/unit/collector/descendant.rb +20 -0
  20. data/test-unit-3.7.8/lib/test/unit/collector/dir.rb +110 -0
  21. data/test-unit-3.7.8/lib/test/unit/collector/load.rb +201 -0
  22. data/test-unit-3.7.8/lib/test/unit/collector/objectspace.rb +35 -0
  23. data/test-unit-3.7.8/lib/test/unit/collector/xml.rb +249 -0
  24. data/test-unit-3.7.8/lib/test/unit/collector.rb +104 -0
  25. data/test-unit-3.7.8/lib/test/unit/color-scheme.rb +225 -0
  26. data/test-unit-3.7.8/lib/test/unit/color.rb +134 -0
  27. data/test-unit-3.7.8/lib/test/unit/data-sets.rb +127 -0
  28. data/test-unit-3.7.8/lib/test/unit/data.rb +371 -0
  29. data/test-unit-3.7.8/lib/test/unit/diff.rb +745 -0
  30. data/test-unit-3.7.8/lib/test/unit/error.rb +158 -0
  31. data/test-unit-3.7.8/lib/test/unit/exception-handler.rb +82 -0
  32. data/test-unit-3.7.8/lib/test/unit/failure.rb +169 -0
  33. data/test-unit-3.7.8/lib/test/unit/fault-location-detector.rb +104 -0
  34. data/test-unit-3.7.8/lib/test/unit/fixture.rb +304 -0
  35. data/test-unit-3.7.8/lib/test/unit/notification.rb +138 -0
  36. data/test-unit-3.7.8/lib/test/unit/omission.rb +198 -0
  37. data/test-unit-3.7.8/lib/test/unit/pending.rb +155 -0
  38. data/test-unit-3.7.8/lib/test/unit/priority.rb +194 -0
  39. data/test-unit-3.7.8/lib/test/unit/process-test-result.rb +55 -0
  40. data/test-unit-3.7.8/lib/test/unit/process-worker.rb +87 -0
  41. data/test-unit-3.7.8/lib/test/unit/runner/console.rb +86 -0
  42. data/test-unit-3.7.8/lib/test/unit/runner/emacs.rb +8 -0
  43. data/test-unit-3.7.8/lib/test/unit/runner/xml.rb +15 -0
  44. data/test-unit-3.7.8/lib/test/unit/sub-test-result.rb +59 -0
  45. data/test-unit-3.7.8/lib/test/unit/test-process-run-context.rb +21 -0
  46. data/test-unit-3.7.8/lib/test/unit/test-run-context.rb +16 -0
  47. data/test-unit-3.7.8/lib/test/unit/test-suite-creator.rb +103 -0
  48. data/test-unit-3.7.8/lib/test/unit/test-suite-process-runner.rb +205 -0
  49. data/test-unit-3.7.8/lib/test/unit/test-suite-runner.rb +132 -0
  50. data/test-unit-3.7.8/lib/test/unit/test-suite-thread-runner.rb +96 -0
  51. data/test-unit-3.7.8/lib/test/unit/test-thread-run-context.rb +23 -0
  52. data/test-unit-3.7.8/lib/test/unit/testcase.rb +1058 -0
  53. data/test-unit-3.7.8/lib/test/unit/testresult.rb +132 -0
  54. data/test-unit-3.7.8/lib/test/unit/testsuite.rb +133 -0
  55. data/test-unit-3.7.8/lib/test/unit/ui/console/outputlevel.rb +15 -0
  56. data/test-unit-3.7.8/lib/test/unit/ui/console/testrunner.rb +891 -0
  57. data/test-unit-3.7.8/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  58. data/test-unit-3.7.8/lib/test/unit/ui/testrunner.rb +53 -0
  59. data/test-unit-3.7.8/lib/test/unit/ui/testrunnermediator.rb +131 -0
  60. data/test-unit-3.7.8/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  61. data/test-unit-3.7.8/lib/test/unit/ui/xml/testrunner.rb +225 -0
  62. data/test-unit-3.7.8/lib/test/unit/util/backtracefilter.rb +65 -0
  63. data/test-unit-3.7.8/lib/test/unit/util/memory-usage.rb +47 -0
  64. data/test-unit-3.7.8/lib/test/unit/util/method-owner-finder.rb +28 -0
  65. data/test-unit-3.7.8/lib/test/unit/util/observable.rb +86 -0
  66. data/test-unit-3.7.8/lib/test/unit/util/output.rb +32 -0
  67. data/test-unit-3.7.8/lib/test/unit/util/procwrapper.rb +48 -0
  68. data/test-unit-3.7.8/lib/test/unit/version.rb +5 -0
  69. data/test-unit-3.7.8/lib/test/unit/warning.rb +3 -0
  70. data/test-unit-3.7.8/lib/test/unit/worker-context.rb +20 -0
  71. data/test-unit-3.7.8/lib/test/unit.rb +521 -0
  72. data/test-unit-3.7.8/lib/test-unit.rb +19 -0
  73. data/test-unit-3.7.8/sample/adder.rb +13 -0
  74. data/test-unit-3.7.8/sample/subtracter.rb +12 -0
  75. data/test-unit-3.7.8/sample/test_adder.rb +20 -0
  76. data/test-unit-3.7.8/sample/test_subtracter.rb +20 -0
  77. data/test-unit-3.7.8/sample/test_user.rb +23 -0
  78. metadata +117 -0
@@ -0,0 +1,104 @@
1
+ module Test
2
+ module Unit
3
+ module Collector
4
+ def initialize
5
+ @filters = []
6
+ end
7
+
8
+ def filter=(filters)
9
+ @filters = case(filters)
10
+ when Proc
11
+ [filters]
12
+ when Array
13
+ filters
14
+ end
15
+ end
16
+
17
+ def add_suite(destination, suite)
18
+ to_delete = suite.tests.find_all do |test|
19
+ test.is_a?(TestCase) and !include?(test)
20
+ end
21
+ suite.delete_tests(to_delete)
22
+ destination << suite unless suite.empty?
23
+ end
24
+
25
+ def add_test_cases(suite, test_cases)
26
+ children_map = {}
27
+ test_cases.each do |test_case|
28
+ ancestor_classes = test_case.ancestors.find_all do |ancestor|
29
+ ancestor.is_a?(Class)
30
+ end
31
+ parent = ancestor_classes[1]
32
+ children_map[parent] ||= []
33
+ children_map[parent] << test_case
34
+ end
35
+
36
+ root_test_cases = children_map.keys - test_cases
37
+ root_test_cases.each do |root_test_case|
38
+ add_test_case(suite, root_test_case, children_map)
39
+ end
40
+ end
41
+
42
+ def include?(test)
43
+ return true if(@filters.empty?)
44
+ @filters.each do |filter|
45
+ return false if filter[test] == false
46
+ end
47
+ true
48
+ end
49
+
50
+ def sort(suites)
51
+ suites.sort_by do |suite|
52
+ [suite.priority, suite.name || suite.to_s]
53
+ end
54
+ end
55
+
56
+ private
57
+ def add_test_case(suite, test_case, children_map)
58
+ children = children_map[test_case]
59
+ return if children.nil?
60
+
61
+ sub_suites = []
62
+ children.each do |child|
63
+ sub_suite = child.suite
64
+ add_test_case(sub_suite, child, children_map)
65
+ add_suite(sub_suites, sub_suite)
66
+ end
67
+ sort(sub_suites).each do |sub_suite|
68
+ suite << sub_suite
69
+ end
70
+ end
71
+
72
+ def adjust_ractor_tests(suite)
73
+ return if suite.nil?
74
+ ractor_suites = extract_ractor_tests(suite)
75
+ ractor_suites.each do |ractor_suite|
76
+ suite << ractor_suite
77
+ end
78
+ end
79
+
80
+ def extract_ractor_tests(suite)
81
+ ractor_suites = []
82
+ ractor_tests = []
83
+ suite.tests.each do |test|
84
+ case test
85
+ when TestSuite
86
+ ractor_suites.concat(extract_ractor_tests(test))
87
+ else
88
+ next unless test[:ractor]
89
+ ractor_tests << test
90
+ end
91
+ end
92
+ unless ractor_tests.empty?
93
+ suite.delete_tests(ractor_tests)
94
+ ractor_suite = TestSuite.new(suite.name, suite.test_case)
95
+ ractor_tests.each do |ractor_test|
96
+ ractor_suite << ractor_test
97
+ end
98
+ ractor_suites << ractor_suite
99
+ end
100
+ ractor_suites
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,225 @@
1
+ require_relative 'color'
2
+
3
+ module Test
4
+ module Unit
5
+ class ColorScheme
6
+ include Enumerable
7
+
8
+ TERM_256 = /
9
+ [+-]256color|
10
+ \A(?:
11
+ alacritty|
12
+ iTerm\s?\d*\.app|
13
+ kitty|
14
+ mintty|
15
+ ms-terminal|
16
+ nsterm-build\d+|
17
+ nsterm|
18
+ terminator|
19
+ terminology(?:-[0-9.]+)?|
20
+ termite|
21
+ vscode
22
+ )\z/x
23
+
24
+ class << self
25
+ def default
26
+ if available_colors >= 256
27
+ default_for_256_colors
28
+ else
29
+ default_for_8_colors
30
+ end
31
+ end
32
+
33
+ @@default_for_8_colors = nil
34
+ def default_for_8_colors
35
+ @@default_for_8_colors ||=
36
+ new("pass" => Color.new("green", :background => true) +
37
+ Color.new("white", :bold => true),
38
+ "pass-marker" => Color.new("green", :bold => true),
39
+ "failure" => Color.new("red", :background => true) +
40
+ Color.new("white", :bold => true),
41
+ "failure-marker" => Color.new("red"),
42
+ "pending" => Color.new("magenta", :background => true) +
43
+ Color.new("white", :bold => true),
44
+ "pending-marker" => Color.new("magenta"),
45
+ "omission" => Color.new("blue", :background => true) +
46
+ Color.new("white", :bold => true),
47
+ "omission-marker" => Color.new("blue"),
48
+ "notification" => Color.new("cyan", :background => true) +
49
+ Color.new("white", :bold => true),
50
+ "notification-marker" => Color.new("cyan"),
51
+ "error" => Color.new("black", :background => true) +
52
+ Color.new("yellow", :bold => true),
53
+ "error-marker" => Color.new("yellow"),
54
+ "case" => Color.new("blue", :background => true) +
55
+ Color.new("white", :bold => true),
56
+ "suite" => Color.new("green", :background => true) +
57
+ Color.new("white", :bold => true),
58
+ "diff-inserted-tag" => Color.new("red", :background => true) +
59
+ Color.new("black", :bold => true),
60
+ "diff-deleted-tag" => Color.new("green", :background => true) +
61
+ Color.new("black", :bold => true),
62
+ "diff-difference-tag" => Color.new("cyan", :background => true) +
63
+ Color.new("white", :bold => true),
64
+ "diff-inserted" => Color.new("red", :background => true) +
65
+ Color.new("white", :bold => true),
66
+ "diff-deleted" => Color.new("green", :background => true) +
67
+ Color.new("white", :bold => true))
68
+ end
69
+
70
+ @@default_for_256_colors = nil
71
+ def default_for_256_colors
72
+ @@default_for_256_colors ||=
73
+ new("pass" => Color.new("030", :background => true) +
74
+ Color.new("555", :bold => true),
75
+ "pass-marker" => Color.new("050", :bold => true),
76
+ "failure" => Color.new("300", :background => true) +
77
+ Color.new("555", :bold => true),
78
+ "failure-marker" => Color.new("500"),
79
+ "pending" => Color.new("303", :background => true) +
80
+ Color.new("555", :bold => true),
81
+ "pending-marker" => Color.new("303"),
82
+ "omission" => Color.new("001", :background => true) +
83
+ Color.new("555", :bold => true),
84
+ "omission-marker" => Color.new("001"),
85
+ "notification" => Color.new("011", :background => true) +
86
+ Color.new("555", :bold => true),
87
+ "notification-marker" => Color.new("011"),
88
+ "error" => Color.new("000", :background => true) +
89
+ Color.new("550", :bold => true),
90
+ "error-marker" => Color.new("550"),
91
+ "case" => Color.new("220", :background => true) +
92
+ Color.new("555", :bold => true),
93
+ "suite" => Color.new("110", :background => true) +
94
+ Color.new("555", :bold => true),
95
+ "diff-inserted-tag" => Color.new("500", :background => true) +
96
+ Color.new("000", :bold => true),
97
+ "diff-deleted-tag" => Color.new("050", :background => true) +
98
+ Color.new("000", :bold => true),
99
+ "diff-difference-tag" => Color.new("005", :background => true) +
100
+ Color.new("555", :bold => true),
101
+ "diff-inserted" => Color.new("300", :background => true) +
102
+ Color.new("555", :bold => true),
103
+ "diff-deleted" => Color.new("030", :background => true) +
104
+ Color.new("555", :bold => true))
105
+ end
106
+
107
+ @@schemes = {}
108
+ def all
109
+ @@schemes.merge("default" => default)
110
+ end
111
+
112
+ def [](id)
113
+ @@schemes[id.to_s]
114
+ end
115
+
116
+ def []=(id, scheme_or_spec)
117
+ if scheme_or_spec.is_a?(self)
118
+ scheme = scheme_or_spec
119
+ else
120
+ scheme = new(scheme_or_spec)
121
+ end
122
+ @@schemes[id.to_s] = scheme
123
+ end
124
+
125
+ def available_colors
126
+ guess_available_colors_from_vte_version_env ||
127
+ guess_available_colors_from_colorterm_env ||
128
+ guess_available_colors_from_term_env ||
129
+ guess_available_colors_from_github_actions_env ||
130
+ 8
131
+ end
132
+
133
+ private
134
+ def guess_available_colors_from_vte_version_env
135
+ vte_version = ENV["VTE_VERSION"]
136
+ return nil if vte_version.nil?
137
+
138
+ major = 0
139
+ minor = 13
140
+ micro = 0
141
+ packed_version = major * 10000 + minor * 100 + micro
142
+ if vte_version.to_i >= packed_version
143
+ 256
144
+ else
145
+ 8
146
+ end
147
+ end
148
+
149
+ def guess_available_colors_from_colorterm_env
150
+ case ENV["COLORTERM"]
151
+ when "gnome-terminal", "xfce4-terminal"
152
+ 256
153
+ else
154
+ nil
155
+ end
156
+ end
157
+
158
+ def guess_available_colors_from_term_env
159
+ case ENV["TERM"]
160
+ when /[+-]direct/
161
+ 2 ** 24
162
+ when TERM_256
163
+ 256
164
+ else
165
+ nil
166
+ end
167
+ end
168
+
169
+ def guess_available_colors_from_github_actions_env
170
+ if ENV["GITHUB_ACTIONS"] == "true"
171
+ 2 ** 24
172
+ else
173
+ nil
174
+ end
175
+ end
176
+ end
177
+
178
+ def initialize(scheme_spec)
179
+ @scheme = {}
180
+ scheme_spec.each do |key, color_spec|
181
+ self[key] = color_spec
182
+ end
183
+ end
184
+
185
+ def [](name)
186
+ @scheme[name.to_s]
187
+ end
188
+
189
+ def []=(name, color_spec)
190
+ @scheme[name.to_s] = make_color(color_spec)
191
+ end
192
+
193
+ def each(&block)
194
+ @scheme.each(&block)
195
+ end
196
+
197
+ def to_hash
198
+ hash = {}
199
+ @scheme.each do |key, color|
200
+ hash[key] = color
201
+ end
202
+ hash
203
+ end
204
+
205
+ private
206
+ def make_color(color_spec)
207
+ if color_spec.is_a?(Color) or color_spec.is_a?(MixColor)
208
+ color_spec
209
+ else
210
+ color_name = nil
211
+ normalized_color_spec = {}
212
+ color_spec.each do |key, value|
213
+ key = key.to_sym
214
+ if key == :name
215
+ color_name = value
216
+ else
217
+ normalized_color_spec[key] = value
218
+ end
219
+ end
220
+ Color.new(color_name, normalized_color_spec)
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,134 @@
1
+ module Test
2
+ module Unit
3
+ class Color
4
+ class Error < StandardError
5
+ end
6
+
7
+ class ParseError < Error
8
+ end
9
+
10
+ class << self
11
+ def parse_256_color(string)
12
+ case string
13
+ when /\A([0-5])([0-5])([0-5])\z/
14
+ red, green, blue = $1, $2, $3
15
+ red.to_i * 36 + green.to_i * 6 + blue.to_i + 16
16
+ else
17
+ message = "must be 'RGB' format and R, G and B " +
18
+ "are in 0-5: #{string.inspect}"
19
+ raise ParseError, message
20
+ end
21
+ end
22
+ end
23
+
24
+ NAMES = ["black", "red", "green", "yellow",
25
+ "blue", "magenta", "cyan", "white"]
26
+
27
+ attr_reader :name
28
+ def initialize(name, options={})
29
+ @name = name
30
+ if options.has_key?(:foreground)
31
+ if options[:foreground].nil?
32
+ @background = false
33
+ else
34
+ @background = !options[:foreground]
35
+ end
36
+ else
37
+ @background = options[:background]
38
+ end
39
+ @intensity = options[:intensity]
40
+ @bold = options[:bold]
41
+ @italic = options[:italic]
42
+ @underline = options[:underline]
43
+ end
44
+
45
+ def foreground?
46
+ not background?
47
+ end
48
+
49
+ def background?
50
+ @background
51
+ end
52
+
53
+ def intensity?
54
+ @intensity
55
+ end
56
+
57
+ def bold?
58
+ @bold
59
+ end
60
+
61
+ def italic?
62
+ @italic
63
+ end
64
+
65
+ def underline?
66
+ @underline
67
+ end
68
+
69
+ def ==(other)
70
+ self.class === other and
71
+ [name, background?, intensity?,
72
+ bold?, italic?, underline?] ==
73
+ [other.name, other.background?, other.intensity?,
74
+ other.bold?, other.italic?, other.underline?]
75
+ end
76
+
77
+ def sequence
78
+ sequence = []
79
+ if @name == "none"
80
+ elsif @name == "reset"
81
+ sequence << "0"
82
+ else
83
+ if NAMES.include?(@name)
84
+ color_parameter = foreground? ? 3 : 4
85
+ color_parameter += 6 if intensity?
86
+ color = NAMES.index(@name)
87
+ sequence << "#{color_parameter}#{color}"
88
+ else
89
+ sequence << (foreground? ? "38" : "48")
90
+ sequence << "5"
91
+ sequence << self.class.parse_256_color(@name).to_s
92
+ end
93
+ end
94
+ sequence << "1" if bold?
95
+ sequence << "3" if italic?
96
+ sequence << "4" if underline?
97
+ sequence
98
+ end
99
+
100
+ def escape_sequence
101
+ "\e[#{sequence.join(';')}m"
102
+ end
103
+
104
+ def +(other)
105
+ MixColor.new([self, other])
106
+ end
107
+ end
108
+
109
+ class MixColor
110
+ attr_reader :colors
111
+ def initialize(colors)
112
+ @colors = colors
113
+ end
114
+
115
+ def sequence
116
+ @colors.inject([]) do |result, color|
117
+ result + color.sequence
118
+ end
119
+ end
120
+
121
+ def escape_sequence
122
+ "\e[#{sequence.join(';')}m"
123
+ end
124
+
125
+ def +(other)
126
+ self.class.new([self, other])
127
+ end
128
+
129
+ def ==(other)
130
+ self.class === other and colors == other.colors
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,127 @@
1
+ module Test
2
+ module Unit
3
+ class DataSets
4
+ def initialize
5
+ @variables = []
6
+ @procs = []
7
+ @value_sets = []
8
+ end
9
+
10
+ def add(data_set, options=nil)
11
+ options ||= {}
12
+ if data_set.respond_to?(:call)
13
+ @procs << [data_set, options]
14
+ elsif data_set.is_a?(Array)
15
+ @variables << [data_set, options]
16
+ else
17
+ @value_sets << [data_set, options]
18
+ end
19
+ end
20
+
21
+ def <<(data_set)
22
+ add(data_set)
23
+ end
24
+
25
+ def have_keep?
26
+ each_data_set do |_, options|
27
+ return true if options[:keep]
28
+ end
29
+ false
30
+ end
31
+
32
+ def keep
33
+ new_data_sets = self.class.new
34
+ each_data_set do |data_set, options|
35
+ next if options.nil?
36
+ next unless options[:keep]
37
+ new_data_sets.add(data_set, options)
38
+ end
39
+ new_data_sets
40
+ end
41
+
42
+ def each
43
+ variables = @variables
44
+ value_sets = @value_sets
45
+ @procs.each do |proc, options|
46
+ data_set = proc.call
47
+ case data_set
48
+ when Array
49
+ variables += [[data_set, options]]
50
+ else
51
+ value_sets += [[data_set, options]]
52
+ end
53
+ end
54
+
55
+ value_sets.each do |values, _options|
56
+ values.each do |label, data|
57
+ yield(label, data)
58
+ end
59
+ end
60
+
61
+ each_pattern(variables) do |label, data|
62
+ yield(label, data)
63
+ end
64
+ end
65
+
66
+ def ==(other)
67
+ @variables == other.instance_variable_get(:@variables) and
68
+ @procs == other.instance_variable_get(:@procs) and
69
+ @value_sets == other.instance_variable_get(:@value_sets)
70
+ end
71
+
72
+ def eql?(other)
73
+ self == other
74
+ end
75
+
76
+ def hash
77
+ [@variables, @procs, @value_sets].hash
78
+ end
79
+
80
+ private
81
+ def each_data_set(&block)
82
+ @procs.each(&block)
83
+ @variables.each(&block)
84
+ @value_sets.each(&block)
85
+ end
86
+
87
+ def each_pattern(variables)
88
+ grouped_variables = variables.group_by do |_, options|
89
+ options[:group]
90
+ end
91
+ grouped_variables.each do |group, group_variables|
92
+ each_raw_pattern(group_variables) do |cell|
93
+ label = String.new
94
+ label << "group: #{group.inspect}" unless group.nil?
95
+ data = {}
96
+ cell.each do |variable, pattern, pattern_label|
97
+ label << ", " unless label.empty?
98
+ label << "#{variable}: #{pattern_label}"
99
+ data[variable] = pattern
100
+ end
101
+ yield(label, data)
102
+ end
103
+ end
104
+ end
105
+
106
+ def each_raw_pattern(variables, &block)
107
+ return if variables.empty?
108
+
109
+ sorted_variables = variables.sort_by do |(variable, _), _|
110
+ variable
111
+ end
112
+ all_patterns = sorted_variables.collect do |(variable, patterns), _|
113
+ if patterns.is_a?(Hash)
114
+ patterns.collect do |pattern_label, pattern|
115
+ [variable, pattern, pattern_label]
116
+ end
117
+ else
118
+ patterns.collect do |pattern|
119
+ [variable, pattern, pattern.inspect]
120
+ end
121
+ end
122
+ end
123
+ all_patterns[0].product(*all_patterns[1..-1], &block)
124
+ end
125
+ end
126
+ end
127
+ end