origen_testers 0.4.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 (199) hide show
  1. checksums.yaml +7 -0
  2. data/config/application.rb +140 -0
  3. data/config/commands.rb +73 -0
  4. data/config/development.rb +12 -0
  5. data/config/environment.rb +1 -0
  6. data/config/shared_commands.rb +47 -0
  7. data/config/users.rb +18 -0
  8. data/config/version.rb +8 -0
  9. data/lib/commands/build.rb +69 -0
  10. data/lib/origen_testers.rb +23 -0
  11. data/lib/origen_testers/api.rb +258 -0
  12. data/lib/origen_testers/basic_test_setups.rb +105 -0
  13. data/lib/origen_testers/callback_handlers.rb +58 -0
  14. data/lib/origen_testers/generator.rb +279 -0
  15. data/lib/origen_testers/generator/flow_control_api.rb +611 -0
  16. data/lib/origen_testers/generator/identity_map.rb +23 -0
  17. data/lib/origen_testers/generator/placeholder.rb +11 -0
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -0
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -0
  20. data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
  21. data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
  22. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
  23. data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
  24. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
  25. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
  26. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
  27. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
  28. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
  29. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
  30. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
  31. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
  32. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
  33. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
  34. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
  35. data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
  36. data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
  37. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
  39. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
  40. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
  41. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
  42. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
  43. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
  44. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
  45. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
  46. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
  47. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
  48. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
  49. data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
  50. data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
  51. data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
  52. data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
  53. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
  54. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
  55. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
  56. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
  57. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
  58. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
  59. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
  60. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
  61. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
  62. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
  63. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
  64. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
  65. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
  66. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
  67. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
  68. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
  69. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
  70. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
  71. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
  72. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
  73. data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
  74. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
  75. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
  76. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
  77. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
  78. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
  79. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
  80. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
  81. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
  82. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
  83. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
  84. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
  85. data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
  86. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
  87. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
  88. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
  89. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
  90. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
  91. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
  92. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
  93. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
  94. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
  95. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
  96. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
  97. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
  98. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
  99. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
  100. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
  101. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
  106. data/lib/origen_testers/interface.rb +183 -0
  107. data/lib/origen_testers/parser.rb +22 -0
  108. data/lib/origen_testers/parser/description_lookup.rb +62 -0
  109. data/lib/origen_testers/parser/searchable_array.rb +30 -0
  110. data/lib/origen_testers/parser/searchable_hash.rb +30 -0
  111. data/lib/origen_testers/pattern_compilers.rb +116 -0
  112. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
  113. data/lib/origen_testers/pattern_compilers/job.rb +96 -0
  114. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
  115. data/lib/origen_testers/program_generators.rb +55 -0
  116. data/lib/origen_testers/smartest_based_tester.rb +8 -0
  117. data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
  118. data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
  119. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
  120. data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
  121. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
  122. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
  123. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
  124. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
  125. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
  126. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
  127. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
  128. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
  129. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
  130. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
  131. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
  132. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
  133. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
  134. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
  135. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
  136. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
  137. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
  138. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
  139. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
  140. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
  141. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
  142. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
  143. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
  144. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
  145. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
  146. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
  147. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
  148. data/lib/origen_testers/test/basic_interface.rb +17 -0
  149. data/lib/origen_testers/test/block.rb +21 -0
  150. data/lib/origen_testers/test/dut.rb +184 -0
  151. data/lib/origen_testers/test/dut2.rb +76 -0
  152. data/lib/origen_testers/test/j750_base_interface.rb +119 -0
  153. data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
  154. data/lib/origen_testers/test/j750_interface.rb +8 -0
  155. data/lib/origen_testers/test/nvm.rb +94 -0
  156. data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
  157. data/lib/origen_testers/test/v93k_interface.rb +115 -0
  158. data/lib/origen_testers/timing.rb +362 -0
  159. data/lib/origen_testers/vector.rb +203 -0
  160. data/lib/origen_testers/vector_based_tester.rb +42 -0
  161. data/lib/origen_testers/vector_generator.rb +623 -0
  162. data/lib/origen_testers/vector_pipeline.rb +288 -0
  163. data/pattern/dc_instr.rb +7 -0
  164. data/pattern/delay.rb +7 -0
  165. data/pattern/mem_test.rb +8 -0
  166. data/pattern/multi_vector.rb +117 -0
  167. data/pattern/multi_vector_plus1.rb +125 -0
  168. data/pattern/nvm/j750/add_late_pins.rb +3 -0
  169. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
  170. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
  171. data/pattern/nvm/j750/j750_halt.rb +159 -0
  172. data/pattern/nvm/j750/j750_workout.rb +202 -0
  173. data/pattern/nvm/j750/timing.rb +73 -0
  174. data/pattern/nvm/v93k/v93k_workout.rb +136 -0
  175. data/pattern/read_write_reg.rb +58 -0
  176. data/pattern/reset.rb +4 -0
  177. data/pattern/subroutines.rb +38 -0
  178. data/program/_additional_erase.rb +7 -0
  179. data/program/_efa_resources.rb +7 -0
  180. data/program/_erase.rb +25 -0
  181. data/program/_erase_vfy.rb +5 -0
  182. data/program/_iv_resources.rb +10 -0
  183. data/program/basic_interface.rb +5 -0
  184. data/program/components/_prb2_main.rb +6 -0
  185. data/program/flow_control.rb +164 -0
  186. data/program/prb1.rb +226 -0
  187. data/program/prb1_resources.rb +28 -0
  188. data/program/prb2.rb +40 -0
  189. data/program/test.rb +20 -0
  190. data/templates/example.txt.erb +53 -0
  191. data/templates/j750/_vt_flow.txt.erb +8 -0
  192. data/templates/j750/_vt_instances.txt.erb +4 -0
  193. data/templates/j750/program_sheet.txt.erb +9 -0
  194. data/templates/manifest/v93k.yaml.erb +22 -0
  195. data/templates/web/index.md.erb +51 -0
  196. data/templates/web/layouts/_basic.html.erb +15 -0
  197. data/templates/web/partials/_navbar.html.erb +22 -0
  198. data/templates/web/release_notes.md.erb +5 -0
  199. metadata +332 -0
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX
4
+ require 'origen_testers/igxl_based_tester/base/test_instance_group'
5
+ class TestInstanceGroup < Base::TestInstanceGroup
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX
4
+ require 'origen_testers/igxl_based_tester/base/test_instances'
5
+ class TestInstances < Base::TestInstances
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,183 @@
1
+ require 'active_support/concern'
2
+
3
+ module OrigenTesters
4
+ # Include this module in any class you define as a test interface
5
+ module Interface
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ Origen.add_interface(self)
10
+ include Generator::FlowControlAPI::Interface
11
+ end
12
+
13
+ # This identifier will be used to make labels and other references unique to the
14
+ # current application. This will help to avoid name duplication if a program is
15
+ # comprised of many modules generated by Origen.
16
+ #
17
+ # Override in the application interface to customize, by default the identifier
18
+ # will be Origen.config.initials
19
+ def app_identifier
20
+ Origen.config.initials || 'Anon App'
21
+ end
22
+
23
+ def close(options = {})
24
+ sheet_generators.each do |generator|
25
+ generator.close(options)
26
+ end
27
+ end
28
+
29
+ # Compile a template file
30
+ def compile(file, options = {})
31
+ Origen.file_handler.preserve_state do
32
+ begin
33
+ file = Origen.file_handler.clean_path_to_template(file)
34
+ Origen.generator.compile_file_or_directory(file, initial_options: options)
35
+ rescue
36
+ file = Origen.file_handler.clean_path_to(file)
37
+ Origen.generator.compile_file_or_directory(file, initial_options: options)
38
+ end
39
+ end
40
+ end
41
+
42
+ def import(file, options = {})
43
+ # Attach the import request to the first generator, when it imports
44
+ # it any generated resources will automatically find their way to the
45
+ # correct generator/collection
46
+ generator = flow || sheet_generators.first
47
+ generator.import(file, options)
48
+ end
49
+
50
+ def render(file, options = {})
51
+ if sheet_generators.size > 1
52
+ fail "You must specify which generator to render content to! e.g. i.test_instances.render '#{file}'"
53
+ else
54
+ sheet_generators.first.render(file, options)
55
+ end
56
+ end
57
+
58
+ def write_files(options = {})
59
+ sheet_generators.each do |generator|
60
+ generator.finalize(options)
61
+ end
62
+ sheet_generators.each do |generator|
63
+ generator.write_to_file(options) if generator.to_be_written?
64
+ end
65
+ clean_referenced_patterns
66
+ reset_globals
67
+ end
68
+
69
+ # All generators should push to this array whenever they reference a pattern
70
+ # so that it is captured in the pattern list, e.g.
71
+ # Origen.interface.referenced_patterns << pattern
72
+ def referenced_patterns
73
+ @@referenced_patterns ||= []
74
+ end
75
+
76
+ # All generators should push to this array whenever they reference a subroutine
77
+ # pattern so that it is captured in the pattern list, e.g.
78
+ # Origen.interface.referenced_subroutine_patterns << pattern
79
+ def referenced_subroutine_patterns
80
+ unless Origen.tester.v93k?
81
+ fail 'referenced_subroutine_patterns is currently only implemented for V93k!'
82
+ end
83
+ @@referenced_subroutine_patterns ||= []
84
+ end
85
+
86
+ # Remove duplicates and file extensions from the referenced pattern lists
87
+ def clean_referenced_patterns
88
+ refs = [:referenced_patterns]
89
+ refs << :referenced_subroutine_patterns if Origen.tester.v93k?
90
+ refs.each do |ref|
91
+ ref = send(ref)
92
+ ref.uniq!
93
+ ref.map! do |pat|
94
+ pat.sub(/\..*/, '')
95
+ end
96
+ ref.uniq!
97
+ end
98
+ end
99
+
100
+ # Add a comment line into the buffer
101
+ def comment(text)
102
+ comments << text
103
+ end
104
+
105
+ def comments
106
+ @@comments ||= []
107
+ end
108
+
109
+ def discard_comments
110
+ @@comments = nil
111
+ end
112
+
113
+ # Returns the buffered description comments and clears the buffer
114
+ def consume_comments
115
+ c = comments
116
+ discard_comments
117
+ c
118
+ end
119
+
120
+ def top_level_flow
121
+ @@top_level_flow ||= nil
122
+ end
123
+ alias_method :top_level_flow_filename, :top_level_flow
124
+
125
+ def flow_generator
126
+ flow
127
+ end
128
+
129
+ def set_top_level_flow
130
+ @@top_level_flow = flow_generator.output_file
131
+ end
132
+
133
+ def clear_top_level_flow
134
+ @@top_level_flow = nil
135
+ end
136
+
137
+ # A storage Hash that all generators can push comment descriptions
138
+ # into when generating.
139
+ # At the end of a generation run this will contain all descriptions
140
+ # for all flows that were just created.
141
+ #
142
+ # Access via Origen.interface.descriptions
143
+ def descriptions
144
+ @@descriptions ||= Parser::DescriptionLookup.new
145
+ end
146
+
147
+ # Any tests generated within the given block will be generated in resources mode.
148
+ # Generally this means that all resources for a given test will be generated but
149
+ # flow entries will be inhibited.
150
+ def resources_mode
151
+ orig = @resources_mode
152
+ @resources_mode = true
153
+ yield
154
+ @resources_mode = orig
155
+ end
156
+
157
+ def resources_mode?
158
+ @resources_mode
159
+ end
160
+
161
+ def identity_map # :nodoc:
162
+ @@identity_map ||= ::OrigenTesters::Generator::IdentityMap.new
163
+ end
164
+
165
+ def platform
166
+ # This branch to support the ProgramGenerators module where the generator
167
+ # is included into an interface instance and not the class
168
+ if singleton_class.const_defined? :PLATFORM
169
+ singleton_class::PLATFORM
170
+ else
171
+ self.class::PLATFORM
172
+ end
173
+ end
174
+
175
+ module ClassMethods
176
+ # Returns true if the interface class supports the
177
+ # given tester instance
178
+ def supports?(tester_instance)
179
+ tester_instance.class == self::PLATFORM
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,22 @@
1
+ module OrigenTesters
2
+ module Parser
3
+ autoload :SearchableArray, 'origen_testers/parser/searchable_array'
4
+ autoload :SearchableHash, 'origen_testers/parser/searchable_hash'
5
+ autoload :DescriptionLookup, 'origen_testers/parser/description_lookup'
6
+
7
+ def parse(*args, &block)
8
+ parser.parse(*args, &block)
9
+ end
10
+
11
+ # Returns a SearchableArray containing all tests parsed from flows, this is intended to
12
+ # be the main API for accessing parsed test program attributes and should be a consistent
13
+ # method that is implemented accross all tester models.
14
+ #
15
+ # Direct access to the underlying structure (which will be specific to the tester model)
16
+ # can be achieved through the parser method, which returns an instance of J750::Parser
17
+ # $tester.parser.test_instances
18
+ def tests
19
+ parser.flow_items
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,62 @@
1
+ module OrigenTesters
2
+ module Parser
3
+ class DescriptionLookup
4
+ def initialize
5
+ @store = { flow: {}, test: {}, usage: {} }
6
+ end
7
+
8
+ def for_flow(name, options = {})
9
+ k = flow_key(name)
10
+ @store[:flow][k] || []
11
+ end
12
+
13
+ def for_test_definition(name, options = {})
14
+ n = name_key(name)
15
+ @store[:test][n] || []
16
+ end
17
+
18
+ def for_test_usage(name, flow, options = {})
19
+ k = flow_key(flow)
20
+ n = name_key(name)
21
+ @store[:usage][k] ||= {}
22
+ @store[:usage][k][n] || []
23
+ end
24
+
25
+ def add_for_flow(flow, description, options = {})
26
+ k = flow_key(flow)
27
+ @store[:flow][k] ||= []
28
+ [description].flatten.each do |d|
29
+ @store[:flow][k] << d
30
+ end
31
+ end
32
+
33
+ def add_for_test_definition(test, description, option = {})
34
+ n = name_key(test)
35
+ @store[:test][n] ||= []
36
+ [description].flatten.each do |d|
37
+ @store[:test][n] << d
38
+ end
39
+ end
40
+
41
+ def add_for_test_usage(test, flow, description, option = {})
42
+ k = flow_key(flow)
43
+ n = name_key(test)
44
+ @store[:usage][k] ||= {}
45
+ @store[:usage][k][n] ||= []
46
+ [description].flatten.each do |d|
47
+ @store[:usage][k][n] << d
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def flow_key(flow)
54
+ Pathname.new(flow).basename('.*').to_s
55
+ end
56
+
57
+ def name_key(name)
58
+ name.to_s.downcase
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ module Tester
2
+ module Parser
3
+ class SearchableArray < ::Array
4
+ def where(conditions)
5
+ exact = conditions.delete(:exact)
6
+ results = SearchableArray.new
7
+ each do |item|
8
+ if conditions.all? do |attr, val|
9
+ if val.is_a?(Array)
10
+ if exact
11
+ val.any? { |v| item.send(attr).to_s == v.to_s }
12
+ else
13
+ val.any? { |v| item.send(attr).to_s =~ /#{v.to_s}/ }
14
+ end
15
+ else
16
+ if exact
17
+ item.send(attr).to_s == val.to_s
18
+ else
19
+ item.send(attr).to_s =~ /#{val.to_s}/
20
+ end
21
+ end
22
+ end
23
+ results << item
24
+ end
25
+ end
26
+ results
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module OrigenTesters
2
+ module Parser
3
+ class SearchableHash < ::Hash
4
+ def where(conditions)
5
+ exact = conditions.delete(:exact)
6
+ results = SearchableArray.new
7
+ each do |key, item|
8
+ if conditions.all? do |attr, val|
9
+ if val.is_a?(Array)
10
+ if exact
11
+ val.any? { |v| item.send(attr).to_s == v.to_s }
12
+ else
13
+ val.any? { |v| item.send(attr).to_s =~ /#{v.to_s}/ }
14
+ end
15
+ else
16
+ if exact
17
+ item.send(attr).to_s == val.to_s
18
+ else
19
+ item.send(attr).to_s =~ /#{val.to_s}/
20
+ end
21
+ end
22
+ end
23
+ results << item
24
+ end
25
+ end
26
+ results
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,116 @@
1
+ module OrigenTesters
2
+ module PatternCompilers
3
+ require 'pathname'
4
+ require_relative 'pattern_compilers/ultraflex_pattern_compiler'
5
+
6
+ PLATFORMS = [:ultraflex]
7
+
8
+ # Linux compiler executable path
9
+ LINUX_PATTERN_COMPILER = "#{Origen.root!}/bin/latest/bin/atpcompiler"
10
+
11
+ # Windows compiler executable path
12
+ WINDOWS_PATTERN_COMPILER = "#{ENV['IGXLROOT']}/bin/apc.exe"
13
+
14
+ # Hash wrapper for compiler instances, defaults to display currently enabled
15
+ # tester platform. If none is set then user must supply a valid tester platform argument
16
+ def pattern_compilers(id = nil)
17
+ @pattern_compilers ||= begin
18
+ hash = {}
19
+ PLATFORMS.each { |platform| hash[platform] = {} }
20
+ hash
21
+ end
22
+ if id.nil?
23
+ @pattern_compilers[platform]
24
+ else
25
+ @pattern_compilers[platform][id].inspect_options
26
+ end
27
+ end
28
+ alias_method :compilers, :pattern_compilers
29
+
30
+ def pattern_compiler_platforms
31
+ PLATFORMS
32
+ end
33
+ alias_method :compiler_platforms, :pattern_compiler_platforms
34
+
35
+ # Delete pattern compiler instances. If no argument default to current platform
36
+ def delete_pattern_compilers(p = platform)
37
+ @pattern_compilers[p].delete_if { |k, v| true }
38
+ end
39
+ alias_method :delete_compilers, :delete_pattern_compilers
40
+
41
+ # Delete a pattern compiler instance.
42
+ def delete_pattern_compiler(id)
43
+ @pattern_compilers[platform].delete(id)
44
+ end
45
+ alias_method :delete_compiler, :delete_pattern_compiler
46
+
47
+ # Add a compiler for a particular tester platform and pattern type
48
+ def add_pattern_compiler(id, platform, options = {})
49
+ pattern_compilers
50
+ id = id.to_sym
51
+ platform = platform.to_sym
52
+ options[:location] = options[:location].to_sym unless options[:location].nil?
53
+ case platform
54
+ when :ultraflex
55
+ fail "Compiler ID #{id} for platform #{platform} already exists! Pick another name, delete the compiler, or clear all compilers" if @pattern_compilers[platform].keys.include? id
56
+ @pattern_compilers[platform][id] = UltraFlexPatternCompiler.new(id, options)
57
+ else
58
+ fail "Platform #{platform} is not valid, please choose from #{PLATFORMS.join(', ')}"
59
+ end
60
+ end
61
+ alias_method :add_compiler, :add_pattern_compiler
62
+
63
+ # Returns an array of the pattern compiler instance ids
64
+ # for the currently selected tester platform.
65
+ def pattern_compiler_instances(p = platform)
66
+ # Check if nil which means no tester is defined so ask user to supply it
67
+ fail "No tester platform defined so supply one of the following as an argument: #{PLATFORMS.join(', ')}" if p.nil?
68
+ p = p.to_sym
69
+ @pattern_compilers[p].keys
70
+ end
71
+ alias_method :compiler_instances, :pattern_compiler_instances
72
+
73
+ def pattern_compiler_options
74
+ cmd = ''
75
+ running_on_windows? ? cmd = "#{WINDOWS_PATTERN_COMPILER} -help" : cmd = "#{LINUX_PATTERN_COMPILER} -help"
76
+ system cmd
77
+ end
78
+ alias_method :compiler_options, :pattern_compiler_options
79
+
80
+ def pattern_compiler_version
81
+ cmd = ''
82
+ running_on_windows? ? cmd = "#{WINDOWS_PATTERN_COMPILER} -version" : cmd = "#{LINUX_PATTERN_COMPILER} -version"
83
+ system cmd
84
+ end
85
+ alias_method :compiler_version, :pattern_compiler_version
86
+
87
+ # Check if the current tester is supported
88
+ def pattern_compiler_supported?
89
+ PLATFORMS.include? platform ? true : false
90
+ end
91
+ alias_method :compiler_supported?, :pattern_compiler_supported?
92
+
93
+ private
94
+
95
+ def running_on_windows?
96
+ RUBY_PLATFORM == 'i386-mingw32'
97
+ end
98
+
99
+ # Check if the current tester is an Ultraflex
100
+ def is_ultraflex?
101
+ platform == :ultraflex ? true : false
102
+ end
103
+
104
+ def platform
105
+ if $tester.nil?
106
+ fail 'No tester instantiated, $tester is set to nil'
107
+ else
108
+ $tester.class.to_s.downcase.split('::').last.to_sym
109
+ end
110
+ end
111
+
112
+ def target_enabled?
113
+ Origen.target.name.nil? ? true : false
114
+ end
115
+ end
116
+ end