origen_testers 0.13.1 → 0.13.2
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/application.rb +151 -151
- data/config/boot.rb +13 -13
- data/config/commands.rb +85 -86
- data/config/users.rb +18 -18
- data/config/version.rb +8 -8
- data/lib/commands/build.rb +69 -69
- data/lib/commands/run.rb +48 -48
- data/lib/origen_testers.rb +47 -47
- data/lib/origen_testers/api.rb +381 -381
- data/lib/origen_testers/basic_test_setups.rb +105 -105
- data/lib/origen_testers/callback_handlers.rb +59 -59
- data/lib/origen_testers/command_based_tester.rb +45 -45
- data/lib/origen_testers/flow.rb +382 -382
- data/lib/origen_testers/generator.rb +283 -283
- data/lib/origen_testers/generator/identity_map.rb +23 -23
- data/lib/origen_testers/generator/placeholder.rb +11 -11
- data/lib/origen_testers/generator/test_numberer.rb +23 -23
- data/lib/origen_testers/igxl_based_tester.rb +12 -12
- data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
- data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
- data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
- data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
- data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
- data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
- data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
- data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
- data/lib/origen_testers/interface.rb +345 -324
- data/lib/origen_testers/memory_style.rb +77 -77
- data/lib/origen_testers/no_interface.rb +7 -7
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
- data/lib/origen_testers/origen_ext/generator.rb +54 -54
- data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
- data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
- data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
- data/lib/origen_testers/parser.rb +22 -22
- data/lib/origen_testers/parser/description_lookup.rb +62 -62
- data/lib/origen_testers/parser/searchable_array.rb +30 -30
- data/lib/origen_testers/parser/searchable_hash.rb +30 -30
- data/lib/origen_testers/pattern_compilers.rb +116 -116
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
- data/lib/origen_testers/pattern_compilers/job.rb +96 -96
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
- data/lib/origen_testers/program_generators.rb +62 -62
- data/lib/origen_testers/smartest_based_tester.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
- data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
- data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
- data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
- data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
- data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
- data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
- data/lib/origen_testers/test/basic_interface.rb +17 -17
- data/lib/origen_testers/test/block.rb +21 -21
- data/lib/origen_testers/test/custom_test_interface.rb +111 -111
- data/lib/origen_testers/test/dut.rb +295 -295
- data/lib/origen_testers/test/dut2.rb +76 -76
- data/lib/origen_testers/test/dut3.rb +244 -244
- data/lib/origen_testers/test/interface.rb +503 -503
- data/lib/origen_testers/test/nvm.rb +94 -94
- data/lib/origen_testers/timing.rb +368 -368
- data/lib/origen_testers/vector.rb +207 -207
- data/lib/origen_testers/vector_based_tester.rb +41 -41
- data/lib/origen_testers/vector_generator.rb +655 -655
- data/lib/origen_testers/vector_pipeline.rb +302 -302
- data/pattern/bitmap.rb +7 -7
- data/pattern/dc_instr.rb +7 -7
- data/pattern/delay.rb +7 -7
- data/pattern/freq_counter.rb +6 -6
- data/pattern/mem_test.rb +8 -8
- data/pattern/multi_vector.rb +122 -122
- data/pattern/multi_vector_plus1.rb +125 -125
- data/pattern/nvm/j750/add_late_pins.rb +3 -3
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/j750_halt.rb +159 -159
- data/pattern/nvm/j750/j750_workout.rb +209 -209
- data/pattern/nvm/j750/timing.rb +73 -73
- data/pattern/read_write_reg.rb +61 -61
- data/pattern/reset.rb +4 -4
- data/pattern/subroutines.rb +69 -69
- data/pattern/tester_overlay.rb +61 -52
- data/pattern/tester_store.rb +28 -28
- data/program/_additional_erase.rb +7 -7
- data/program/_efa_resources.rb +7 -7
- data/program/_erase.rb +25 -25
- data/program/_erase_vfy.rb +5 -5
- data/program/_iv_resources.rb +10 -10
- data/program/basic_interface.rb +5 -5
- data/program/components/_prb1_main.rb +222 -222
- data/program/components/_temp.rb +6 -6
- data/program/custom_tests.rb +10 -10
- data/program/flow_control.rb +422 -422
- data/program/prb1.rb +11 -11
- data/program/prb1_resources.rb +28 -28
- data/program/prb2.rb +27 -27
- data/program/test.rb +29 -29
- data/program/uflex_resources.rb +199 -199
- data/templates/example.txt.erb +53 -53
- data/templates/j750/program_sheet.txt.erb +9 -9
- data/templates/manifest/v93k.yaml.erb +22 -22
- data/templates/web/index.md.erb +51 -51
- data/templates/web/layouts/_basic.html.erb +15 -15
- data/templates/web/partials/_navbar.html.erb +22 -22
- data/templates/web/release_notes.md.erb +5 -5
- metadata +2 -2
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class TestInstanceGroup
|
|
5
|
-
attr_accessor :name, :version, :append_version
|
|
6
|
-
|
|
7
|
-
include Enumerable
|
|
8
|
-
|
|
9
|
-
def initialize(name, options = {})
|
|
10
|
-
@name = name
|
|
11
|
-
@store = []
|
|
12
|
-
@append_version = true
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def name
|
|
16
|
-
if unversioned_name
|
|
17
|
-
if version && @append_version
|
|
18
|
-
"#{unversioned_name}_v#{version}"
|
|
19
|
-
else
|
|
20
|
-
unversioned_name.to_s
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def unversioned_name
|
|
26
|
-
if @name
|
|
27
|
-
if @name =~ /grp$/
|
|
28
|
-
@name
|
|
29
|
-
else
|
|
30
|
-
"#{@name}_grp"
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def <<(instance)
|
|
36
|
-
@store << instance
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def size
|
|
40
|
-
@store.size
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def each
|
|
44
|
-
@store.each { |ins| yield ins }
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def ==(other_instance_group)
|
|
48
|
-
self.class == other_instance_group.class &&
|
|
49
|
-
unversioned_name.to_s == other_instance_group.unversioned_name.to_s &&
|
|
50
|
-
size == other_instance_group.size &&
|
|
51
|
-
self.all? do |ins|
|
|
52
|
-
other_instance_group.any? { |other_ins| ins == other_ins }
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def finalize
|
|
57
|
-
lambda do |group|
|
|
58
|
-
each do |ti|
|
|
59
|
-
ti.finalize.call(ti) if ti.finalize
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class TestInstanceGroup
|
|
5
|
+
attr_accessor :name, :version, :append_version
|
|
6
|
+
|
|
7
|
+
include Enumerable
|
|
8
|
+
|
|
9
|
+
def initialize(name, options = {})
|
|
10
|
+
@name = name
|
|
11
|
+
@store = []
|
|
12
|
+
@append_version = true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def name
|
|
16
|
+
if unversioned_name
|
|
17
|
+
if version && @append_version
|
|
18
|
+
"#{unversioned_name}_v#{version}"
|
|
19
|
+
else
|
|
20
|
+
unversioned_name.to_s
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def unversioned_name
|
|
26
|
+
if @name
|
|
27
|
+
if @name =~ /grp$/
|
|
28
|
+
@name
|
|
29
|
+
else
|
|
30
|
+
"#{@name}_grp"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def <<(instance)
|
|
36
|
+
@store << instance
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def size
|
|
40
|
+
@store.size
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def each
|
|
44
|
+
@store.each { |ins| yield ins }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ==(other_instance_group)
|
|
48
|
+
self.class == other_instance_group.class &&
|
|
49
|
+
unversioned_name.to_s == other_instance_group.unversioned_name.to_s &&
|
|
50
|
+
size == other_instance_group.size &&
|
|
51
|
+
self.all? do |ins|
|
|
52
|
+
other_instance_group.any? { |other_ins| ins == other_ins }
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def finalize
|
|
57
|
+
lambda do |group|
|
|
58
|
+
each do |ti|
|
|
59
|
+
ti.finalize.call(ti) if ti.finalize
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class TestInstances
|
|
5
|
-
include OrigenTesters::Generator
|
|
6
|
-
|
|
7
|
-
autoload :CustomTil, 'origen_testers/igxl_based_tester/base/test_instances/custom_til'
|
|
8
|
-
|
|
9
|
-
OUTPUT_POSTFIX = 'instances'
|
|
10
|
-
|
|
11
|
-
class IndexedString < ::String
|
|
12
|
-
attr_accessor :index
|
|
13
|
-
|
|
14
|
-
def name
|
|
15
|
-
self
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def add(name, type, options = {})
|
|
20
|
-
options = {
|
|
21
|
-
test_instance_class: platform::TestInstance
|
|
22
|
-
}.merge(options)
|
|
23
|
-
klass =
|
|
24
|
-
if type.is_a?(Symbol) || type.is_a?(String)
|
|
25
|
-
ins = options.delete(:test_instance_class).new(name, type, options)
|
|
26
|
-
else
|
|
27
|
-
ins = type
|
|
28
|
-
end
|
|
29
|
-
if @current_group
|
|
30
|
-
@current_group << ins
|
|
31
|
-
else
|
|
32
|
-
collection << ins
|
|
33
|
-
end
|
|
34
|
-
c = Origen.interface.consume_comments
|
|
35
|
-
Origen.interface.descriptions.add_for_test_definition(name, c)
|
|
36
|
-
ins
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# IG-XL doesn't have a formal instance group type and instead declares them anonymously
|
|
40
|
-
# whenever test instances of the same name appear consecutively in the test instance sheet.
|
|
41
|
-
# However when it comes to generating a test program life becomes much easier if we have
|
|
42
|
-
# a way to explicitly declare instances as part of a group - this makes duplicate tracking
|
|
43
|
-
# and sorting of the test instance sheet much easier.
|
|
44
|
-
#
|
|
45
|
-
# Use this method to generate instance groups via a block. Within the block you should
|
|
46
|
-
# generate instances as normal and they will automatically be assigned to the current group.
|
|
47
|
-
# Note that the name of the instances generated within the group is discarded and replaced
|
|
48
|
-
# with the name of the group. Origen automatically appends "grp" to this name to highlight
|
|
49
|
-
# instances that were generated as part of the group.
|
|
50
|
-
#
|
|
51
|
-
# test_instances.group("erase_all_blocks") do |group|
|
|
52
|
-
# # Generate instances here as normal
|
|
53
|
-
# test_instances.functional("erase_blk0")
|
|
54
|
-
# test_instances.functional("erase_blk1")
|
|
55
|
-
# end
|
|
56
|
-
#
|
|
57
|
-
# The group object is passed into the block but usually you should not need to interact
|
|
58
|
-
# with this directly except maybe to set the name if it is not yet established at the point
|
|
59
|
-
# where the group is initiated:
|
|
60
|
-
#
|
|
61
|
-
# test_instances.group do |group|
|
|
62
|
-
# # Generate instances here as normal
|
|
63
|
-
# group.name = "group_blah"
|
|
64
|
-
# end
|
|
65
|
-
#
|
|
66
|
-
# A common way to generate groups is to create a helper method in your application which
|
|
67
|
-
# is responsible for creating groups as required:
|
|
68
|
-
#
|
|
69
|
-
# def group_wrapper(name, options)
|
|
70
|
-
# if options[:by_block]
|
|
71
|
-
# test_instances.group(name) do |group|
|
|
72
|
-
# yield group
|
|
73
|
-
# end
|
|
74
|
-
# else
|
|
75
|
-
# yield
|
|
76
|
-
# end
|
|
77
|
-
# end
|
|
78
|
-
#
|
|
79
|
-
# In that case the group argument becomes quite useful for branching based on whether you
|
|
80
|
-
# are generating a group or standalone instances:
|
|
81
|
-
#
|
|
82
|
-
# group_wrapper(name, options) do |group|
|
|
83
|
-
# if group
|
|
84
|
-
# # Generate group instances
|
|
85
|
-
# else
|
|
86
|
-
# # Generate standalone instances
|
|
87
|
-
# end
|
|
88
|
-
# end
|
|
89
|
-
def group(name = nil, options = {})
|
|
90
|
-
name, options = nil, name if name.is_a?(Hash)
|
|
91
|
-
@current_group = platform::TestInstanceGroup.new(name, options)
|
|
92
|
-
collection << @current_group
|
|
93
|
-
yield @current_group
|
|
94
|
-
@current_group = nil
|
|
95
|
-
end
|
|
96
|
-
alias_method :add_group, :group
|
|
97
|
-
|
|
98
|
-
def finalize(options = {}) # :nodoc:
|
|
99
|
-
uniq!
|
|
100
|
-
sort_and_finalize!
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def uniq! # :nodoc:
|
|
104
|
-
uniques = []
|
|
105
|
-
versions = {}
|
|
106
|
-
multi_version_tests = {}
|
|
107
|
-
collection.each do |instance|
|
|
108
|
-
# If a uniquely named instance is found add it, otherwise update the version
|
|
109
|
-
# of the current instance to match that of the existing instance that it duplicates
|
|
110
|
-
unless uniques.any? do |i|
|
|
111
|
-
if i == instance
|
|
112
|
-
instance.version = i.version
|
|
113
|
-
true
|
|
114
|
-
else
|
|
115
|
-
false
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
if instance.respond_to?(:version=)
|
|
119
|
-
versions[instance.unversioned_name] ||= 0
|
|
120
|
-
versions[instance.unversioned_name] += 1
|
|
121
|
-
if versions[instance.unversioned_name] > 1
|
|
122
|
-
multi_version_tests[instance.unversioned_name] = true
|
|
123
|
-
end
|
|
124
|
-
instance.version = versions[instance.unversioned_name]
|
|
125
|
-
end
|
|
126
|
-
uniques << instance
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
# This final loop disables the version identifier for tests that have only a single version,
|
|
130
|
-
# this makes it clearer when multiple versions exist - whenever you see a v1 you know there
|
|
131
|
-
# is at least a v2 also.
|
|
132
|
-
collection.map! do |instance|
|
|
133
|
-
if instance.respond_to?(:version=)
|
|
134
|
-
unless multi_version_tests[instance.unversioned_name]
|
|
135
|
-
instance.append_version = false
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
instance
|
|
139
|
-
end
|
|
140
|
-
self.collection = uniques
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def sort_and_finalize! # :nodoc:
|
|
144
|
-
# Present the instances in the final sheet in alphabetical order
|
|
145
|
-
collection.map!.with_index do |ins, i|
|
|
146
|
-
if ins.is_a?(String) # Can happen if content has been rendered in from a template
|
|
147
|
-
ins = IndexedString.new(ins)
|
|
148
|
-
else
|
|
149
|
-
ins.finalize.call(ins) if ins.finalize
|
|
150
|
-
end
|
|
151
|
-
ins
|
|
152
|
-
end
|
|
153
|
-
collection.sort! { |a, b| [a.name.to_s] <=> [b.name.to_s] }
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
def bpmu(name, options = {})
|
|
157
|
-
add(name, :board_pmu, options)
|
|
158
|
-
end
|
|
159
|
-
alias_method :board_pmu, :bpmu
|
|
160
|
-
|
|
161
|
-
def powersupply(name, options = {})
|
|
162
|
-
add(name, :powersupply, options)
|
|
163
|
-
end
|
|
164
|
-
alias_method :power_supply, :powersupply
|
|
165
|
-
|
|
166
|
-
def ppmu(name, options = {})
|
|
167
|
-
add(name, :pin_pmu, options)
|
|
168
|
-
end
|
|
169
|
-
alias_method :pin_pmu, :ppmu
|
|
170
|
-
|
|
171
|
-
def functional(name, options = {})
|
|
172
|
-
add(name, :functional, options)
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def empty(name, options = {})
|
|
176
|
-
add(name, :empty, options)
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
def other(name, options = {})
|
|
180
|
-
add(name, :other, options)
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
def apmu_powersupply(name, options = {})
|
|
184
|
-
add(name, :apmu_powersupply, options)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def mto_memory(name, options = {})
|
|
188
|
-
add(name, :mto_memory, options)
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
# Creates an accessor for custom test method libraries the first time they are called
|
|
192
|
-
def method_missing(method, *args, &block)
|
|
193
|
-
custom_tils = Origen.interface.send(:custom_tils)
|
|
194
|
-
if custom_tils[method]
|
|
195
|
-
ti = CustomTil.new(self, custom_tils[method])
|
|
196
|
-
instance_variable_set "@#{method}", ti
|
|
197
|
-
define_singleton_method method do
|
|
198
|
-
instance_variable_get("@#{method}")
|
|
199
|
-
end
|
|
200
|
-
send(method)
|
|
201
|
-
else
|
|
202
|
-
super
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
def respond_to?(method)
|
|
207
|
-
!!Origen.interface.send(:custom_tils)[method] || super
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
end
|
|
212
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class TestInstances
|
|
5
|
+
include OrigenTesters::Generator
|
|
6
|
+
|
|
7
|
+
autoload :CustomTil, 'origen_testers/igxl_based_tester/base/test_instances/custom_til'
|
|
8
|
+
|
|
9
|
+
OUTPUT_POSTFIX = 'instances'
|
|
10
|
+
|
|
11
|
+
class IndexedString < ::String
|
|
12
|
+
attr_accessor :index
|
|
13
|
+
|
|
14
|
+
def name
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def add(name, type, options = {})
|
|
20
|
+
options = {
|
|
21
|
+
test_instance_class: platform::TestInstance
|
|
22
|
+
}.merge(options)
|
|
23
|
+
klass =
|
|
24
|
+
if type.is_a?(Symbol) || type.is_a?(String)
|
|
25
|
+
ins = options.delete(:test_instance_class).new(name, type, options)
|
|
26
|
+
else
|
|
27
|
+
ins = type
|
|
28
|
+
end
|
|
29
|
+
if @current_group
|
|
30
|
+
@current_group << ins
|
|
31
|
+
else
|
|
32
|
+
collection << ins
|
|
33
|
+
end
|
|
34
|
+
c = Origen.interface.consume_comments
|
|
35
|
+
Origen.interface.descriptions.add_for_test_definition(name, c)
|
|
36
|
+
ins
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# IG-XL doesn't have a formal instance group type and instead declares them anonymously
|
|
40
|
+
# whenever test instances of the same name appear consecutively in the test instance sheet.
|
|
41
|
+
# However when it comes to generating a test program life becomes much easier if we have
|
|
42
|
+
# a way to explicitly declare instances as part of a group - this makes duplicate tracking
|
|
43
|
+
# and sorting of the test instance sheet much easier.
|
|
44
|
+
#
|
|
45
|
+
# Use this method to generate instance groups via a block. Within the block you should
|
|
46
|
+
# generate instances as normal and they will automatically be assigned to the current group.
|
|
47
|
+
# Note that the name of the instances generated within the group is discarded and replaced
|
|
48
|
+
# with the name of the group. Origen automatically appends "grp" to this name to highlight
|
|
49
|
+
# instances that were generated as part of the group.
|
|
50
|
+
#
|
|
51
|
+
# test_instances.group("erase_all_blocks") do |group|
|
|
52
|
+
# # Generate instances here as normal
|
|
53
|
+
# test_instances.functional("erase_blk0")
|
|
54
|
+
# test_instances.functional("erase_blk1")
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
# The group object is passed into the block but usually you should not need to interact
|
|
58
|
+
# with this directly except maybe to set the name if it is not yet established at the point
|
|
59
|
+
# where the group is initiated:
|
|
60
|
+
#
|
|
61
|
+
# test_instances.group do |group|
|
|
62
|
+
# # Generate instances here as normal
|
|
63
|
+
# group.name = "group_blah"
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# A common way to generate groups is to create a helper method in your application which
|
|
67
|
+
# is responsible for creating groups as required:
|
|
68
|
+
#
|
|
69
|
+
# def group_wrapper(name, options)
|
|
70
|
+
# if options[:by_block]
|
|
71
|
+
# test_instances.group(name) do |group|
|
|
72
|
+
# yield group
|
|
73
|
+
# end
|
|
74
|
+
# else
|
|
75
|
+
# yield
|
|
76
|
+
# end
|
|
77
|
+
# end
|
|
78
|
+
#
|
|
79
|
+
# In that case the group argument becomes quite useful for branching based on whether you
|
|
80
|
+
# are generating a group or standalone instances:
|
|
81
|
+
#
|
|
82
|
+
# group_wrapper(name, options) do |group|
|
|
83
|
+
# if group
|
|
84
|
+
# # Generate group instances
|
|
85
|
+
# else
|
|
86
|
+
# # Generate standalone instances
|
|
87
|
+
# end
|
|
88
|
+
# end
|
|
89
|
+
def group(name = nil, options = {})
|
|
90
|
+
name, options = nil, name if name.is_a?(Hash)
|
|
91
|
+
@current_group = platform::TestInstanceGroup.new(name, options)
|
|
92
|
+
collection << @current_group
|
|
93
|
+
yield @current_group
|
|
94
|
+
@current_group = nil
|
|
95
|
+
end
|
|
96
|
+
alias_method :add_group, :group
|
|
97
|
+
|
|
98
|
+
def finalize(options = {}) # :nodoc:
|
|
99
|
+
uniq!
|
|
100
|
+
sort_and_finalize!
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def uniq! # :nodoc:
|
|
104
|
+
uniques = []
|
|
105
|
+
versions = {}
|
|
106
|
+
multi_version_tests = {}
|
|
107
|
+
collection.each do |instance|
|
|
108
|
+
# If a uniquely named instance is found add it, otherwise update the version
|
|
109
|
+
# of the current instance to match that of the existing instance that it duplicates
|
|
110
|
+
unless uniques.any? do |i|
|
|
111
|
+
if i == instance
|
|
112
|
+
instance.version = i.version
|
|
113
|
+
true
|
|
114
|
+
else
|
|
115
|
+
false
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
if instance.respond_to?(:version=)
|
|
119
|
+
versions[instance.unversioned_name] ||= 0
|
|
120
|
+
versions[instance.unversioned_name] += 1
|
|
121
|
+
if versions[instance.unversioned_name] > 1
|
|
122
|
+
multi_version_tests[instance.unversioned_name] = true
|
|
123
|
+
end
|
|
124
|
+
instance.version = versions[instance.unversioned_name]
|
|
125
|
+
end
|
|
126
|
+
uniques << instance
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
# This final loop disables the version identifier for tests that have only a single version,
|
|
130
|
+
# this makes it clearer when multiple versions exist - whenever you see a v1 you know there
|
|
131
|
+
# is at least a v2 also.
|
|
132
|
+
collection.map! do |instance|
|
|
133
|
+
if instance.respond_to?(:version=)
|
|
134
|
+
unless multi_version_tests[instance.unversioned_name]
|
|
135
|
+
instance.append_version = false
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
instance
|
|
139
|
+
end
|
|
140
|
+
self.collection = uniques
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def sort_and_finalize! # :nodoc:
|
|
144
|
+
# Present the instances in the final sheet in alphabetical order
|
|
145
|
+
collection.map!.with_index do |ins, i|
|
|
146
|
+
if ins.is_a?(String) # Can happen if content has been rendered in from a template
|
|
147
|
+
ins = IndexedString.new(ins)
|
|
148
|
+
else
|
|
149
|
+
ins.finalize.call(ins) if ins.finalize
|
|
150
|
+
end
|
|
151
|
+
ins
|
|
152
|
+
end
|
|
153
|
+
collection.sort! { |a, b| [a.name.to_s] <=> [b.name.to_s] }
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def bpmu(name, options = {})
|
|
157
|
+
add(name, :board_pmu, options)
|
|
158
|
+
end
|
|
159
|
+
alias_method :board_pmu, :bpmu
|
|
160
|
+
|
|
161
|
+
def powersupply(name, options = {})
|
|
162
|
+
add(name, :powersupply, options)
|
|
163
|
+
end
|
|
164
|
+
alias_method :power_supply, :powersupply
|
|
165
|
+
|
|
166
|
+
def ppmu(name, options = {})
|
|
167
|
+
add(name, :pin_pmu, options)
|
|
168
|
+
end
|
|
169
|
+
alias_method :pin_pmu, :ppmu
|
|
170
|
+
|
|
171
|
+
def functional(name, options = {})
|
|
172
|
+
add(name, :functional, options)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def empty(name, options = {})
|
|
176
|
+
add(name, :empty, options)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def other(name, options = {})
|
|
180
|
+
add(name, :other, options)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def apmu_powersupply(name, options = {})
|
|
184
|
+
add(name, :apmu_powersupply, options)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def mto_memory(name, options = {})
|
|
188
|
+
add(name, :mto_memory, options)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Creates an accessor for custom test method libraries the first time they are called
|
|
192
|
+
def method_missing(method, *args, &block)
|
|
193
|
+
custom_tils = Origen.interface.send(:custom_tils)
|
|
194
|
+
if custom_tils[method]
|
|
195
|
+
ti = CustomTil.new(self, custom_tils[method])
|
|
196
|
+
instance_variable_set "@#{method}", ti
|
|
197
|
+
define_singleton_method method do
|
|
198
|
+
instance_variable_get("@#{method}")
|
|
199
|
+
end
|
|
200
|
+
send(method)
|
|
201
|
+
else
|
|
202
|
+
super
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def respond_to?(method)
|
|
207
|
+
!!Origen.interface.send(:custom_tils)[method] || super
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|