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,54 +1,58 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- class TestSuites
5
- # Origen::Tester::Generator not included since test suites do not have their
6
- # own top-level sheet, they will be incorporated within the flow sheet
7
-
8
- attr_accessor :flow, :collection
9
-
10
- def initialize(flow)
11
- @flow = flow
12
- @collection = []
13
- end
14
-
15
- def filename
16
- flow.filename
17
- end
18
-
19
- def add(name, options = {})
20
- name = make_unique(name)
21
- suite = platform::TestSuite.new(name, options)
22
- @collection << suite
23
- # c = Origen.interface.consume_comments
24
- # Origen.interface.descriptions.add_for_test_definition(name, c)
25
- suite
26
- end
27
- alias_method :run, :add
28
- alias_method :run_and_branch, :add
29
-
30
- def platform
31
- Origen.interface.platform
32
- end
33
-
34
- def finalize
35
- # collection.each do |suite|
36
- # end
37
- end
38
-
39
- private
40
-
41
- def make_unique(name)
42
- @existing_names ||= {}
43
- if @existing_names[name]
44
- @existing_names[name] += 1
45
- "#{name}_#{@existing_names[name]}"
46
- else
47
- @existing_names[name] = 0
48
- name
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ class TestSuites
5
+ # Origen::Tester::Generator not included since test suites do not have their
6
+ # own top-level sheet, they will be incorporated within the flow sheet
7
+
8
+ attr_accessor :flow, :collection
9
+
10
+ def initialize(flow)
11
+ @flow = flow
12
+ @collection = []
13
+ end
14
+
15
+ def filename
16
+ flow.filename
17
+ end
18
+
19
+ def add(name, options = {})
20
+ name = make_unique(name)
21
+ suite = platform::TestSuite.new(name, options)
22
+ @collection << suite
23
+ # c = Origen.interface.consume_comments
24
+ # Origen.interface.descriptions.add_for_test_definition(name, c)
25
+ suite
26
+ end
27
+ alias_method :run, :add
28
+ alias_method :run_and_branch, :add
29
+
30
+ def platform
31
+ Origen.interface.platform
32
+ end
33
+
34
+ def finalize
35
+ # collection.each do |suite|
36
+ # end
37
+ end
38
+
39
+ def sorted_collection
40
+ @collection.sort_by { |ts| ts.name.to_s }
41
+ end
42
+
43
+ private
44
+
45
+ def make_unique(name)
46
+ @existing_names ||= {}
47
+ if @existing_names[name.to_sym]
48
+ @existing_names[name.to_sym] += 1
49
+ "#{name}_#{@existing_names[name.to_sym]}"
50
+ else
51
+ @existing_names[name.to_sym] = 0
52
+ name
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,38 +1,38 @@
1
- require 'pathname'
2
- module OrigenTesters
3
- module SmartestBasedTester
4
- class Base
5
- class VariablesFile
6
- include OrigenTesters::Generator
7
-
8
- attr_reader :flow_control_variables, :runtime_control_variables
9
- attr_accessor :filename, :id
10
-
11
- def initialize(options = {})
12
- @flow_control_variables = []
13
- @runtime_control_variables = []
14
- end
15
-
16
- def subdirectory
17
- 'testflow/mfh.testflow.setup'
18
- end
19
-
20
- def clean_flow_control_variables
21
- flow_control_variables.uniq.sort do |x, y|
22
- x = x[0] if x.is_a?(Array)
23
- y = y[0] if y.is_a?(Array)
24
- x <=> y
25
- end
26
- end
27
-
28
- def clean_runtime_control_variables
29
- runtime_control_variables.uniq.sort do |x, y|
30
- x = x[0] if x.is_a?(Array)
31
- y = y[0] if y.is_a?(Array)
32
- x <=> y
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
1
+ require 'pathname'
2
+ module OrigenTesters
3
+ module SmartestBasedTester
4
+ class Base
5
+ class VariablesFile
6
+ include OrigenTesters::Generator
7
+
8
+ attr_reader :flow_control_variables, :runtime_control_variables
9
+ attr_accessor :filename, :id
10
+
11
+ def initialize(options = {})
12
+ @flow_control_variables = []
13
+ @runtime_control_variables = []
14
+ end
15
+
16
+ def subdirectory
17
+ 'testflow/mfh.testflow.setup'
18
+ end
19
+
20
+ def clean_flow_control_variables
21
+ flow_control_variables.uniq.sort do |x, y|
22
+ x = x[0] if x.is_a?(Array)
23
+ y = y[0] if y.is_a?(Array)
24
+ x <=> y
25
+ end
26
+ end
27
+
28
+ def clean_runtime_control_variables
29
+ runtime_control_variables.uniq.sort do |x, y|
30
+ x = x[0] if x.is_a?(Array)
31
+ y = y[0] if y.is_a?(Array)
32
+ x <=> y
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,8 +1,8 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class V93K < Base
4
- require 'origen_testers/smartest_based_tester/v93k/generator.rb'
5
- end
6
- end
7
- V93K = SmartestBasedTester::V93K
8
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K < Base
4
+ require 'origen_testers/smartest_based_tester/v93k/generator.rb'
5
+ end
6
+ end
7
+ V93K = SmartestBasedTester::V93K
8
+ end
@@ -1,89 +1,89 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class V93K
4
- # Responsible for building V93K test programs from a collection of sub-programs
5
- class Builder
6
- require 'yaml'
7
-
8
- autoload :Flow, 'origen_testers/smartest_based_tester/v93k/builder/flow'
9
- autoload :PatternMaster, 'origen_testers/smartest_based_tester/v93k/builder/pattern_master'
10
-
11
- attr_reader :manifest
12
-
13
- def build(manifest, options = {})
14
- @manifest_dir = Pathname.new(manifest).dirname.to_s
15
- @manifest = YAML.load_file(manifest).with_indifferent_access
16
- parse_sub_programs
17
- render(options)
18
- end
19
-
20
- private
21
-
22
- def render(options)
23
- manifest[:flows].each do |name, flow|
24
- flow_file = nil
25
- pm_file = nil
26
-
27
- flow.each do |sub_program|
28
- unless flows[sub_program]
29
- puts "Flow #{name} includes sub-program #{sub_program}, but it has not been defined!"
30
- exit 1
31
- end
32
- flow_file ||= Flow.new
33
- flow_file.add_sub_flow(flows[sub_program])
34
- if pattern_masters[sub_program]
35
- pm_file ||= PatternMaster.new
36
- pm_file.add_sub_file(pattern_masters[sub_program])
37
- end
38
- end
39
-
40
- compile_options = {
41
- action: :compile,
42
- files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb",
43
- output_file_name: "#{name}.flow",
44
- output_sub_dir: 'testflow',
45
- options: { program: flow_file }
46
- }.merge(options)
47
-
48
- Origen.app.runner.launch(compile_options)
49
-
50
- if pm_file
51
- compile_options = {
52
- action: :compile,
53
- files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb",
54
- output_file_name: "#{name}.pmfl",
55
- output_sub_dir: 'vectors',
56
- options: { program: pm_file }
57
- }.merge(options)
58
- end
59
- Origen.app.runner.launch(compile_options)
60
- end
61
- end
62
-
63
- def parse_sub_programs
64
- manifest[:sub_programs].each do |sub_program|
65
- name = sub_program[:name]
66
- if sub_program[:flow]
67
- flows[name] = Flow.new(find_file(sub_program[:flow]))
68
- end
69
- if sub_program[:pattern_master]
70
- pattern_masters[name] = PatternMaster.new(find_file(sub_program[:pattern_master]))
71
- end
72
- end
73
- end
74
-
75
- def find_file(file)
76
- Origen.file_handler.clean_path_to(file, default_dir: @manifest_dir)
77
- end
78
-
79
- def flows
80
- @flows ||= {}
81
- end
82
-
83
- def pattern_masters
84
- @pattern_masters ||= {}
85
- end
86
- end
87
- end
88
- end
89
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ # Responsible for building V93K test programs from a collection of sub-programs
5
+ class Builder
6
+ require 'yaml'
7
+
8
+ autoload :Flow, 'origen_testers/smartest_based_tester/v93k/builder/flow'
9
+ autoload :PatternMaster, 'origen_testers/smartest_based_tester/v93k/builder/pattern_master'
10
+
11
+ attr_reader :manifest
12
+
13
+ def build(manifest, options = {})
14
+ @manifest_dir = Pathname.new(manifest).dirname.to_s
15
+ @manifest = YAML.load_file(manifest).with_indifferent_access
16
+ parse_sub_programs
17
+ render(options)
18
+ end
19
+
20
+ private
21
+
22
+ def render(options)
23
+ manifest[:flows].each do |name, flow|
24
+ flow_file = nil
25
+ pm_file = nil
26
+
27
+ flow.each do |sub_program|
28
+ unless flows[sub_program]
29
+ puts "Flow #{name} includes sub-program #{sub_program}, but it has not been defined!"
30
+ exit 1
31
+ end
32
+ flow_file ||= Flow.new
33
+ flow_file.add_sub_flow(flows[sub_program])
34
+ if pattern_masters[sub_program]
35
+ pm_file ||= PatternMaster.new
36
+ pm_file.add_sub_file(pattern_masters[sub_program])
37
+ end
38
+ end
39
+
40
+ compile_options = {
41
+ action: :compile,
42
+ files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb",
43
+ output_file_name: "#{name}.flow",
44
+ output_sub_dir: 'testflow',
45
+ options: { program: flow_file }
46
+ }.merge(options)
47
+
48
+ Origen.app.runner.launch(compile_options)
49
+
50
+ if pm_file
51
+ compile_options = {
52
+ action: :compile,
53
+ files: "#{Origen.root!}/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb",
54
+ output_file_name: "#{name}.pmfl",
55
+ output_sub_dir: 'vectors',
56
+ options: { program: pm_file }
57
+ }.merge(options)
58
+ end
59
+ Origen.app.runner.launch(compile_options)
60
+ end
61
+ end
62
+
63
+ def parse_sub_programs
64
+ manifest[:sub_programs].each do |sub_program|
65
+ name = sub_program[:name]
66
+ if sub_program[:flow]
67
+ flows[name] = Flow.new(find_file(sub_program[:flow]))
68
+ end
69
+ if sub_program[:pattern_master]
70
+ pattern_masters[name] = PatternMaster.new(find_file(sub_program[:pattern_master]))
71
+ end
72
+ end
73
+ end
74
+
75
+ def find_file(file)
76
+ Origen.file_handler.clean_path_to(file, default_dir: @manifest_dir)
77
+ end
78
+
79
+ def flows
80
+ @flows ||= {}
81
+ end
82
+
83
+ def pattern_masters
84
+ @pattern_masters ||= {}
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,181 +1,181 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class V93K
4
- class Builder
5
- # Responsible for modelling/building the contents of a V93K flow file
6
- class Flow
7
- attr_reader :information, :declarations, :flags, :testmethodparameters,
8
- :testmethodlimits, :testmethods, :test_suites, :test_flow, :binning,
9
- :hardware_bin_descriptions, :file
10
-
11
- def initialize(file = nil)
12
- @information = {}
13
- @declarations = {}
14
- @flags = {}
15
- @testmethodparameters = {}
16
- @testmethodlimits = {}
17
- @testmethods = {}
18
- @test_suites = {}
19
- @test_flow = []
20
- @binning = []
21
- @hardware_bin_descriptions = {}
22
- @groups = {}
23
- @file = file
24
- parse_file if file
25
- end
26
-
27
- def add_sub_flow(flow)
28
- combine(flow, :information, exclude: 'test_revision')
29
- combine(flow, :declarations)
30
- combine(flow, :flags)
31
- add_test_methods(flow)
32
- add_test_suites(flow)
33
- add_flow(flow)
34
- (binning << flow.binning).flatten!.uniq!
35
- combine(flow, :hardware_bin_descriptions)
36
- end
37
-
38
- private
39
-
40
- def parse_file
41
- current_section = nil
42
- current = nil
43
- File.open(file) do |f|
44
- f.each_line do |line|
45
- if current_section
46
- if line =~ /^\s*end\s*$/
47
- current_section = nil
48
- current = nil
49
- else
50
- case current_section
51
- when :information, :declarations, :flags, :hardware_bin_descriptions
52
- if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
53
- send(current_section)[Regexp.last_match(1).strip] = Regexp.last_match(2).strip
54
- end
55
- when :testmethodparameters, :testmethodlimits, :testmethods, :test_suites
56
- if line =~ /^\s*(.*):\s*$/
57
- current = Regexp.last_match(1)
58
- send(current_section)[current] = {}
59
- elsif current
60
- if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
61
- send(current_section)[current][Regexp.last_match(1).strip] = Regexp.last_match(2).strip
62
- end
63
- end
64
- when :binning
65
- binning << line.strip
66
- when :test_flow
67
- add_flow_line(line)
68
- end
69
- end
70
- else
71
- if line =~ /^\s*(information|declarations|flags|testmethodparameters|testmethodlimits|testmethods|test_suites|test_flow|binning|hardware_bin_descriptions)\s*$/
72
- current_section = Regexp.last_match(1).to_sym
73
- current = nil
74
- end
75
- end
76
- end
77
- end
78
- end
79
-
80
- def groups
81
- @groups
82
- end
83
-
84
- def add_flow(flow)
85
- flow.test_flow.each { |l| add_flow_line(l) }
86
- end
87
-
88
- def add_flow_line(line)
89
- line.strip!
90
- # Make group names unique as required
91
- if line =~ /\s*},\s*open\s*,\s*("|')(.*)("|'),.*/
92
- group = Regexp.last_match(2).strip
93
- if groups[group]
94
- line = line.sub(group, "#{group} #{groups[group]}")
95
- groups[group] += 1
96
- else
97
- groups[group] = 1
98
- end
99
- end
100
- test_flow << line
101
- end
102
-
103
- def combine(flow, attribute, options = {})
104
- exclude = [options[:exclude]].flatten.compact
105
- flow.send(attribute).each do |key, val|
106
- unless exclude.include?(key)
107
- if send(attribute)[key]
108
- if send(attribute)[key] != val
109
- puts "#{flow} assigns #{attribute} attribute #{key} to #{val}, however it is already assigned to #{send(attribute)[key]}"
110
- exit 1
111
- end
112
- else
113
- send(attribute)[key] = val
114
- end
115
- end
116
- end
117
- end
118
-
119
- # Add the test methods from the given flow to this flow
120
- def add_test_methods(flow)
121
- flow.testmethods.each do |id, tm|
122
- # If this flow already contains a test method with the current ID
123
- if testmethods[id]
124
- nid = "tm_#{tm_ix}"
125
- testmethods[nid] = tm
126
- testmethodparameters[nid] = flow.testmethodparameters[id]
127
- testmethodlimits[nid] = flow.testmethodlimits[id]
128
- flow.test_suites.each do |tsid, ts|
129
- if ts['override_testf'] == "#{id};" && !ts[:new_id]
130
- ts['override_testf'] = "#{nid};"
131
- ts[:new_id] = true
132
- end
133
- end
134
- else
135
- testmethods[id] = tm
136
- testmethodparameters[id] = flow.testmethodparameters[id]
137
- testmethodlimits[id] = flow.testmethodlimits[id]
138
- end
139
- end
140
- # Remove this temporary flag to prevent it rendering to the output file
141
- flow.test_suites.each do |tsid, ts|
142
- ts.delete(:new_id)
143
- end
144
- end
145
-
146
- def add_test_suites(flow)
147
- flow.test_suites.each do |id, ts|
148
- # If this flow already contains a test suite with the current ID
149
- if test_suites[id]
150
- i = 1
151
- nid = id
152
- while test_suites[nid]
153
- nid = "#{id}_#{i}"
154
- i += 1
155
- end
156
- test_suites[nid] = ts
157
- flow.test_flow.map! do |line|
158
- if line =~ /(run|run_and_branch)\(#{id}\)/ && line !~ /--NEW_ID--/
159
- line = line.sub(id, nid)
160
- line += '--NEW_ID--'
161
- else
162
- line
163
- end
164
- end
165
- else
166
- test_suites[id] = ts
167
- end
168
- end
169
- flow.test_flow.map! do |line|
170
- line.sub('--NEW_ID--', '')
171
- end
172
- end
173
-
174
- def tm_ix
175
- testmethods.size + 1
176
- end
177
- end
178
- end
179
- end
180
- end
181
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ class Builder
5
+ # Responsible for modelling/building the contents of a V93K flow file
6
+ class Flow
7
+ attr_reader :information, :declarations, :flags, :testmethodparameters,
8
+ :testmethodlimits, :testmethods, :test_suites, :test_flow, :binning,
9
+ :hardware_bin_descriptions, :file
10
+
11
+ def initialize(file = nil)
12
+ @information = {}
13
+ @declarations = {}
14
+ @flags = {}
15
+ @testmethodparameters = {}
16
+ @testmethodlimits = {}
17
+ @testmethods = {}
18
+ @test_suites = {}
19
+ @test_flow = []
20
+ @binning = []
21
+ @hardware_bin_descriptions = {}
22
+ @groups = {}
23
+ @file = file
24
+ parse_file if file
25
+ end
26
+
27
+ def add_sub_flow(flow)
28
+ combine(flow, :information, exclude: 'test_revision')
29
+ combine(flow, :declarations)
30
+ combine(flow, :flags)
31
+ add_test_methods(flow)
32
+ add_test_suites(flow)
33
+ add_flow(flow)
34
+ (binning << flow.binning).flatten!.uniq!
35
+ combine(flow, :hardware_bin_descriptions)
36
+ end
37
+
38
+ private
39
+
40
+ def parse_file
41
+ current_section = nil
42
+ current = nil
43
+ File.open(file) do |f|
44
+ f.each_line do |line|
45
+ if current_section
46
+ if line =~ /^\s*end\s*$/
47
+ current_section = nil
48
+ current = nil
49
+ else
50
+ case current_section
51
+ when :information, :declarations, :flags, :hardware_bin_descriptions
52
+ if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
53
+ send(current_section)[Regexp.last_match(1).strip] = Regexp.last_match(2).strip
54
+ end
55
+ when :testmethodparameters, :testmethodlimits, :testmethods, :test_suites
56
+ if line =~ /^\s*(.*):\s*$/
57
+ current = Regexp.last_match(1)
58
+ send(current_section)[current] = {}
59
+ elsif current
60
+ if line =~ /^\s*(.*)\s*=\s*(.*)\s*$/
61
+ send(current_section)[current][Regexp.last_match(1).strip] = Regexp.last_match(2).strip
62
+ end
63
+ end
64
+ when :binning
65
+ binning << line.strip
66
+ when :test_flow
67
+ add_flow_line(line)
68
+ end
69
+ end
70
+ else
71
+ if line =~ /^\s*(information|declarations|flags|testmethodparameters|testmethodlimits|testmethods|test_suites|test_flow|binning|hardware_bin_descriptions)\s*$/
72
+ current_section = Regexp.last_match(1).to_sym
73
+ current = nil
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ def groups
81
+ @groups
82
+ end
83
+
84
+ def add_flow(flow)
85
+ flow.test_flow.each { |l| add_flow_line(l) }
86
+ end
87
+
88
+ def add_flow_line(line)
89
+ line.strip!
90
+ # Make group names unique as required
91
+ if line =~ /\s*},\s*open\s*,\s*("|')(.*)("|'),.*/
92
+ group = Regexp.last_match(2).strip
93
+ if groups[group]
94
+ line = line.sub(group, "#{group} #{groups[group]}")
95
+ groups[group] += 1
96
+ else
97
+ groups[group] = 1
98
+ end
99
+ end
100
+ test_flow << line
101
+ end
102
+
103
+ def combine(flow, attribute, options = {})
104
+ exclude = [options[:exclude]].flatten.compact
105
+ flow.send(attribute).each do |key, val|
106
+ unless exclude.include?(key)
107
+ if send(attribute)[key]
108
+ if send(attribute)[key] != val
109
+ puts "#{flow} assigns #{attribute} attribute #{key} to #{val}, however it is already assigned to #{send(attribute)[key]}"
110
+ exit 1
111
+ end
112
+ else
113
+ send(attribute)[key] = val
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+ # Add the test methods from the given flow to this flow
120
+ def add_test_methods(flow)
121
+ flow.testmethods.each do |id, tm|
122
+ # If this flow already contains a test method with the current ID
123
+ if testmethods[id]
124
+ nid = "tm_#{tm_ix}"
125
+ testmethods[nid] = tm
126
+ testmethodparameters[nid] = flow.testmethodparameters[id]
127
+ testmethodlimits[nid] = flow.testmethodlimits[id]
128
+ flow.test_suites.each do |tsid, ts|
129
+ if ts['override_testf'] == "#{id};" && !ts[:new_id]
130
+ ts['override_testf'] = "#{nid};"
131
+ ts[:new_id] = true
132
+ end
133
+ end
134
+ else
135
+ testmethods[id] = tm
136
+ testmethodparameters[id] = flow.testmethodparameters[id]
137
+ testmethodlimits[id] = flow.testmethodlimits[id]
138
+ end
139
+ end
140
+ # Remove this temporary flag to prevent it rendering to the output file
141
+ flow.test_suites.each do |tsid, ts|
142
+ ts.delete(:new_id)
143
+ end
144
+ end
145
+
146
+ def add_test_suites(flow)
147
+ flow.test_suites.each do |id, ts|
148
+ # If this flow already contains a test suite with the current ID
149
+ if test_suites[id]
150
+ i = 1
151
+ nid = id
152
+ while test_suites[nid]
153
+ nid = "#{id}_#{i}"
154
+ i += 1
155
+ end
156
+ test_suites[nid] = ts
157
+ flow.test_flow.map! do |line|
158
+ if line =~ /(run|run_and_branch)\(#{id}\)/ && line !~ /--NEW_ID--/
159
+ line = line.sub(id, nid)
160
+ line += '--NEW_ID--'
161
+ else
162
+ line
163
+ end
164
+ end
165
+ else
166
+ test_suites[id] = ts
167
+ end
168
+ end
169
+ flow.test_flow.map! do |line|
170
+ line.sub('--NEW_ID--', '')
171
+ end
172
+ end
173
+
174
+ def tm_ix
175
+ testmethods.size + 1
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end