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,21 +1,21 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- module Processors
5
- # Removes any empty on_pass and on_fail branches
6
- class EmptyBranchCleaner < ATP::Processor
7
- # Delete any on-fail child if it's 'empty'
8
- def on_test(node)
9
- if on_pass = node.find(:on_pass)
10
- node = node.remove(on_pass) if on_pass.children.empty?
11
- end
12
- if on_fail = node.find(:on_fail)
13
- node = node.remove(on_fail) if on_fail.children.empty?
14
- end
15
- node = node.updated(nil, process_all(node.children))
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ module Processors
5
+ # Removes any empty on_pass and on_fail branches
6
+ class EmptyBranchCleaner < ATP::Processor
7
+ # Delete any on-fail child if it's 'empty'
8
+ def on_test(node)
9
+ if on_pass = node.find(:on_pass)
10
+ node = node.remove(on_pass) if on_pass.children.empty?
11
+ end
12
+ if on_fail = node.find(:on_fail)
13
+ node = node.remove(on_fail) if on_fail.children.empty?
14
+ end
15
+ node = node.updated(nil, process_all(node.children))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,33 +1,33 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- module Processors
5
- # Processes the AST and tabulates occurrences of unique set_run_flag nodes
6
- class ExtractRunFlagTable < ATP::Processor
7
- # Hash table of run_flag name with number of times used
8
- attr_reader :run_flag_table
9
-
10
- # Reset hash table
11
- def initialize
12
- @run_flag_table = {}.with_indifferent_access
13
- end
14
-
15
- # For run_flag nodes, increment # of occurrences for specified flag
16
- def on_run_flag(node)
17
- children = node.children.dup
18
- names = children.shift
19
- state = children.shift
20
- Array(names).each do |name|
21
- if @run_flag_table[name.to_sym].nil?
22
- @run_flag_table[name.to_sym] = 1
23
- else
24
- @run_flag_table[name.to_sym] += 1
25
- end
26
- end
27
- process_all(node.children)
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ module Processors
5
+ # Processes the AST and tabulates occurrences of unique set_run_flag nodes
6
+ class ExtractRunFlagTable < ATP::Processor
7
+ # Hash table of run_flag name with number of times used
8
+ attr_reader :run_flag_table
9
+
10
+ # Reset hash table
11
+ def initialize
12
+ @run_flag_table = {}.with_indifferent_access
13
+ end
14
+
15
+ # For run_flag nodes, increment # of occurrences for specified flag
16
+ def on_run_flag(node)
17
+ children = node.children.dup
18
+ names = children.shift
19
+ state = children.shift
20
+ Array(names).each do |name|
21
+ if @run_flag_table[name.to_sym].nil?
22
+ @run_flag_table[name.to_sym] = 1
23
+ else
24
+ @run_flag_table[name.to_sym] += 1
25
+ end
26
+ end
27
+ process_all(node.children)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,22 +1,22 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- module Processors
5
- # Extracts all runtime variables which are set within the given flow, returning
6
- # them in an array
7
- class ExtractSetVariables < ATP::Processor
8
- def run(nodes)
9
- @results = []
10
- process_all(nodes)
11
- @results.uniq
12
- end
13
-
14
- def on_set_run_flag(node)
15
- flag = node.value
16
- @results << flag
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ module Processors
5
+ # Extracts all runtime variables which are set within the given flow, returning
6
+ # them in an array
7
+ class ExtractSetVariables < ATP::Processor
8
+ def run(nodes)
9
+ @results = []
10
+ process_all(nodes)
11
+ @results.uniq
12
+ end
13
+
14
+ def on_set_run_flag(node)
15
+ flag = node.value
16
+ @results << flag
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,188 +1,188 @@
1
- module OrigenTesters
2
- module SmartestBasedTester
3
- class Base
4
- module Processors
5
- # This processor eliminates the use of run flags between adjacent tests:
6
- #
7
- # s(:flow,
8
- # s(:name, "prb1"),
9
- # s(:test,
10
- # s(:name, "test1"),
11
- # s(:id, "t1"),
12
- # s(:on_fail,
13
- # s(:set_run_flag, "t1_FAILED", "auto_generated"),
14
- # s(:continue))),
15
- # s(:run_flag, "t1_FAILED", true,
16
- # s(:test,
17
- # s(:name, "test2"))))
18
- #
19
- #
20
- # s(:flow,
21
- # s(:name, "prb1"),
22
- # s(:test,
23
- # s(:name, "test1"),
24
- # s(:id, "t1"),
25
- # s(:on_fail,
26
- # s(:test,
27
- # s(:name, "test2")))))
28
- #
29
- class FlagOptimizer < ATP::Processor
30
- attr_reader :run_flag_table
31
-
32
- def run(node)
33
- # Pre-process the AST for # of occurrences of each run-flag used
34
- t = ExtractRunFlagTable.new
35
- t.process(node)
36
- @run_flag_table = t.run_flag_table
37
- process(node)
38
- end
39
-
40
- def on_named_collection(node)
41
- name, *nodes = *node
42
- node.updated(nil, [name] + optimize(process_all(nodes)))
43
- end
44
- alias_method :on_flow, :on_named_collection
45
- alias_method :on_group, :on_named_collection
46
-
47
- def on_run_flag(node)
48
- name, state, *nodes = *node
49
- if run_flag_to_remove.last && run_flag_to_remove.last == node.to_a[0..1]
50
- node.to_a.last
51
- else
52
- node.updated(nil, [name, state] + optimize(process_all(nodes)))
53
- end
54
- end
55
-
56
- def on_on_fail(node)
57
- if to_inline = nodes_to_inline_on_pass_or_fail.last
58
- # If this node sets the flag that gates the node to be inlined
59
- set_run_flag = node.find(:set_run_flag)
60
- if set_run_flag && gated_by_set?(set_run_flag.to_a[0], to_inline)
61
- # Remove the sub-node that sets the flag if there are no further references to it
62
-
63
- if @run_flag_table[set_run_flag.to_a[0]] == 1 || !@run_flag_table[set_run_flag.to_a[0]]
64
- node = node.updated(nil, node.children - [set_run_flag])
65
- end
66
-
67
- # And append the content of the node to be in_lined at the end of this on pass/fail node
68
- append = reorder_nested_run_flags(set_run_flag.to_a[0], to_inline).to_a[2..-1]
69
-
70
- # Belt and braces approach to make sure this node to be inlined does
71
- # not get picked up anywhere else
72
- nodes_to_inline_on_pass_or_fail.pop
73
- nodes_to_inline_on_pass_or_fail << nil
74
- end
75
- end
76
- node.updated(nil, optimize(process_all(node.children + Array(append))))
77
- end
78
- alias_method :on_on_pass, :on_on_fail
79
-
80
- def optimize(nodes)
81
- results = []
82
- node1 = nil
83
- nodes.each do |node2|
84
- if node1
85
- if can_be_combined?(node1, node2)
86
- node1 = combine(node1, node2)
87
- else
88
- results << node1
89
- node1 = node2
90
- end
91
- else
92
- node1 = node2
93
- end
94
- end
95
- results << node1 if node1
96
- results
97
- end
98
-
99
- def can_be_combined?(node1, node2)
100
- if node1.type == :test && node2.type == :run_flag
101
- if node1.find_all(:on_fail, :on_pass).any? do |node|
102
- if n = node.find(:set_run_flag)
103
- # Inline instead of setting a flag if...
104
- gated_by_set?(n.to_a[0], node2) && # The flag set by node1 is gating node2
105
- n.to_a[1] == 'auto_generated' && # The flag has been generated and not specified by the user
106
- n.to_a[0] !~ /_RAN$/ # And don't compress RAN flags because they can be set by both on_fail and on_pass
107
- end
108
- end
109
- return true
110
- end
111
- end
112
- false
113
- end
114
-
115
- def combine(node1, node2)
116
- nodes_to_inline_on_pass_or_fail << node2
117
- node1 = node1.updated(nil, process_all(node1.children))
118
- nodes_to_inline_on_pass_or_fail.pop
119
- node1
120
- end
121
-
122
- # node will always be a run_flag type node, guaranteed by the caller
123
- #
124
- # Returns true if flag matches the one supplied and it is required to be set(true), like this:
125
- #
126
- # s(:run_flag, flag, true,
127
- # s(:test, ...
128
- #
129
- # Also returns true if flag matches the one supplied, but it is nested within other flag conditions:
130
- #
131
- # s(:run_flag, other_flag, false,
132
- # s(:run_flag, other_flag2, true,
133
- # s(:run_flag, flag, true,
134
- # s(:test, ...
135
- def gated_by_set?(flag, node)
136
- (flag == node.to_a[0] && node.to_a[1]) ||
137
- (node.to_a.size == 3 && node.to_a.last.type == :run_flag && gated_by_set?(flag, node.to_a.last))
138
- end
139
-
140
- # Returns the node with the run_flag clauses re-ordered to have the given flag of interest at the top.
141
- #
142
- # The caller guarantees the run_flag clause containing the given flag is present.
143
- #
144
- # For example, given this node:
145
- #
146
- # s(:run_flag, "flag1", false,
147
- # s(:run_flag, "ot_BEA7F3B_FAILED", true,
148
- # s(:test,
149
- # s(:object, <TestSuite: inner_test1_BEA7F3B>),
150
- # s(:name, "inner_test1_BEA7F3B"),
151
- # s(:number, 0),
152
- # s(:id, "it1_BEA7F3B"),
153
- # s(:on_fail,
154
- # s(:render, "multi_bin;")))))
155
- #
156
- # Then this node would be returned when the flag of interest is ot_BEA7F3B_FAILED:
157
- #
158
- # s(:run_flag, "ot_BEA7F3B_FAILED", true,
159
- # s(:run_flag, "flag1", false,
160
- # s(:test,
161
- # s(:object, <TestSuite: inner_test1_BEA7F3B>),
162
- # s(:name, "inner_test1_BEA7F3B"),
163
- # s(:number, 0),
164
- # s(:id, "it1_BEA7F3B"),
165
- # s(:on_fail,
166
- # s(:render, "multi_bin;")))))
167
- def reorder_nested_run_flags(flag, node)
168
- # If the run_flag we care about is already at the top, just return node
169
- unless node.to_a[0] == flag && node.to_a[1]
170
- run_flag_to_remove << [flag, true]
171
- node = n(:run_flag, [flag, true, process(node)])
172
- run_flag_to_remove.pop
173
- end
174
- node
175
- end
176
-
177
- def run_flag_to_remove
178
- @run_flag_to_remove ||= []
179
- end
180
-
181
- def nodes_to_inline_on_pass_or_fail
182
- @nodes_to_inline_on_pass_or_fail ||= []
183
- end
184
- end
185
- end
186
- end
187
- end
188
- end
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class Base
4
+ module Processors
5
+ # This processor eliminates the use of run flags between adjacent tests:
6
+ #
7
+ # s(:flow,
8
+ # s(:name, "prb1"),
9
+ # s(:test,
10
+ # s(:name, "test1"),
11
+ # s(:id, "t1"),
12
+ # s(:on_fail,
13
+ # s(:set_run_flag, "t1_FAILED", "auto_generated"),
14
+ # s(:continue))),
15
+ # s(:run_flag, "t1_FAILED", true,
16
+ # s(:test,
17
+ # s(:name, "test2"))))
18
+ #
19
+ #
20
+ # s(:flow,
21
+ # s(:name, "prb1"),
22
+ # s(:test,
23
+ # s(:name, "test1"),
24
+ # s(:id, "t1"),
25
+ # s(:on_fail,
26
+ # s(:test,
27
+ # s(:name, "test2")))))
28
+ #
29
+ class FlagOptimizer < ATP::Processor
30
+ attr_reader :run_flag_table
31
+
32
+ def run(node)
33
+ # Pre-process the AST for # of occurrences of each run-flag used
34
+ t = ExtractRunFlagTable.new
35
+ t.process(node)
36
+ @run_flag_table = t.run_flag_table
37
+ process(node)
38
+ end
39
+
40
+ def on_named_collection(node)
41
+ name, *nodes = *node
42
+ node.updated(nil, [name] + optimize(process_all(nodes)))
43
+ end
44
+ alias_method :on_flow, :on_named_collection
45
+ alias_method :on_group, :on_named_collection
46
+
47
+ def on_run_flag(node)
48
+ name, state, *nodes = *node
49
+ if run_flag_to_remove.last && run_flag_to_remove.last == node.to_a[0..1]
50
+ node.to_a.last
51
+ else
52
+ node.updated(nil, [name, state] + optimize(process_all(nodes)))
53
+ end
54
+ end
55
+
56
+ def on_on_fail(node)
57
+ if to_inline = nodes_to_inline_on_pass_or_fail.last
58
+ # If this node sets the flag that gates the node to be inlined
59
+ set_run_flag = node.find(:set_run_flag)
60
+ if set_run_flag && gated_by_set?(set_run_flag.to_a[0], to_inline)
61
+ # Remove the sub-node that sets the flag if there are no further references to it
62
+
63
+ if @run_flag_table[set_run_flag.to_a[0]] == 1 || !@run_flag_table[set_run_flag.to_a[0]]
64
+ node = node.updated(nil, node.children - [set_run_flag])
65
+ end
66
+
67
+ # And append the content of the node to be in_lined at the end of this on pass/fail node
68
+ append = reorder_nested_run_flags(set_run_flag.to_a[0], to_inline).to_a[2..-1]
69
+
70
+ # Belt and braces approach to make sure this node to be inlined does
71
+ # not get picked up anywhere else
72
+ nodes_to_inline_on_pass_or_fail.pop
73
+ nodes_to_inline_on_pass_or_fail << nil
74
+ end
75
+ end
76
+ node.updated(nil, optimize(process_all(node.children + Array(append))))
77
+ end
78
+ alias_method :on_on_pass, :on_on_fail
79
+
80
+ def optimize(nodes)
81
+ results = []
82
+ node1 = nil
83
+ nodes.each do |node2|
84
+ if node1
85
+ if can_be_combined?(node1, node2)
86
+ node1 = combine(node1, node2)
87
+ else
88
+ results << node1
89
+ node1 = node2
90
+ end
91
+ else
92
+ node1 = node2
93
+ end
94
+ end
95
+ results << node1 if node1
96
+ results
97
+ end
98
+
99
+ def can_be_combined?(node1, node2)
100
+ if node1.type == :test && node2.type == :run_flag
101
+ if node1.find_all(:on_fail, :on_pass).any? do |node|
102
+ if n = node.find(:set_run_flag)
103
+ # Inline instead of setting a flag if...
104
+ gated_by_set?(n.to_a[0], node2) && # The flag set by node1 is gating node2
105
+ n.to_a[1] == 'auto_generated' && # The flag has been generated and not specified by the user
106
+ n.to_a[0] !~ /_RAN$/ # And don't compress RAN flags because they can be set by both on_fail and on_pass
107
+ end
108
+ end
109
+ return true
110
+ end
111
+ end
112
+ false
113
+ end
114
+
115
+ def combine(node1, node2)
116
+ nodes_to_inline_on_pass_or_fail << node2
117
+ node1 = node1.updated(nil, process_all(node1.children))
118
+ nodes_to_inline_on_pass_or_fail.pop
119
+ node1
120
+ end
121
+
122
+ # node will always be a run_flag type node, guaranteed by the caller
123
+ #
124
+ # Returns true if flag matches the one supplied and it is required to be set(true), like this:
125
+ #
126
+ # s(:run_flag, flag, true,
127
+ # s(:test, ...
128
+ #
129
+ # Also returns true if flag matches the one supplied, but it is nested within other flag conditions:
130
+ #
131
+ # s(:run_flag, other_flag, false,
132
+ # s(:run_flag, other_flag2, true,
133
+ # s(:run_flag, flag, true,
134
+ # s(:test, ...
135
+ def gated_by_set?(flag, node)
136
+ (flag == node.to_a[0] && node.to_a[1]) ||
137
+ (node.to_a.size == 3 && node.to_a.last.type == :run_flag && gated_by_set?(flag, node.to_a.last))
138
+ end
139
+
140
+ # Returns the node with the run_flag clauses re-ordered to have the given flag of interest at the top.
141
+ #
142
+ # The caller guarantees the run_flag clause containing the given flag is present.
143
+ #
144
+ # For example, given this node:
145
+ #
146
+ # s(:run_flag, "flag1", false,
147
+ # s(:run_flag, "ot_BEA7F3B_FAILED", true,
148
+ # s(:test,
149
+ # s(:object, <TestSuite: inner_test1_BEA7F3B>),
150
+ # s(:name, "inner_test1_BEA7F3B"),
151
+ # s(:number, 0),
152
+ # s(:id, "it1_BEA7F3B"),
153
+ # s(:on_fail,
154
+ # s(:render, "multi_bin;")))))
155
+ #
156
+ # Then this node would be returned when the flag of interest is ot_BEA7F3B_FAILED:
157
+ #
158
+ # s(:run_flag, "ot_BEA7F3B_FAILED", true,
159
+ # s(:run_flag, "flag1", false,
160
+ # s(:test,
161
+ # s(:object, <TestSuite: inner_test1_BEA7F3B>),
162
+ # s(:name, "inner_test1_BEA7F3B"),
163
+ # s(:number, 0),
164
+ # s(:id, "it1_BEA7F3B"),
165
+ # s(:on_fail,
166
+ # s(:render, "multi_bin;")))))
167
+ def reorder_nested_run_flags(flag, node)
168
+ # If the run_flag we care about is already at the top, just return node
169
+ unless node.to_a[0] == flag && node.to_a[1]
170
+ run_flag_to_remove << [flag, true]
171
+ node = n(:run_flag, [flag, true, process(node)])
172
+ run_flag_to_remove.pop
173
+ end
174
+ node
175
+ end
176
+
177
+ def run_flag_to_remove
178
+ @run_flag_to_remove ||= []
179
+ end
180
+
181
+ def nodes_to_inline_on_pass_or_fail
182
+ @nodes_to_inline_on_pass_or_fail ||= []
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end