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.
Files changed (258) hide show
  1. checksums.yaml +4 -4
  2. data/config/application.rb +151 -151
  3. data/config/boot.rb +13 -13
  4. data/config/commands.rb +85 -86
  5. data/config/users.rb +18 -18
  6. data/config/version.rb +8 -8
  7. data/lib/commands/build.rb +69 -69
  8. data/lib/commands/run.rb +48 -48
  9. data/lib/origen_testers.rb +47 -47
  10. data/lib/origen_testers/api.rb +381 -381
  11. data/lib/origen_testers/basic_test_setups.rb +105 -105
  12. data/lib/origen_testers/callback_handlers.rb +59 -59
  13. data/lib/origen_testers/command_based_tester.rb +45 -45
  14. data/lib/origen_testers/flow.rb +382 -382
  15. data/lib/origen_testers/generator.rb +283 -283
  16. data/lib/origen_testers/generator/identity_map.rb +23 -23
  17. data/lib/origen_testers/generator/placeholder.rb +11 -11
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -23
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -12
  20. data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
  21. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
  22. data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
  23. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
  24. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
  25. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
  26. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
  27. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
  28. data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
  29. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
  30. data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
  31. data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
  32. data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
  33. data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
  34. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
  35. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
  36. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
  37. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
  38. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
  39. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
  40. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
  41. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
  42. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
  43. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
  44. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
  45. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
  46. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
  47. data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
  48. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
  49. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
  50. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
  51. data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
  52. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
  53. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
  54. data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
  55. data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
  56. data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
  57. data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
  58. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
  59. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
  60. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
  61. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
  62. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
  63. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
  64. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
  65. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
  66. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
  67. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
  68. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
  69. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
  70. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
  71. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
  72. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
  73. data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
  74. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
  75. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
  76. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
  77. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
  78. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
  79. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
  80. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
  81. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
  82. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
  83. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
  84. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
  85. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
  86. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
  87. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
  88. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
  89. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
  90. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
  91. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
  92. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
  93. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
  94. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
  95. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
  96. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
  97. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
  98. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
  99. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
  100. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
  101. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
  106. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
  107. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
  108. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
  109. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
  110. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
  111. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
  112. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
  113. data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
  114. data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
  115. data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
  116. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
  117. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
  118. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
  119. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
  120. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
  121. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
  122. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
  123. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
  124. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
  125. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
  126. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
  127. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
  128. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
  129. data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
  130. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
  131. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
  132. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
  133. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
  134. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
  135. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
  136. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
  137. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
  138. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
  139. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
  140. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
  141. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
  142. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
  143. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
  144. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
  145. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
  146. data/lib/origen_testers/interface.rb +345 -324
  147. data/lib/origen_testers/memory_style.rb +77 -77
  148. data/lib/origen_testers/no_interface.rb +7 -7
  149. data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
  150. data/lib/origen_testers/origen_ext/generator.rb +54 -54
  151. data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
  152. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
  153. data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
  154. data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
  155. data/lib/origen_testers/parser.rb +22 -22
  156. data/lib/origen_testers/parser/description_lookup.rb +62 -62
  157. data/lib/origen_testers/parser/searchable_array.rb +30 -30
  158. data/lib/origen_testers/parser/searchable_hash.rb +30 -30
  159. data/lib/origen_testers/pattern_compilers.rb +116 -116
  160. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
  161. data/lib/origen_testers/pattern_compilers/job.rb +96 -96
  162. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
  163. data/lib/origen_testers/program_generators.rb +62 -62
  164. data/lib/origen_testers/smartest_based_tester.rb +8 -8
  165. data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
  166. data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
  167. data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
  168. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
  169. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
  170. data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
  171. data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
  172. data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
  173. data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
  174. data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
  175. data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
  176. data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
  177. data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
  178. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
  179. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
  180. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
  181. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
  182. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
  183. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
  184. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
  185. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
  186. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
  187. data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
  188. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
  189. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
  190. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
  191. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
  192. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
  193. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
  194. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
  195. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
  196. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
  197. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
  198. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
  199. data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
  200. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
  201. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
  202. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
  203. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
  204. data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
  205. data/lib/origen_testers/test/basic_interface.rb +17 -17
  206. data/lib/origen_testers/test/block.rb +21 -21
  207. data/lib/origen_testers/test/custom_test_interface.rb +111 -111
  208. data/lib/origen_testers/test/dut.rb +295 -295
  209. data/lib/origen_testers/test/dut2.rb +76 -76
  210. data/lib/origen_testers/test/dut3.rb +244 -244
  211. data/lib/origen_testers/test/interface.rb +503 -503
  212. data/lib/origen_testers/test/nvm.rb +94 -94
  213. data/lib/origen_testers/timing.rb +368 -368
  214. data/lib/origen_testers/vector.rb +207 -207
  215. data/lib/origen_testers/vector_based_tester.rb +41 -41
  216. data/lib/origen_testers/vector_generator.rb +655 -655
  217. data/lib/origen_testers/vector_pipeline.rb +302 -302
  218. data/pattern/bitmap.rb +7 -7
  219. data/pattern/dc_instr.rb +7 -7
  220. data/pattern/delay.rb +7 -7
  221. data/pattern/freq_counter.rb +6 -6
  222. data/pattern/mem_test.rb +8 -8
  223. data/pattern/multi_vector.rb +122 -122
  224. data/pattern/multi_vector_plus1.rb +125 -125
  225. data/pattern/nvm/j750/add_late_pins.rb +3 -3
  226. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
  227. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
  228. data/pattern/nvm/j750/j750_halt.rb +159 -159
  229. data/pattern/nvm/j750/j750_workout.rb +209 -209
  230. data/pattern/nvm/j750/timing.rb +73 -73
  231. data/pattern/read_write_reg.rb +61 -61
  232. data/pattern/reset.rb +4 -4
  233. data/pattern/subroutines.rb +69 -69
  234. data/pattern/tester_overlay.rb +61 -52
  235. data/pattern/tester_store.rb +28 -28
  236. data/program/_additional_erase.rb +7 -7
  237. data/program/_efa_resources.rb +7 -7
  238. data/program/_erase.rb +25 -25
  239. data/program/_erase_vfy.rb +5 -5
  240. data/program/_iv_resources.rb +10 -10
  241. data/program/basic_interface.rb +5 -5
  242. data/program/components/_prb1_main.rb +222 -222
  243. data/program/components/_temp.rb +6 -6
  244. data/program/custom_tests.rb +10 -10
  245. data/program/flow_control.rb +422 -422
  246. data/program/prb1.rb +11 -11
  247. data/program/prb1_resources.rb +28 -28
  248. data/program/prb2.rb +27 -27
  249. data/program/test.rb +29 -29
  250. data/program/uflex_resources.rb +199 -199
  251. data/templates/example.txt.erb +53 -53
  252. data/templates/j750/program_sheet.txt.erb +9 -9
  253. data/templates/manifest/v93k.yaml.erb +22 -22
  254. data/templates/web/index.md.erb +51 -51
  255. data/templates/web/layouts/_basic.html.erb +15 -15
  256. data/templates/web/partials/_navbar.html.erb +22 -22
  257. data/templates/web/release_notes.md.erb +5 -5
  258. metadata +2 -2
@@ -1,109 +1,109 @@
1
- module OrigenTesters
2
- class IGXLBasedTester
3
- class Parser
4
- class Flow < ::OrigenTesters::Parser::SearchableArray
5
- require 'pathname'
6
-
7
- attr_accessor :parser, :file
8
-
9
- def initialize(file, options = {}) # :nodoc:
10
- @parser = options[:parser]
11
- @file = Pathname.new(file)
12
- parse
13
- end
14
-
15
- def description
16
- @parser.descriptions.flow_summary(file: file)
17
- end
18
- alias_method :summary, :description
19
-
20
- # Returns the filename of the sheet that contained the current flow
21
- def filename
22
- @file.basename.to_s
23
- end
24
- alias_method :name, :filename
25
-
26
- # Returns all flow lines that are tests, optionally supply a context to
27
- # have only the test that will execute in that context returned
28
- #
29
- # $tester.flow.first.tests.size
30
- # => 20
31
- # $tester.flow.first.tests(:job => "P1").size
32
- # => 10
33
- # $tester.flow.first.tests(:job => "P1", :enable => "data_collection").size
34
- # => 15
35
- def tests(context = {})
36
- run_context(context)
37
- end
38
-
39
- # Returns all tests in the current flow, regardless of context
40
- def all_tests
41
- where(opcode: %w(Test characterize), exact: true)
42
- end
43
-
44
- def run_context(context) # :nodoc:
45
- capture = true
46
- waiting_for_label = false
47
- select do |line|
48
- if capture
49
- if !waiting_for_label || waiting_for_label == line.label
50
- waiting_for_label = false
51
- case line.type
52
- when 'Test', 'characterize'
53
- line.executes_under_context?(context)
54
- when 'set-device', 'stop'
55
- capture = false if line.executes_under_context?(context)
56
- false
57
- when 'enable-flow-word'
58
- if line.executes_under_context?(context)
59
- context[:enable] = [context[:enable]].flatten
60
- context[:enable] << line.parameter
61
- end
62
- false
63
- when 'flag-true'
64
- if line.executes_under_context?(context)
65
- context[:true_flags] = [context[:true_flags]].flatten
66
- context[:true_flags] << line.parameter
67
- end
68
- false
69
- when 'flag-false'
70
- if line.executes_under_context?(context)
71
- context[:false_flags] = [context[:false_flags]].flatten
72
- context[:false_flags] << line.parameter
73
- end
74
- false
75
- when 'disable-flow-word'
76
- if line.executes_under_context?(context)
77
- context[:enable] = [context[:enable]].flatten
78
- context[:enable].delete(line.parameter)
79
- end
80
- false
81
- when 'logprint', 'nop', 'print'
82
- false
83
- when 'goto'
84
- waiting_for_label = line.parameter
85
- false
86
- else
87
- fail "Don't know how to process: #{line.type}, in file #{filename}"
88
- end
89
- else
90
- false
91
- end
92
- end
93
- end
94
- end
95
-
96
- def parse # :nodoc:
97
- File.readlines(@file).each do |line|
98
- l = FlowLine.new(line, parser: parser, flow: self)
99
- self << l if l.valid?
100
- end
101
- end
102
-
103
- def inspect # :nodoc:
104
- "<TestFlow: #{filename}, Lines: #{size}>"
105
- end
106
- end
107
- end
108
- end
109
- end
1
+ module OrigenTesters
2
+ class IGXLBasedTester
3
+ class Parser
4
+ class Flow < ::OrigenTesters::Parser::SearchableArray
5
+ require 'pathname'
6
+
7
+ attr_accessor :parser, :file
8
+
9
+ def initialize(file, options = {}) # :nodoc:
10
+ @parser = options[:parser]
11
+ @file = Pathname.new(file)
12
+ parse
13
+ end
14
+
15
+ def description
16
+ @parser.descriptions.flow_summary(file: file)
17
+ end
18
+ alias_method :summary, :description
19
+
20
+ # Returns the filename of the sheet that contained the current flow
21
+ def filename
22
+ @file.basename.to_s
23
+ end
24
+ alias_method :name, :filename
25
+
26
+ # Returns all flow lines that are tests, optionally supply a context to
27
+ # have only the test that will execute in that context returned
28
+ #
29
+ # $tester.flow.first.tests.size
30
+ # => 20
31
+ # $tester.flow.first.tests(:job => "P1").size
32
+ # => 10
33
+ # $tester.flow.first.tests(:job => "P1", :enable => "data_collection").size
34
+ # => 15
35
+ def tests(context = {})
36
+ run_context(context)
37
+ end
38
+
39
+ # Returns all tests in the current flow, regardless of context
40
+ def all_tests
41
+ where(opcode: %w(Test characterize), exact: true)
42
+ end
43
+
44
+ def run_context(context) # :nodoc:
45
+ capture = true
46
+ waiting_for_label = false
47
+ select do |line|
48
+ if capture
49
+ if !waiting_for_label || waiting_for_label == line.label
50
+ waiting_for_label = false
51
+ case line.type
52
+ when 'Test', 'characterize'
53
+ line.executes_under_context?(context)
54
+ when 'set-device', 'stop'
55
+ capture = false if line.executes_under_context?(context)
56
+ false
57
+ when 'enable-flow-word'
58
+ if line.executes_under_context?(context)
59
+ context[:enable] = [context[:enable]].flatten
60
+ context[:enable] << line.parameter
61
+ end
62
+ false
63
+ when 'flag-true'
64
+ if line.executes_under_context?(context)
65
+ context[:true_flags] = [context[:true_flags]].flatten
66
+ context[:true_flags] << line.parameter
67
+ end
68
+ false
69
+ when 'flag-false'
70
+ if line.executes_under_context?(context)
71
+ context[:false_flags] = [context[:false_flags]].flatten
72
+ context[:false_flags] << line.parameter
73
+ end
74
+ false
75
+ when 'disable-flow-word'
76
+ if line.executes_under_context?(context)
77
+ context[:enable] = [context[:enable]].flatten
78
+ context[:enable].delete(line.parameter)
79
+ end
80
+ false
81
+ when 'logprint', 'nop', 'print'
82
+ false
83
+ when 'goto'
84
+ waiting_for_label = line.parameter
85
+ false
86
+ else
87
+ fail "Don't know how to process: #{line.type}, in file #{filename}"
88
+ end
89
+ else
90
+ false
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ def parse # :nodoc:
97
+ File.readlines(@file).each do |line|
98
+ l = FlowLine.new(line, parser: parser, flow: self)
99
+ self << l if l.valid?
100
+ end
101
+ end
102
+
103
+ def inspect # :nodoc:
104
+ "<TestFlow: #{filename}, Lines: #{size}>"
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -1,203 +1,203 @@
1
- module OrigenTesters
2
- class IGXLBasedTester
3
- class Parser
4
- class FlowLine
5
- attr_accessor :parser, :flow, :line
6
-
7
- TYPES = %w(
8
- Test characterize defaults enable-flow-word disable-flow-word error-print goto
9
- goto-on-all-done goto-on-all-lastfail goto-on-all-lastfaildoall logprint modify
10
- nop print reset set-device set-device-new set-error-bin set-retest-bin skip
11
- stop assign-integer create-integer delete-integer create-site-var assign-site-var
12
- flag-clear flag-clear-all flag-false flag-false-all flag-true flag-true-all
13
- state-clear-all state-false-all state-true-all
14
- )
15
-
16
- ATTRS = %w(
17
- label enable job part env opcode parameter
18
- tname tnum bin_pass bin_fail sort_pass sort_fail result flag_pass
19
- flag_fail state group_specifier group_sense group_condition group_name
20
- device_sense device_condition device_name debug_assume debug_sites
21
- comment
22
- )
23
-
24
- ALIASES = {
25
- bin: :bin_fail,
26
- softbin: :sort_fail,
27
- soft_bin: :sort_fail,
28
- name: :tname,
29
- number: :tnum,
30
- test_number: :tnum,
31
- test_num: :tnum,
32
- type: :opcode
33
- }
34
-
35
- # Make readers for each low level attribute
36
- ATTRS.each do |attr|
37
- attr_reader attr
38
- end
39
-
40
- # And the aliases
41
- ALIASES.each do |_alias, attr|
42
- define_method("#{_alias}") do
43
- send(attr)
44
- end
45
- end
46
-
47
- # Returns the test instance called by the given line or nil
48
- def self.extract_test(line)
49
- l = new(line)
50
- if l.valid? && l.test?
51
- l.test_instance_name
52
- end
53
- end
54
-
55
- def initialize(line, options = {})
56
- @parser = options[:parser]
57
- @flow = options[:flow]
58
- @line = line
59
- parse
60
- if valid?
61
- ATTRS.each_with_index do |attr, i|
62
- instance_variable_set("@#{attr}", components[i + 1])
63
- end
64
- end
65
- end
66
-
67
- def inspect # :nodoc:
68
- "<FlowLine: #{type}, Parameter: #{parameter}>"
69
- end
70
-
71
- def description
72
- from_instance = test_instance ? test_instance.description : ''
73
- from_flow = parser.descriptions.flow_line(name: test_instance_name, flow: flow.file)
74
- if !from_instance.empty? && !from_flow.empty?
75
- [from_instance, "\n", from_flow].flatten
76
- elsif from_instance.empty?
77
- from_flow
78
- else
79
- from_instance
80
- end
81
- end
82
-
83
- def parse
84
- @components = @line.split("\t") unless @line.strip.empty?
85
- end
86
-
87
- def valid?
88
- components[6] && TYPES.include?(components[6])
89
- end
90
-
91
- def components
92
- @components ||= []
93
- end
94
-
95
- def test?
96
- %w(Test characterize).include? opcode
97
- end
98
-
99
- def executes_under_context?(context)
100
- enable_conditions_met?(context) &&
101
- job_conditions_met?(context) &&
102
- part_conditions_met?(context) &&
103
- env_conditions_met?(context)
104
- end
105
-
106
- def enable_conditions_met?(context)
107
- conditions_met?(enable, context[:enable])
108
- end
109
-
110
- def job_conditions_met?(context)
111
- conditions_met?(job, context[:job])
112
- end
113
-
114
- def part_conditions_met?(context)
115
- conditions_met?(part, context[:part])
116
- end
117
-
118
- def env_conditions_met?(context)
119
- conditions_met?(env, context[:env])
120
- end
121
-
122
- def conditions_met?(conditions, values)
123
- if conditions.empty?
124
- true
125
- else
126
- values = [values].flatten
127
- conditions = conditions.split(',').map(&:strip)
128
- not_conditions = conditions.select { |c| c =~ /^!/ }
129
- conditions = conditions - not_conditions
130
- # Make sure all -ve conditions are not met
131
- if not_conditions.all? do |c|
132
- c =~ /^!(.*)/
133
- c = Regexp.last_match[1]
134
- !values.include?(c)
135
- end
136
- # And then any +ve conditions
137
- if conditions.empty?
138
- true
139
- else
140
- values.any? { |v| conditions.include?(v) }
141
- end
142
- else
143
- false
144
- end
145
- end
146
- end
147
-
148
- def test_instance_name
149
- parameter
150
- end
151
- alias_method :instance_name, :test_instance_name
152
-
153
- def test_instance
154
- instances = parser.test_instances.where(name: parameter, exact: true)
155
- if instances.size > 1
156
- puts "Warning multiple instances of #{name} found, using the first one"
157
- end
158
- if instances.size == 0
159
- nil
160
- else
161
- instances.first
162
- end
163
- end
164
- alias_method :instance, :test_instance
165
-
166
- # Returns an array of patterns used by the given test, if there are none
167
- # an empty array is returned.
168
- # Optionally supply patterns to exclude if you want to ignore common subroutine
169
- # patterns for example.
170
- def patterns(options = {})
171
- if i = test_instance
172
- pats = i.patterns
173
- if options[:ignore] && pats
174
- pats.reject { |p| [options[:ignore]].flatten.include?(p) }
175
- else
176
- []
177
- end
178
- else
179
- []
180
- end
181
- end
182
- alias_method :pattern, :patterns
183
-
184
- # Returns a string summarizing any conditions (enable words, jobs, etc.) that
185
- # gate the execution of this line
186
- def conditions
187
- c = []
188
- c << "Enable: #{enable}" unless enable.empty?
189
- c << "Job: #{job}" unless job.empty?
190
- c << "Part: #{part}" unless part.empty?
191
- c << "Env: #{env}" unless env.empty?
192
- c.join('; ')
193
- end
194
-
195
- def vdd
196
- if i = test_instance
197
- i.vdd
198
- end
199
- end
200
- end
201
- end
202
- end
203
- end
1
+ module OrigenTesters
2
+ class IGXLBasedTester
3
+ class Parser
4
+ class FlowLine
5
+ attr_accessor :parser, :flow, :line
6
+
7
+ TYPES = %w(
8
+ Test characterize defaults enable-flow-word disable-flow-word error-print goto
9
+ goto-on-all-done goto-on-all-lastfail goto-on-all-lastfaildoall logprint modify
10
+ nop print reset set-device set-device-new set-error-bin set-retest-bin skip
11
+ stop assign-integer create-integer delete-integer create-site-var assign-site-var
12
+ flag-clear flag-clear-all flag-false flag-false-all flag-true flag-true-all
13
+ state-clear-all state-false-all state-true-all
14
+ )
15
+
16
+ ATTRS = %w(
17
+ label enable job part env opcode parameter
18
+ tname tnum bin_pass bin_fail sort_pass sort_fail result flag_pass
19
+ flag_fail state group_specifier group_sense group_condition group_name
20
+ device_sense device_condition device_name debug_assume debug_sites
21
+ comment
22
+ )
23
+
24
+ ALIASES = {
25
+ bin: :bin_fail,
26
+ softbin: :sort_fail,
27
+ soft_bin: :sort_fail,
28
+ name: :tname,
29
+ number: :tnum,
30
+ test_number: :tnum,
31
+ test_num: :tnum,
32
+ type: :opcode
33
+ }
34
+
35
+ # Make readers for each low level attribute
36
+ ATTRS.each do |attr|
37
+ attr_reader attr
38
+ end
39
+
40
+ # And the aliases
41
+ ALIASES.each do |_alias, attr|
42
+ define_method("#{_alias}") do
43
+ send(attr)
44
+ end
45
+ end
46
+
47
+ # Returns the test instance called by the given line or nil
48
+ def self.extract_test(line)
49
+ l = new(line)
50
+ if l.valid? && l.test?
51
+ l.test_instance_name
52
+ end
53
+ end
54
+
55
+ def initialize(line, options = {})
56
+ @parser = options[:parser]
57
+ @flow = options[:flow]
58
+ @line = line
59
+ parse
60
+ if valid?
61
+ ATTRS.each_with_index do |attr, i|
62
+ instance_variable_set("@#{attr}", components[i + 1])
63
+ end
64
+ end
65
+ end
66
+
67
+ def inspect # :nodoc:
68
+ "<FlowLine: #{type}, Parameter: #{parameter}>"
69
+ end
70
+
71
+ def description
72
+ from_instance = test_instance ? test_instance.description : ''
73
+ from_flow = parser.descriptions.flow_line(name: test_instance_name, flow: flow.file)
74
+ if !from_instance.empty? && !from_flow.empty?
75
+ [from_instance, "\n", from_flow].flatten
76
+ elsif from_instance.empty?
77
+ from_flow
78
+ else
79
+ from_instance
80
+ end
81
+ end
82
+
83
+ def parse
84
+ @components = @line.split("\t") unless @line.strip.empty?
85
+ end
86
+
87
+ def valid?
88
+ components[6] && TYPES.include?(components[6])
89
+ end
90
+
91
+ def components
92
+ @components ||= []
93
+ end
94
+
95
+ def test?
96
+ %w(Test characterize).include? opcode
97
+ end
98
+
99
+ def executes_under_context?(context)
100
+ enable_conditions_met?(context) &&
101
+ job_conditions_met?(context) &&
102
+ part_conditions_met?(context) &&
103
+ env_conditions_met?(context)
104
+ end
105
+
106
+ def enable_conditions_met?(context)
107
+ conditions_met?(enable, context[:enable])
108
+ end
109
+
110
+ def job_conditions_met?(context)
111
+ conditions_met?(job, context[:job])
112
+ end
113
+
114
+ def part_conditions_met?(context)
115
+ conditions_met?(part, context[:part])
116
+ end
117
+
118
+ def env_conditions_met?(context)
119
+ conditions_met?(env, context[:env])
120
+ end
121
+
122
+ def conditions_met?(conditions, values)
123
+ if conditions.empty?
124
+ true
125
+ else
126
+ values = [values].flatten
127
+ conditions = conditions.split(',').map(&:strip)
128
+ not_conditions = conditions.select { |c| c =~ /^!/ }
129
+ conditions = conditions - not_conditions
130
+ # Make sure all -ve conditions are not met
131
+ if not_conditions.all? do |c|
132
+ c =~ /^!(.*)/
133
+ c = Regexp.last_match[1]
134
+ !values.include?(c)
135
+ end
136
+ # And then any +ve conditions
137
+ if conditions.empty?
138
+ true
139
+ else
140
+ values.any? { |v| conditions.include?(v) }
141
+ end
142
+ else
143
+ false
144
+ end
145
+ end
146
+ end
147
+
148
+ def test_instance_name
149
+ parameter
150
+ end
151
+ alias_method :instance_name, :test_instance_name
152
+
153
+ def test_instance
154
+ instances = parser.test_instances.where(name: parameter, exact: true)
155
+ if instances.size > 1
156
+ puts "Warning multiple instances of #{name} found, using the first one"
157
+ end
158
+ if instances.size == 0
159
+ nil
160
+ else
161
+ instances.first
162
+ end
163
+ end
164
+ alias_method :instance, :test_instance
165
+
166
+ # Returns an array of patterns used by the given test, if there are none
167
+ # an empty array is returned.
168
+ # Optionally supply patterns to exclude if you want to ignore common subroutine
169
+ # patterns for example.
170
+ def patterns(options = {})
171
+ if i = test_instance
172
+ pats = i.patterns
173
+ if options[:ignore] && pats
174
+ pats.reject { |p| [options[:ignore]].flatten.include?(p) }
175
+ else
176
+ []
177
+ end
178
+ else
179
+ []
180
+ end
181
+ end
182
+ alias_method :pattern, :patterns
183
+
184
+ # Returns a string summarizing any conditions (enable words, jobs, etc.) that
185
+ # gate the execution of this line
186
+ def conditions
187
+ c = []
188
+ c << "Enable: #{enable}" unless enable.empty?
189
+ c << "Job: #{job}" unless job.empty?
190
+ c << "Part: #{part}" unless part.empty?
191
+ c << "Env: #{env}" unless env.empty?
192
+ c.join('; ')
193
+ end
194
+
195
+ def vdd
196
+ if i = test_instance
197
+ i.vdd
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end