origen_testers 0.31.0 → 0.40.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +3 -1
  3. data/config/shared_commands.rb +4 -0
  4. data/config/version.rb +1 -1
  5. data/lib/origen_testers/api.rb +8 -0
  6. data/lib/origen_testers/atp/flow.rb +30 -9
  7. data/lib/origen_testers/flow.rb +36 -2
  8. data/lib/origen_testers/generator.rb +44 -5
  9. data/lib/origen_testers/interface.rb +22 -2
  10. data/lib/origen_testers/origen_ext/generator.rb +4 -3
  11. data/lib/origen_testers/origen_ext/generator/flow.rb +99 -5
  12. data/lib/origen_testers/program_generators.rb +5 -1
  13. data/lib/origen_testers/smartest_based_tester.rb +1 -0
  14. data/lib/origen_testers/smartest_based_tester/base.rb +177 -114
  15. data/lib/origen_testers/smartest_based_tester/base/flow.rb +329 -127
  16. data/lib/origen_testers/smartest_based_tester/base/generator.rb +25 -7
  17. data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +186 -60
  18. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +4 -0
  19. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +4 -0
  20. data/lib/origen_testers/smartest_based_tester/base/processors/extract_bin_names.rb +5 -1
  21. data/lib/origen_testers/smartest_based_tester/base/processors/extract_flow_vars.rb +108 -0
  22. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +8 -3
  23. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +9 -108
  24. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +17 -7
  25. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +29 -7
  26. data/lib/origen_testers/smartest_based_tester/smt7.rb +59 -0
  27. data/lib/origen_testers/smartest_based_tester/smt8.rb +218 -0
  28. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +32 -0
  29. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +2 -2
  30. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +109 -0
  31. data/lib/origen_testers/smartest_based_tester/v93k_smt8.rb +8 -0
  32. data/lib/origen_testers/smartest_based_tester/v93k_smt8/flow.rb +234 -0
  33. data/lib/origen_testers/smartest_based_tester/v93k_smt8/generator.rb +48 -0
  34. data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_file.rb +14 -0
  35. data/lib/origen_testers/smartest_based_tester/v93k_smt8/limits_workbook.rb +148 -0
  36. data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/limits.csv.erb +3 -0
  37. data/lib/origen_testers/smartest_based_tester/v93k_smt8/templates/template.flow.erb +41 -0
  38. data/lib/origen_testers/smartest_based_tester/v93k_smt8/test_suite.rb +66 -0
  39. data/lib/origen_testers/stil_based_tester/base.rb +4 -0
  40. data/lib/origen_testers/test/interface.rb +16 -2
  41. data/lib/origen_testers/vector_generator.rb +9 -4
  42. data/lib/origen_testers/vector_pipeline.rb +1 -1
  43. data/pattern/nvm/v93k/v93k_workout.rb +7 -0
  44. data/program/_erase_vfy.rb +2 -1
  45. data/program/components/_deep_nested.rb +3 -0
  46. data/program/components/_prb1_main.rb +1 -1
  47. data/program/components/_prb2_main.rb +6 -2
  48. data/program/flow_control.rb +3 -3
  49. data/program/prb1.rb +4 -0
  50. data/program/prb2.rb +7 -3
  51. data/templates/origen_guides/pattern/v93k.md.erb +24 -0
  52. data/templates/origen_guides/program/v93k.md.erb +6 -148
  53. data/templates/origen_guides/program/v93ksmt7.md.erb +165 -0
  54. data/templates/origen_guides/program/v93ksmt8.md.erb +112 -0
  55. metadata +30 -3
  56. data/lib/origen_testers/smartest_based_tester/base/test_methods/smart_calc_tml.rb +0 -23
@@ -60,6 +60,8 @@ module OrigenTesters
60
60
  @@pattern_masters = nil
61
61
  @@pattern_compilers = nil
62
62
  @@variables_files = nil
63
+ @@limits_workbook = nil
64
+ limits_workbook if tester.smt8? && !generating_sub_program?
63
65
  end
64
66
  alias_method :reset_globals, :at_run_start
65
67
 
@@ -77,16 +79,31 @@ module OrigenTesters
77
79
  @pattern_master_filename || 'global'
78
80
  end
79
81
 
80
- def flow(filename = Origen.file_handler.current_file.basename('.rb').to_s)
81
- f = filename.to_sym
82
- f = f.to_s.sub(/_resources?/, '').to_sym
83
- return flow_sheets[f] if flow_sheets[f] # will return flow if already existing
82
+ # Returns the current flow object (Origen.interface.flow)
83
+ def flow(id = Origen.file_handler.current_file.basename('.rb').to_s)
84
+ return @current_flow if @current_flow
85
+ id = id.to_s.sub(/_resources?/, '')
86
+ filename = id.split('.').last
87
+ return flow_sheets[id] if flow_sheets[id] # will return flow if already existing
84
88
  p = platform::Flow.new
85
89
  p.inhibit_output if Origen.interface.resources_mode?
86
- p.filename = f
90
+ p.filename = filename
87
91
  p.test_suites ||= platform::TestSuites.new(p)
88
92
  p.test_methods ||= platform::TestMethods.new(p)
89
- flow_sheets[f] = p
93
+ flow_sheets[id] = p
94
+ end
95
+
96
+ # @api private
97
+ def with_flow(name)
98
+ @flow_stack ||= []
99
+ @current_flow = nil
100
+ f = flow(name)
101
+ @flow_stack << f
102
+ @current_flow = @flow_stack.last
103
+ yield
104
+ @flow_stack.pop
105
+ @current_flow = @flow_stack.last
106
+ f
90
107
  end
91
108
 
92
109
  # Returns the pattern master file (.pmfl) for the current flow, by default a common pattern
@@ -165,7 +182,7 @@ module OrigenTesters
165
182
  end
166
183
 
167
184
  def flow_sheets
168
- @@flow_sheets ||= {}
185
+ @@flow_sheets ||= {}.with_indifferent_access
169
186
  end
170
187
 
171
188
  # Returns an array containing all sheet generators.
@@ -184,6 +201,7 @@ module OrigenTesters
184
201
  variables_files.each do |name, sheet|
185
202
  g << sheet
186
203
  end
204
+ g << limits_workbook if tester.smt8? && !generating_sub_program?
187
205
  g
188
206
  end
189
207
 
@@ -5,30 +5,66 @@ module OrigenTesters
5
5
  class LimitsFile < ATP::Formatter
6
6
  include OrigenTesters::Generator
7
7
 
8
- attr_reader :ast, :flow, :test_modes, :flowname, :bin_names
8
+ attr_reader :flow, :test_modes, :flowname, :bin_names
9
9
 
10
- def initialize(flow, ast, options = {})
10
+ def initialize(flow, options = {})
11
11
  @flow = flow
12
- @ast = ast
13
12
  @flowname = flow.filename.sub(/\..*/, '') # Base off the filename since it will include any prefix
14
13
  @used_test_numbers = {}
15
- @bin_names = Processors::ExtractBinNames.new.run(ast)
16
14
  @test_modes = Array(options[:test_modes])
17
15
  @empty = true
18
- l = '"Suite name","Pins","Test name","Test number"'
19
- if test_modes.empty?
20
- l += ',"Lsl","Lsl_typ","Usl_typ","Usl","Units","Bin_s_num","Bin_s_name","Bin_h_num","Bin_h_name","Bin_type","Bin_reprobe","Bin_overon","Test_remarks"'
21
- lines << l
22
- else
23
- l += (',"Lsl","Lsl_typ","Usl_typ","Usl","Units"' * test_modes.size) + ',"Bin_s_num","Bin_s_name","Bin_h_num","Bin_h_name","Bin_type","Bin_reprobe","Bin_overon","Test_remarks"'
16
+ @smt8 = tester.smt8?
17
+ end
18
+
19
+ def header
20
+ if smt8?
21
+ @test_path = []
22
+ l = 'Test Suite,Test,Test Number,Test Text'
23
+ if test_modes.empty?
24
+ l += ',Low Limit,High Limit'
25
+ else
26
+ l += ',Low Limit'
27
+ (test_modes.size - 1).times { l += ',' }
28
+ l += ',High Limit'
29
+ (test_modes.size - 1).times { l += ',' }
30
+ end
31
+ l += ',Unit,Soft Bin'
24
32
  lines << l
25
- l = '"Test mode",,,'
26
- test_modes.each do |mode|
27
- l += ",\"#{mode}\",\"#{mode}\",\"#{mode}\",\"#{mode}\",\"#{mode}\""
33
+
34
+ l = ',,,'
35
+ if test_modes.empty?
36
+ l += ',default,default'
37
+ else
38
+ test_modes.each { |mode| l += ",#{mode}" }
39
+ test_modes.each { |mode| l += ",#{mode}" }
28
40
  end
29
- l += ',,,,,,,,'
30
41
  lines << l
42
+
43
+ else
44
+ l = '"Suite name","Pins","Test name","Test number"'
45
+ if test_modes.empty?
46
+ l += ',"Lsl","Lsl_typ","Usl_typ","Usl","Units","Bin_s_num","Bin_s_name","Bin_h_num","Bin_h_name","Bin_type","Bin_reprobe","Bin_overon","Test_remarks"'
47
+ lines << l
48
+ else
49
+ l += (',"Lsl","Lsl_typ","Usl_typ","Usl","Units"' * test_modes.size) + ',"Bin_s_num","Bin_s_name","Bin_h_num","Bin_h_name","Bin_type","Bin_reprobe","Bin_overon","Test_remarks"'
50
+ lines << l
51
+ l = '"Test mode",,,'
52
+ test_modes.each do |mode|
53
+ l += ",\"#{mode}\",\"#{mode}\",\"#{mode}\",\"#{mode}\",\"#{mode}\""
54
+ end
55
+ l += ',,,,,,,,'
56
+ lines << l
57
+ end
31
58
  end
59
+ end
60
+
61
+ def test_modes=(modes)
62
+ @test_modes = Array(modes)
63
+ end
64
+
65
+ def generate(ast)
66
+ @bin_names = Processors::ExtractBinNames.new.run(ast)
67
+ header
32
68
  process(ast)
33
69
  end
34
70
 
@@ -37,12 +73,16 @@ module OrigenTesters
37
73
  end
38
74
 
39
75
  def subdirectory
40
- 'testtable/limits'
76
+ if tester.smt7?
77
+ 'testtable/limits'
78
+ else
79
+ "#{tester.package_namespace}/limits"
80
+ end
41
81
  end
42
82
 
43
83
  def on_test(node)
44
84
  o = {}
45
- o[:suite_name] = extract_test_suite_name(node, o)
85
+ o[:suite_name] = extract_test_suite_name(node)
46
86
 
47
87
  lines << line(extract_line_options(node, o))
48
88
 
@@ -53,14 +93,28 @@ module OrigenTesters
53
93
  process_all(node.children)
54
94
  end
55
95
 
96
+ def on_sub_flow(node)
97
+ @test_path << Pathname.new(node.find(:path).value).basename('.*').to_s
98
+ process_all(node.children)
99
+ @test_path.pop
100
+ end
101
+
56
102
  # Returns true if the AST provided when initializing this limits table generator did not
57
103
  # contain any tests, i.e. the resultant limits file is empty
58
104
  def empty?
59
105
  @empty
60
106
  end
61
107
 
108
+ def limits_workbook
109
+ Origen.interface.limits_workbook
110
+ end
111
+
62
112
  private
63
113
 
114
+ def smt8?
115
+ @smt8
116
+ end
117
+
64
118
  def extract_line_options(node, o)
65
119
  o[:test_name] = extract_test_name(node, o)
66
120
  o[:test_number] = extract_test_number(node, o)
@@ -84,6 +138,14 @@ module OrigenTesters
84
138
  else
85
139
  o[:bin_overon] = 'no'
86
140
  end
141
+ if smt8?
142
+ if o[:bin_s_num]
143
+ limits_workbook.add_softbin o[:bin_s_num], name: o[:bin_s_name], bin: o[:bin_h_num]
144
+ end
145
+ if o[:bin_h_num]
146
+ limits_workbook.add_bin o[:bin_h_num], name: o[:bin_h_name]
147
+ end
148
+ end
87
149
  end
88
150
  o
89
151
  end
@@ -144,71 +206,135 @@ module OrigenTesters
144
206
  end
145
207
  end
146
208
 
147
- def extract_test_suite_name(node, o)
209
+ def extract_test_suite_name(node)
148
210
  test_obj = node.find(:object).to_a[0]
149
- test_obj.respond_to?(:name) ? test_obj.name : test_obj if test_obj
211
+ if test_obj.is_a?(Hash)
212
+ name = test_obj['Test']
213
+ else
214
+ name = test_obj.respond_to?(:name) ? test_obj.name : test_obj if test_obj
215
+ end
216
+ name
150
217
  end
151
218
 
152
219
  def extract_test_name(node, o)
153
- (node.find(:name) || []).to_a[0] || extract_test_suite_name(node, o) || o[:suite_name]
220
+ test_obj = node.find(:object).to_a[0]
221
+ if smt8?
222
+ if test_obj.is_a?(Hash) && test_obj['Sub Test Name']
223
+ name = test_obj['Sub Test Name']
224
+ else
225
+ name = test_obj.try(:sub_test_name)
226
+ end
227
+ end
228
+ unless name
229
+ if test_obj.is_a?(Hash) && test_obj['Test Name']
230
+ name = test_obj['Test Name']
231
+ elsif test_obj.is_a?(String)
232
+ name = test_obj
233
+ else
234
+ name = (node.find(:name) || []).to_a[0] || extract_test_suite_name(node, o) || o[:suite_name]
235
+ end
236
+ end
237
+ name
154
238
  end
155
239
 
156
240
  def line(options)
157
241
  @empty = false
158
- # "Suite name"
159
- l = "\"#{options[:suite_name]}\""
160
- # "Pins"
161
- l << f(options[:pins])
162
- # "Test name"
163
- l << f(options[:test_name])
164
- # "Test number"
165
- l << f(options[:test_number])
166
- if test_modes.empty?
167
- # "Lsl"
168
- l << f((options[:limits][nil] || {})[:lsl])
169
- # "Lsl_typ"
170
- l << f((options[:limits][nil] || {})[:lsl_typ])
171
- # "Usl_typ"
172
- l << f((options[:limits][nil] || {})[:usl_typ])
173
- # "Usl"
174
- l << f((options[:limits][nil] || {})[:usl])
175
- # "Units"
242
+
243
+ if smt8?
244
+ # "Test Suite"
245
+ if @test_path.empty?
246
+ l = "#{options[:suite_name]}"
247
+ else
248
+ l = "#{@test_path.join('.')}.#{options[:suite_name]}"
249
+ end
250
+ # "Test"
251
+ l << f(options[:test_name])
252
+ # "Test Number"
253
+ l << f(options[:test_number])
254
+ # "Test Text"
255
+ # l << f(options[:bin_s_name] || options[:bin_h_name])
256
+ names = ["#{options[:suite_name]}", "#{options[:test_name]}"]
257
+ l << f(names.uniq.join('.'))
258
+ if test_modes.empty?
259
+ # "Low Limit"
260
+ l << f((options[:limits][nil] || {})[:lsl])
261
+ # "High Limit"
262
+ l << f((options[:limits][nil] || {})[:usl])
263
+ else
264
+ test_modes.each do |mode|
265
+ # "Low Limit"
266
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:lsl] || 'na')
267
+ end
268
+ test_modes.each do |mode|
269
+ # "High Limit"
270
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:usl] || 'na')
271
+ end
272
+ end
273
+ # "Unit"
176
274
  l << f((options[:limits][nil] || {})[:units])
275
+ # "Soft Bin"
276
+ l << f(options[:bin_s_num])
277
+
177
278
  else
178
- test_modes.each do |mode|
279
+ # "Suite name"
280
+ l = "\"#{options[:suite_name]}\""
281
+ # "Pins"
282
+ l << f(options[:pins])
283
+ # "Test name"
284
+ l << f(options[:test_name])
285
+ # "Test number"
286
+ l << f(options[:test_number])
287
+ if test_modes.empty?
179
288
  # "Lsl"
180
- l << f((options[:limits][mode] || options[:limits][nil] || {})[:lsl])
289
+ l << f((options[:limits][nil] || {})[:lsl])
181
290
  # "Lsl_typ"
182
- l << f((options[:limits][mode] || options[:limits][nil] || {})[:lsl_typ])
291
+ l << f((options[:limits][nil] || {})[:lsl_typ])
183
292
  # "Usl_typ"
184
- l << f((options[:limits][mode] || options[:limits][nil] || {})[:usl_typ])
293
+ l << f((options[:limits][nil] || {})[:usl_typ])
185
294
  # "Usl"
186
- l << f((options[:limits][mode] || options[:limits][nil] || {})[:usl])
295
+ l << f((options[:limits][nil] || {})[:usl])
187
296
  # "Units"
188
- l << f((options[:limits][mode] || options[:limits][nil] || {})[:units])
297
+ l << f((options[:limits][nil] || {})[:units])
298
+ else
299
+ test_modes.each do |mode|
300
+ # "Lsl"
301
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:lsl])
302
+ # "Lsl_typ"
303
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:lsl_typ])
304
+ # "Usl_typ"
305
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:usl_typ])
306
+ # "Usl"
307
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:usl])
308
+ # "Units"
309
+ l << f((options[:limits][mode] || options[:limits][nil] || {})[:units])
310
+ end
189
311
  end
312
+ # "Bin_s_num"
313
+ l << f(options[:bin_s_num])
314
+ # "Bin_s_name"
315
+ l << f(options[:bin_s_name])
316
+ # "Bin_h_num"
317
+ l << f(options[:bin_h_num])
318
+ # "Bin_h_name"
319
+ l << f(options[:bin_h_name])
320
+ # "Bin_type"
321
+ l << f(options[:bin_type])
322
+ # "Bin_reprobe"
323
+ l << f(options[:bin_reprobe])
324
+ # "Bin_overon"
325
+ l << f(options[:bin_overon])
326
+ # "Test_remarks"
327
+ l << f(options[:test_remarks])
190
328
  end
191
- # "Bin_s_num"
192
- l << f(options[:bin_s_num])
193
- # "Bin_s_name"
194
- l << f(options[:bin_s_name])
195
- # "Bin_h_num"
196
- l << f(options[:bin_h_num])
197
- # "Bin_h_name"
198
- l << f(options[:bin_h_name])
199
- # "Bin_type"
200
- l << f(options[:bin_type])
201
- # "Bin_reprobe"
202
- l << f(options[:bin_reprobe])
203
- # "Bin_overon"
204
- l << f(options[:bin_overon])
205
- # "Test_remarks"
206
- l << f(options[:test_remarks])
207
329
  l
208
330
  end
209
331
 
210
332
  def f(value)
211
- ",\"#{value}\""
333
+ if smt8?
334
+ ",#{value}"
335
+ else
336
+ ",\"#{value}\""
337
+ end
212
338
  end
213
339
  end
214
340
  end
@@ -26,6 +26,10 @@ module OrigenTesters
26
26
  def references
27
27
  Origen.interface.all_pattern_references[id]
28
28
  end
29
+
30
+ def to_be_written?
31
+ tester.smt7?
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -60,6 +60,10 @@ module OrigenTesters
60
60
  Origen.interface.all_pattern_references[id]
61
61
  end
62
62
 
63
+ def to_be_written?
64
+ tester.smt7?
65
+ end
66
+
63
67
  private
64
68
 
65
69
  def extract_subdir(name, options = {})
@@ -42,7 +42,11 @@ module OrigenTesters
42
42
 
43
43
  def default_name(node)
44
44
  test_obj = node.find(:object).to_a[0]
45
- suite_name = test_obj.respond_to?(:name) ? test_obj.name : test_obj
45
+ if test_obj.is_a?(Hash)
46
+ suite_name = test_obj['Test']
47
+ else
48
+ suite_name = test_obj.respond_to?(:name) ? test_obj.name : test_obj
49
+ end
46
50
  test_name = (node.find(:name) || []).to_a[0] || suite_name
47
51
  if suite_name == test_name
48
52
  suite_name
@@ -0,0 +1,108 @@
1
+ require 'set'
2
+ module OrigenTesters
3
+ module SmartestBasedTester
4
+ class Base
5
+ module Processors
6
+ # Returns an array containing all runtime control variables from the given AST node
7
+ # and their default values
8
+ class ExtractFlowVars < ATP::Processor
9
+ OWNERS = [:all, :this_flow, :sub_flows]
10
+ CATEGORIES = [:jobs, :referenced_flags, :set_flags, :set_flags_extern,
11
+ :referenced_enables, :set_enables]
12
+
13
+ def run(node, options = {})
14
+ @variables = {}
15
+ @variables[:empty?] = true
16
+ OWNERS.each do |t|
17
+ @variables[t] = {}
18
+ CATEGORIES.each { |c| @variables[t][c] = Set.new }
19
+ end
20
+ @sub_flow_depth = 0
21
+ process(node)
22
+ OWNERS.each do |t|
23
+ CATEGORIES.each do |c|
24
+ @variables[t][c] = @variables[t][c].to_a.sort do |x, y|
25
+ x = x[0] if x.is_a?(Array)
26
+ y = y[0] if y.is_a?(Array)
27
+ x <=> y
28
+ end
29
+ end
30
+ end
31
+ @variables
32
+ end
33
+
34
+ def on_sub_flow(node)
35
+ @sub_flow_depth += 1
36
+ children = node.children
37
+ on_fail = node.find_all(:on_fail)
38
+ children -= on_fail
39
+ on_pass = node.find_all(:on_pass)
40
+ children -= on_pass
41
+ process_all(children)
42
+ @sub_flow_depth -= 1
43
+ process_all(on_fail)
44
+ process_all(on_pass)
45
+ end
46
+
47
+ def on_if_job(node)
48
+ add ['JOB', ''], :jobs
49
+ process_all(node.children)
50
+ end
51
+ alias_method :on_unless_job, :on_if_job
52
+
53
+ def on_if_flag(node)
54
+ flag, *nodes = *node
55
+ [flag].flatten.each do |f|
56
+ add generate_flag_name(f), :referenced_flags
57
+ end
58
+ process_all(nodes)
59
+ end
60
+ alias_method :on_unless_flag, :on_if_flag
61
+
62
+ def on_set_flag(node)
63
+ add generate_flag_name(node.value), :set_flags
64
+ # Also separate flags which have been set and which should be externally visible
65
+ if !node.to_a.include?('auto_generated') || node.to_a.include?('extern')
66
+ add generate_flag_name(node.value), :set_flags_extern
67
+ end
68
+ end
69
+
70
+ def on_if_enabled(node)
71
+ flag, *nodes = *node
72
+ [flag].flatten.each do |f|
73
+ add generate_flag_name(f), :referenced_enables
74
+ end
75
+ process_all(nodes)
76
+ end
77
+ alias_method :on_unless_enabled, :on_if_enabled
78
+
79
+ def on_enable(node)
80
+ flag = node.value.upcase
81
+ add flag, :set_enables
82
+ end
83
+ alias_method :on_disable, :on_enable
84
+
85
+ private
86
+
87
+ def in_sub_flow?
88
+ @sub_flow_depth > 0
89
+ end
90
+
91
+ def add(var, type)
92
+ @variables[:empty?] = false
93
+ @variables[:all][type] << var
94
+ if in_sub_flow?
95
+ @variables[:sub_flows][type] << var
96
+ else
97
+ @variables[:this_flow][type] << var
98
+ end
99
+ end
100
+
101
+ def generate_flag_name(flag)
102
+ SmartestBasedTester::Base::Flow.generate_flag_name(flag)
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end