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,79 +1,79 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class ACSpecsets
|
|
5
|
-
include ::OrigenTesters::Generator
|
|
6
|
-
|
|
7
|
-
attr_accessor :ac_specs
|
|
8
|
-
attr_accessor :ac_specsets
|
|
9
|
-
|
|
10
|
-
OUTPUT_PREFIX = 'SpecsAC'
|
|
11
|
-
# OUTPUT_POSTFIX = 'SpecsAC'
|
|
12
|
-
|
|
13
|
-
def initialize # :nodoc:
|
|
14
|
-
## Hash Autovivification
|
|
15
|
-
l = ->(h, k) { h[k] = Hash.new(&l) }
|
|
16
|
-
|
|
17
|
-
@ac_specs = []
|
|
18
|
-
@ac_specsets = Hash.new(&l)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Assigns an AC spec value object to the given variable for this specset
|
|
22
|
-
# The attrs hash is expected to defined as follows:
|
|
23
|
-
# attrs = {
|
|
24
|
-
# specset: :specset_name, # if not defined, specset = :default
|
|
25
|
-
# # Spec selectors that contain both the scope and value of the spec
|
|
26
|
-
# nom: { typ: 1.8 }, # typ is an example of the UFlex scope, nom is the spec selector
|
|
27
|
-
# min: { min: 1.7 }, # Users can defined any number of selectors in this fashion
|
|
28
|
-
# max: { max: 1.9 }
|
|
29
|
-
# }
|
|
30
|
-
def add(spec, attrs = {})
|
|
31
|
-
attrs = {
|
|
32
|
-
specset: :default
|
|
33
|
-
}.merge(attrs)
|
|
34
|
-
|
|
35
|
-
specset = attrs.delete(:specset)
|
|
36
|
-
|
|
37
|
-
@ac_specs << spec unless @ac_specs.include?(spec)
|
|
38
|
-
|
|
39
|
-
attrs.each do |selector, value|
|
|
40
|
-
@ac_specsets[specset][spec][selector] = value
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Prepare the spec information for file output
|
|
45
|
-
def format_uflex_ac_spec(data, options = {})
|
|
46
|
-
case data
|
|
47
|
-
when NilClass
|
|
48
|
-
data_new = 0
|
|
49
|
-
when Fixnum, Float
|
|
50
|
-
case
|
|
51
|
-
when data == 0
|
|
52
|
-
data_new = data.to_s
|
|
53
|
-
when data.abs < 1e-9
|
|
54
|
-
data_new = (data * 1_000_000_000_000).round(4).to_s + '*ps'
|
|
55
|
-
when data.abs < 1e-6
|
|
56
|
-
data_new = (data * 1_000_000_000).round(4).to_s + '*ns'
|
|
57
|
-
when data.abs < 1e-3
|
|
58
|
-
data_new = (data * 1_000_000).round(4).to_s + '*us'
|
|
59
|
-
when data.abs < 1
|
|
60
|
-
data_new = (data * 1_000).round(4).to_s + '*ms'
|
|
61
|
-
else
|
|
62
|
-
data_new = data.to_s
|
|
63
|
-
end
|
|
64
|
-
data_new = data_new.gsub(/^/, '=')
|
|
65
|
-
when String
|
|
66
|
-
data_new = data.gsub(/^/, '=').gsub(/(\W)([a-zA-Z])/, '\1_\2')
|
|
67
|
-
# Remove underscores from unit designations
|
|
68
|
-
data_new.gsub!(/(\W)_(nS|uS|mS|S)(\W)/i, '\1\2\3')
|
|
69
|
-
data_new.gsub!(/(\W)_(nS|uS|mS|S)$/i, '\1\2')
|
|
70
|
-
else
|
|
71
|
-
Origen.log.error "Unknown class type (#{data.class}) for spec value: #{data}"
|
|
72
|
-
fail
|
|
73
|
-
end
|
|
74
|
-
data_new
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class ACSpecsets
|
|
5
|
+
include ::OrigenTesters::Generator
|
|
6
|
+
|
|
7
|
+
attr_accessor :ac_specs
|
|
8
|
+
attr_accessor :ac_specsets
|
|
9
|
+
|
|
10
|
+
OUTPUT_PREFIX = 'SpecsAC'
|
|
11
|
+
# OUTPUT_POSTFIX = 'SpecsAC'
|
|
12
|
+
|
|
13
|
+
def initialize # :nodoc:
|
|
14
|
+
## Hash Autovivification
|
|
15
|
+
l = ->(h, k) { h[k] = Hash.new(&l) }
|
|
16
|
+
|
|
17
|
+
@ac_specs = []
|
|
18
|
+
@ac_specsets = Hash.new(&l)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Assigns an AC spec value object to the given variable for this specset
|
|
22
|
+
# The attrs hash is expected to defined as follows:
|
|
23
|
+
# attrs = {
|
|
24
|
+
# specset: :specset_name, # if not defined, specset = :default
|
|
25
|
+
# # Spec selectors that contain both the scope and value of the spec
|
|
26
|
+
# nom: { typ: 1.8 }, # typ is an example of the UFlex scope, nom is the spec selector
|
|
27
|
+
# min: { min: 1.7 }, # Users can defined any number of selectors in this fashion
|
|
28
|
+
# max: { max: 1.9 }
|
|
29
|
+
# }
|
|
30
|
+
def add(spec, attrs = {})
|
|
31
|
+
attrs = {
|
|
32
|
+
specset: :default
|
|
33
|
+
}.merge(attrs)
|
|
34
|
+
|
|
35
|
+
specset = attrs.delete(:specset)
|
|
36
|
+
|
|
37
|
+
@ac_specs << spec unless @ac_specs.include?(spec)
|
|
38
|
+
|
|
39
|
+
attrs.each do |selector, value|
|
|
40
|
+
@ac_specsets[specset][spec][selector] = value
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Prepare the spec information for file output
|
|
45
|
+
def format_uflex_ac_spec(data, options = {})
|
|
46
|
+
case data
|
|
47
|
+
when NilClass
|
|
48
|
+
data_new = 0
|
|
49
|
+
when Fixnum, Float
|
|
50
|
+
case
|
|
51
|
+
when data == 0
|
|
52
|
+
data_new = data.to_s
|
|
53
|
+
when data.abs < 1e-9
|
|
54
|
+
data_new = (data * 1_000_000_000_000).round(4).to_s + '*ps'
|
|
55
|
+
when data.abs < 1e-6
|
|
56
|
+
data_new = (data * 1_000_000_000).round(4).to_s + '*ns'
|
|
57
|
+
when data.abs < 1e-3
|
|
58
|
+
data_new = (data * 1_000_000).round(4).to_s + '*us'
|
|
59
|
+
when data.abs < 1
|
|
60
|
+
data_new = (data * 1_000).round(4).to_s + '*ms'
|
|
61
|
+
else
|
|
62
|
+
data_new = data.to_s
|
|
63
|
+
end
|
|
64
|
+
data_new = data_new.gsub(/^/, '=')
|
|
65
|
+
when String
|
|
66
|
+
data_new = data.gsub(/^/, '=').gsub(/(\W)([a-zA-Z])/, '\1_\2')
|
|
67
|
+
# Remove underscores from unit designations
|
|
68
|
+
data_new.gsub!(/(\W)_(nS|uS|mS|S)(\W)/i, '\1\2\3')
|
|
69
|
+
data_new.gsub!(/(\W)_(nS|uS|mS|S)$/i, '\1\2')
|
|
70
|
+
else
|
|
71
|
+
Origen.log.error "Unknown class type (#{data.class}) for spec value: #{data}"
|
|
72
|
+
fail
|
|
73
|
+
end
|
|
74
|
+
data_new
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -1,169 +1,169 @@
|
|
|
1
|
-
module OrigenTesters
|
|
2
|
-
module IGXLBasedTester
|
|
3
|
-
class Base
|
|
4
|
-
class CustomTestInstance
|
|
5
|
-
attr_accessor :type, :index, :version, :append_version, :finalize
|
|
6
|
-
|
|
7
|
-
# Returns the object representing the test instance library that the
|
|
8
|
-
# given test instance is defined in
|
|
9
|
-
attr_reader :library
|
|
10
|
-
|
|
11
|
-
def self.define
|
|
12
|
-
# Generate accessors for all attributes and their aliases
|
|
13
|
-
attrs.each do |attr|
|
|
14
|
-
writer = "#{attr}=".to_sym
|
|
15
|
-
reader = attr.to_sym
|
|
16
|
-
attr_reader attr.to_sym unless method_defined? reader
|
|
17
|
-
attr_writer attr.to_sym unless method_defined? writer
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Define the common aliases now, the instance type specific ones will
|
|
21
|
-
# be created when the instance type is known
|
|
22
|
-
self::TEST_INSTANCE_ALIASES.each do |_alias, val|
|
|
23
|
-
writer = "#{_alias}=".to_sym
|
|
24
|
-
reader = _alias.to_sym
|
|
25
|
-
unless val.is_a? Hash
|
|
26
|
-
unless method_defined? writer
|
|
27
|
-
define_method("#{_alias}=") do |v|
|
|
28
|
-
send("#{val}=", v)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
unless method_defined? reader
|
|
32
|
-
define_method("#{_alias}") do
|
|
33
|
-
send(val)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def self.attrs
|
|
41
|
-
@attrs ||= begin
|
|
42
|
-
attrs = self::TEST_INSTANCE_ATTRS.dup
|
|
43
|
-
|
|
44
|
-
self::TEST_INSTANCE_EXTRA_ARGS.times do |i|
|
|
45
|
-
attrs << "arg#{i}"
|
|
46
|
-
end
|
|
47
|
-
attrs << 'comment'
|
|
48
|
-
attrs
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def initialize(name, options = {})
|
|
53
|
-
@append_version = true
|
|
54
|
-
self.name = name
|
|
55
|
-
# Add any methods
|
|
56
|
-
if options[:methods][:methods]
|
|
57
|
-
methods = options[:methods][:methods]
|
|
58
|
-
@finalize = methods[:finalize]
|
|
59
|
-
methods.each do |method_name, function|
|
|
60
|
-
unless method_name == :finalize
|
|
61
|
-
var_name = "@#{method_name}".gsub(/=|\?/, '_')
|
|
62
|
-
instance_variable_set(var_name, function)
|
|
63
|
-
define_singleton_method method_name do |*args|
|
|
64
|
-
instance_variable_get(var_name).call(self, *args)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
# Create attributes corresponding to the test method type represented
|
|
70
|
-
# by this method instance
|
|
71
|
-
options[:methods].each do |attr, arg_default|
|
|
72
|
-
arg_default = [arg_default] unless arg_default.is_a?(Array)
|
|
73
|
-
unless attr == :aliases || attr == :methods
|
|
74
|
-
clean_attr = clean_attr_name(attr)
|
|
75
|
-
arg = arg_default[0]
|
|
76
|
-
default = arg_default[1]
|
|
77
|
-
allowed = arg_default[2]
|
|
78
|
-
aliases = [clean_attr]
|
|
79
|
-
aliases << clean_attr.underscore if clean_attr.underscore != clean_attr
|
|
80
|
-
aliases.each do |alias_|
|
|
81
|
-
define_singleton_method("#{alias_}=") do |v|
|
|
82
|
-
if allowed
|
|
83
|
-
unless allowed.include?(v)
|
|
84
|
-
fail "Cannot set #{alias_} to #{v}, valid values are: #{allowed.join(', ')}"
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
instance_variable_set("@#{arg}", v)
|
|
88
|
-
end
|
|
89
|
-
define_singleton_method(alias_) do
|
|
90
|
-
instance_variable_get("@#{arg}")
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
send("#{arg}=", default)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
if options[:methods][:aliases]
|
|
97
|
-
options[:methods][:aliases].each do |alias_, attr|
|
|
98
|
-
clean_attr = clean_attr_name(attr)
|
|
99
|
-
define_singleton_method("#{alias_}=") do |v|
|
|
100
|
-
send("#{clean_attr}=", v)
|
|
101
|
-
end
|
|
102
|
-
define_singleton_method(alias_) do
|
|
103
|
-
send(clean_attr)
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
# Set the defaults
|
|
108
|
-
self.class::TEST_INSTANCE_DEFAULTS.each do |k, v|
|
|
109
|
-
send("#{k}=", v) if self.respond_to?("#{k}=", v)
|
|
110
|
-
end
|
|
111
|
-
# Finally set any initial values that have been supplied
|
|
112
|
-
options[:attrs].each do |k, v|
|
|
113
|
-
send("#{k}=", v) if respond_to?("#{k}=")
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def ==(other_instance)
|
|
118
|
-
self.class == other_instance.class &&
|
|
119
|
-
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
|
120
|
-
self.class.attrs.all? do |attr|
|
|
121
|
-
# Exclude test name, already examined above and don't want to include
|
|
122
|
-
# the version in the comparison
|
|
123
|
-
if attr == 'test_name'
|
|
124
|
-
true
|
|
125
|
-
else
|
|
126
|
-
send(attr) == other_instance.send(attr)
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Returns the fully formatted test instance for insertion into an instance sheet
|
|
132
|
-
def to_s(override_name = nil)
|
|
133
|
-
l = "\t"
|
|
134
|
-
self.class.attrs.each do |attr|
|
|
135
|
-
if attr == 'test_name' && override_name
|
|
136
|
-
l += "#{override_name}\t"
|
|
137
|
-
else
|
|
138
|
-
l += "#{send(attr)}\t"
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
"#{l}"
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def name
|
|
145
|
-
if version && @append_version
|
|
146
|
-
"#{@test_name}_v#{version}"
|
|
147
|
-
else
|
|
148
|
-
@test_name.to_s
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
alias_method :test_name, :name
|
|
152
|
-
|
|
153
|
-
def name=(val)
|
|
154
|
-
self.test_name = val
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def unversioned_name
|
|
158
|
-
@test_name.to_s
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
private
|
|
162
|
-
|
|
163
|
-
def clean_attr_name(name)
|
|
164
|
-
name.to_s.gsub(/\.|-/, '_')
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
1
|
+
module OrigenTesters
|
|
2
|
+
module IGXLBasedTester
|
|
3
|
+
class Base
|
|
4
|
+
class CustomTestInstance
|
|
5
|
+
attr_accessor :type, :index, :version, :append_version, :finalize
|
|
6
|
+
|
|
7
|
+
# Returns the object representing the test instance library that the
|
|
8
|
+
# given test instance is defined in
|
|
9
|
+
attr_reader :library
|
|
10
|
+
|
|
11
|
+
def self.define
|
|
12
|
+
# Generate accessors for all attributes and their aliases
|
|
13
|
+
attrs.each do |attr|
|
|
14
|
+
writer = "#{attr}=".to_sym
|
|
15
|
+
reader = attr.to_sym
|
|
16
|
+
attr_reader attr.to_sym unless method_defined? reader
|
|
17
|
+
attr_writer attr.to_sym unless method_defined? writer
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Define the common aliases now, the instance type specific ones will
|
|
21
|
+
# be created when the instance type is known
|
|
22
|
+
self::TEST_INSTANCE_ALIASES.each do |_alias, val|
|
|
23
|
+
writer = "#{_alias}=".to_sym
|
|
24
|
+
reader = _alias.to_sym
|
|
25
|
+
unless val.is_a? Hash
|
|
26
|
+
unless method_defined? writer
|
|
27
|
+
define_method("#{_alias}=") do |v|
|
|
28
|
+
send("#{val}=", v)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
unless method_defined? reader
|
|
32
|
+
define_method("#{_alias}") do
|
|
33
|
+
send(val)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.attrs
|
|
41
|
+
@attrs ||= begin
|
|
42
|
+
attrs = self::TEST_INSTANCE_ATTRS.dup
|
|
43
|
+
|
|
44
|
+
self::TEST_INSTANCE_EXTRA_ARGS.times do |i|
|
|
45
|
+
attrs << "arg#{i}"
|
|
46
|
+
end
|
|
47
|
+
attrs << 'comment'
|
|
48
|
+
attrs
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def initialize(name, options = {})
|
|
53
|
+
@append_version = true
|
|
54
|
+
self.name = name
|
|
55
|
+
# Add any methods
|
|
56
|
+
if options[:methods][:methods]
|
|
57
|
+
methods = options[:methods][:methods]
|
|
58
|
+
@finalize = methods[:finalize]
|
|
59
|
+
methods.each do |method_name, function|
|
|
60
|
+
unless method_name == :finalize
|
|
61
|
+
var_name = "@#{method_name}".gsub(/=|\?/, '_')
|
|
62
|
+
instance_variable_set(var_name, function)
|
|
63
|
+
define_singleton_method method_name do |*args|
|
|
64
|
+
instance_variable_get(var_name).call(self, *args)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
# Create attributes corresponding to the test method type represented
|
|
70
|
+
# by this method instance
|
|
71
|
+
options[:methods].each do |attr, arg_default|
|
|
72
|
+
arg_default = [arg_default] unless arg_default.is_a?(Array)
|
|
73
|
+
unless attr == :aliases || attr == :methods
|
|
74
|
+
clean_attr = clean_attr_name(attr)
|
|
75
|
+
arg = arg_default[0]
|
|
76
|
+
default = arg_default[1]
|
|
77
|
+
allowed = arg_default[2]
|
|
78
|
+
aliases = [clean_attr]
|
|
79
|
+
aliases << clean_attr.underscore if clean_attr.underscore != clean_attr
|
|
80
|
+
aliases.each do |alias_|
|
|
81
|
+
define_singleton_method("#{alias_}=") do |v|
|
|
82
|
+
if allowed
|
|
83
|
+
unless allowed.include?(v)
|
|
84
|
+
fail "Cannot set #{alias_} to #{v}, valid values are: #{allowed.join(', ')}"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
instance_variable_set("@#{arg}", v)
|
|
88
|
+
end
|
|
89
|
+
define_singleton_method(alias_) do
|
|
90
|
+
instance_variable_get("@#{arg}")
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
send("#{arg}=", default)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
if options[:methods][:aliases]
|
|
97
|
+
options[:methods][:aliases].each do |alias_, attr|
|
|
98
|
+
clean_attr = clean_attr_name(attr)
|
|
99
|
+
define_singleton_method("#{alias_}=") do |v|
|
|
100
|
+
send("#{clean_attr}=", v)
|
|
101
|
+
end
|
|
102
|
+
define_singleton_method(alias_) do
|
|
103
|
+
send(clean_attr)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
# Set the defaults
|
|
108
|
+
self.class::TEST_INSTANCE_DEFAULTS.each do |k, v|
|
|
109
|
+
send("#{k}=", v) if self.respond_to?("#{k}=", v)
|
|
110
|
+
end
|
|
111
|
+
# Finally set any initial values that have been supplied
|
|
112
|
+
options[:attrs].each do |k, v|
|
|
113
|
+
send("#{k}=", v) if respond_to?("#{k}=")
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def ==(other_instance)
|
|
118
|
+
self.class == other_instance.class &&
|
|
119
|
+
unversioned_name.to_s == other_instance.unversioned_name.to_s &&
|
|
120
|
+
self.class.attrs.all? do |attr|
|
|
121
|
+
# Exclude test name, already examined above and don't want to include
|
|
122
|
+
# the version in the comparison
|
|
123
|
+
if attr == 'test_name'
|
|
124
|
+
true
|
|
125
|
+
else
|
|
126
|
+
send(attr) == other_instance.send(attr)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Returns the fully formatted test instance for insertion into an instance sheet
|
|
132
|
+
def to_s(override_name = nil)
|
|
133
|
+
l = "\t"
|
|
134
|
+
self.class.attrs.each do |attr|
|
|
135
|
+
if attr == 'test_name' && override_name
|
|
136
|
+
l += "#{override_name}\t"
|
|
137
|
+
else
|
|
138
|
+
l += "#{send(attr)}\t"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
"#{l}"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def name
|
|
145
|
+
if version && @append_version
|
|
146
|
+
"#{@test_name}_v#{version}"
|
|
147
|
+
else
|
|
148
|
+
@test_name.to_s
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
alias_method :test_name, :name
|
|
152
|
+
|
|
153
|
+
def name=(val)
|
|
154
|
+
self.test_name = val
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def unversioned_name
|
|
158
|
+
@test_name.to_s
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
private
|
|
162
|
+
|
|
163
|
+
def clean_attr_name(name)
|
|
164
|
+
name.to_s.gsub(/\.|-/, '_')
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|