origen_testers 0.49.0 → 0.49.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.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/origen_testers/atp/flow.rb +18 -6
- data/lib/origen_testers/flow.rb +5 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +35 -0
- data/program/flow_control.rb +33 -1
- data/templates/origen_guides/program/flowapi.md.erb +33 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b1fa14ed70e74c6a983c7214b55a575b346563b296ef6381b0d90be0ac9383
|
4
|
+
data.tar.gz: 644ea157e1e0b4fd0586ef09360566dd6b9d9bbfa1fb216da16b9f6de3688616
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67267f477fb2fa7796e92e0d742137781b8450125fee7756c8d3996f7511db6de66069b8a1564ca436295fd928318fc2a85c47a4d198155953b8126cca49f569
|
7
|
+
data.tar.gz: a9bb49fb80816c242860a099f9215c30d58080d535aae0cefd61f5f7875939968ba0a376af3b87c7839e52eef57713835b1f2fbab32b67a4e64a5aa7b92b242f
|
data/config/version.rb
CHANGED
@@ -583,14 +583,26 @@ module OrigenTesters::ATP
|
|
583
583
|
end
|
584
584
|
|
585
585
|
def loop(*args, &block)
|
586
|
-
unless args[0].keys.include?(:from) && args[0].keys.include?(:to)
|
587
|
-
fail 'Loop must specify :from, :to
|
586
|
+
unless args[0].keys.include?(:from) && args[0].keys.include?(:to)
|
587
|
+
fail 'Loop must specify :from, :to'
|
588
|
+
end
|
589
|
+
# assume 1 if :step not provided
|
590
|
+
unless args[0].keys.include?(:step)
|
591
|
+
args[0][:step] = 1
|
592
|
+
end
|
593
|
+
# assume 1 if :test_num_inc not provided
|
594
|
+
unless args[0].keys.include?(:test_num_inc)
|
595
|
+
args[0][:test_num_inc] = 1
|
596
|
+
end
|
597
|
+
# Add node for set of flag to be used for loop
|
598
|
+
unless args[0][:var].nil?
|
599
|
+
set(args[0][:var], 0)
|
588
600
|
end
|
589
601
|
extract_meta!(options) do
|
590
602
|
apply_conditions(options) do
|
591
|
-
# always pass
|
592
|
-
#
|
593
|
-
params = [args[0][:from], args[0][:to], args[0][:step], args[0][:var]]
|
603
|
+
# always pass 5-element array to loop node to simplify downstream parser
|
604
|
+
# element, 'var', will be nil if not specified by loop call
|
605
|
+
params = [args[0][:from], args[0][:to], args[0][:step], args[0][:var], args[0][:test_num_inc]]
|
594
606
|
|
595
607
|
node = n(:loop, params)
|
596
608
|
node = append_to(node) { block.call }
|
@@ -603,7 +615,7 @@ module OrigenTesters::ATP
|
|
603
615
|
define_method method do |*args, &block|
|
604
616
|
options = args.pop if args.last.is_a?(Hash)
|
605
617
|
unless args.size == 2
|
606
|
-
fail "Format for relational operation must match: ':<
|
618
|
+
fail "Format for relational operation must match: ':<operator>(var1, var2)'"
|
607
619
|
end
|
608
620
|
n2(method.to_sym, args[0], args[1])
|
609
621
|
end unless method_defined?(method)
|
data/lib/origen_testers/flow.rb
CHANGED
@@ -205,6 +205,8 @@ module OrigenTesters
|
|
205
205
|
def active_description
|
206
206
|
flow_file = OrigenTesters::Flow.callstack.last
|
207
207
|
called_from = caller.find { |l| l =~ /^#{flow_file}:.*/ }
|
208
|
+
# Windows fix - prevent the drive letter in the file name from changing the index of the line_no below
|
209
|
+
called_from.gsub!(flow_file, '')
|
208
210
|
desc = nil
|
209
211
|
if called_from
|
210
212
|
called_from = called_from.split(':')
|
@@ -257,8 +259,10 @@ module OrigenTesters
|
|
257
259
|
flow_file = OrigenTesters::Flow.callstack.last
|
258
260
|
called_from = caller.find { |l| l =~ /^#{flow_file}:.*/ }
|
259
261
|
if called_from
|
262
|
+
# Splitting on ':' when file names are included will yield a different index for everything in Windows
|
263
|
+
called_from.gsub!(flow_file, '')
|
260
264
|
called_from = called_from.split(':')
|
261
|
-
options[:source_file] = called_from[0]
|
265
|
+
options[:source_file] = flow_file # called_from[0]
|
262
266
|
options[:source_line_number] = called_from[1].to_i
|
263
267
|
end
|
264
268
|
end
|
@@ -462,6 +462,41 @@ module OrigenTesters
|
|
462
462
|
alias_method :on_whenever_any, :on_whenever
|
463
463
|
alias_method :on_whenever_all, :on_whenever
|
464
464
|
|
465
|
+
def on_loop(node, options = {})
|
466
|
+
# TODO: don't have the SMT8 way to do this yet
|
467
|
+
if smt8?
|
468
|
+
fail 'Flow loop control not yet supported for SMT8!'
|
469
|
+
end
|
470
|
+
start = node.to_a[0]
|
471
|
+
stop = node.to_a[1]
|
472
|
+
step = node.to_a[2]
|
473
|
+
if node.to_a[3].nil?
|
474
|
+
fail 'You must supply a loop variable name!'
|
475
|
+
else
|
476
|
+
var = generate_flag_name(node.to_a[3])
|
477
|
+
end
|
478
|
+
test_num_inc = node.to_a[4]
|
479
|
+
unless smt8?
|
480
|
+
var = "@#{var}"
|
481
|
+
end
|
482
|
+
num = (stop - start) / step + 1
|
483
|
+
# Handle increment/decrement
|
484
|
+
if step < 0
|
485
|
+
compare = '>'
|
486
|
+
incdec = "- #{step * -1}"
|
487
|
+
else
|
488
|
+
compare = '<'
|
489
|
+
incdec = "+ #{step}"
|
490
|
+
end
|
491
|
+
line "for #{var} = #{start}; #{var} #{compare} #{stop + step} ; #{var} = #{var} #{incdec}; do"
|
492
|
+
line "test_number_loop_increment = #{test_num_inc}"
|
493
|
+
line '{'
|
494
|
+
@indent += 1
|
495
|
+
process_all(node.children)
|
496
|
+
@indent -= 1
|
497
|
+
line '}'
|
498
|
+
end
|
499
|
+
|
465
500
|
def generate_expr_string(node, options = {})
|
466
501
|
return node unless node.respond_to?(:type)
|
467
502
|
case node.type
|
data/program/flow_control.rb
CHANGED
@@ -254,7 +254,6 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
254
254
|
enable :nvm_minimum_ft, if_enable: "nvm_minimum_room", if_job: :fr
|
255
255
|
enable :nvm_minimum_ft, if_enable: "nvm_minimum_cold", if_job: :fc
|
256
256
|
disable :nvm_minimum_ft, if_enable: "nvm_minimum_hot", if_job: :fh
|
257
|
-
|
258
257
|
log "Test enable words that wrap a lot of tests"
|
259
258
|
if_enable :word1 do
|
260
259
|
5.times do |i|
|
@@ -340,6 +339,39 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
340
339
|
func :test36, on_fail: { render: 'multi_bin;' }, if_flag: :my_flag, number: 51570
|
341
340
|
end
|
342
341
|
|
342
|
+
if tester.v93k? && !tester.smt8?
|
343
|
+
log "Tests of flow loop"
|
344
|
+
loop from: 0, to: 5, step: 1, var: '$LOOP_VARIABLE' do
|
345
|
+
func :test_myloop, number: 56000
|
346
|
+
end
|
347
|
+
|
348
|
+
log "Tests of flow loop, no step"
|
349
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE' do
|
350
|
+
func :test_myloop2, number: 5610
|
351
|
+
end
|
352
|
+
|
353
|
+
log "Tests of flow loop, non-default test number increment"
|
354
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE', test_num_inc: 2 do
|
355
|
+
func :test_myloop3, number: 56200
|
356
|
+
end
|
357
|
+
|
358
|
+
log "Tests of decrementing loop"
|
359
|
+
loop from: 5, to: 2, step: -1, var: '$LOOP_VARIABLE' do
|
360
|
+
func :test_myloop4, number: 56300
|
361
|
+
end
|
362
|
+
|
363
|
+
log "Tests of nested flow loop, depth 3"
|
364
|
+
loop from: 0, to: 9, step: 2, var: '$LOOP_VARIABLE1'do
|
365
|
+
loop from: 1, to: 10, step: 1, var: '$LOOP_VARIABLE2' do
|
366
|
+
loop from: 1, to: 5, step: 1, var: '$LOOP_VARIABLE3' do
|
367
|
+
func :test_myloop5, number: 56400
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
# Test of skipping variable name not yet ready
|
373
|
+
end
|
374
|
+
|
343
375
|
log 'An optimization test case, this should not generate a flag on V93K'
|
344
376
|
func :test1, id: :t1a, number: 51580
|
345
377
|
|
@@ -339,4 +339,37 @@ end
|
|
339
339
|
~~~
|
340
340
|
|
341
341
|
|
342
|
+
#### Flow Loops for V93k (SMT7 only)
|
343
|
+
Use flow loop control to permit re-running tests without using additional sequence labels.
|
344
|
+
|
345
|
+
~~~ruby
|
346
|
+
loop from: 0, to: 5, step: 1, var: '$LOOP_VARIABLE' do
|
347
|
+
func :test_myloop, number: 56000
|
348
|
+
end
|
349
|
+
~~~
|
350
|
+
|
351
|
+
Indicating step value is optional, default is 1.
|
352
|
+
|
353
|
+
These loops can also be nested:
|
354
|
+
~~~ruby
|
355
|
+
loop from: 0, to: 9, step: 2, var: '$LOOP_VARIABLE1'do
|
356
|
+
loop from: 1, to: 10, step: 1, var: '$LOOP_VARIABLE2' do
|
357
|
+
loop from: 1, to: 5, step: 1, var: '$LOOP_VARIABLE3' do
|
358
|
+
func :test_myloop5, number: 56400
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
~~~
|
363
|
+
|
364
|
+
You can also indicate a test number increment if desired (default is 1):
|
365
|
+
~~~ruby
|
366
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE', test_num_inc: 2 do
|
367
|
+
func :test_myloop3, number: 56200
|
368
|
+
end
|
369
|
+
~~~
|
370
|
+
|
371
|
+
Decrementing loops, having `from:` value > `to:` value and using negative `step:`, is also supported.
|
372
|
+
|
373
|
+
|
374
|
+
|
342
375
|
% end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_testers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.49.
|
4
|
+
version: 0.49.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|