origen-sdk - 有没有办法将 if_enable 配置为始终通过或有条件地删除变量检查?

标签 origen-sdk

遇到一种情况,根据工作,我想将部分代码包装在 if_enable block 中,但有条件。

如果我们正在运行表征作业,那么我们会根据测试代码对测试进行分区,以减少实验的测试时间。对于任何其他作业,这些测试总是为了生产测试而运行。

原始代码的格式是这样的:

Flow.create() do |options|
  test_a
  test_b
end

我当前解决此问题的解决方案是:

def a_tests
  if job == :charz
    if_enable '$enableA' do
      yield
    end
  else
   yield
  end
end
def b_tests
  if job == :charz
    if_enable '$enableB' do
      yield
    end
  else
   yield
  end
end
Flow.create() do |options|
  a_tests do
    test_a
  end
  b_tests do
    test_b
  end
end

我想做的是这样的:

Flow.create() do |options|
  a_flag = job == :charz ? '$enableA' : ''
  b_flag = job == :charz ? '$enableB' : ''
  if_enable a_flag do
    test_a
  end
  if_enable b_flag do
    test_b
  end
end

如果传递一个空值(或者可能是 nil 或 false),将导致 if_enable block 内的测试仍然生成,但不会被任何变量检查所控制。此功能是否已经存在于某个地方,或者我当前的解决方案是目前最好的方法?或者还有其他更清洁的 ruby 解决方案吗?

最佳答案

使用现有 API 的一种纯粹流级解决方案是在运行时强制启用非 cz 作业,如下所示:

Flow.create do |options|
  if job != :charz
    enable '$enableA'
    enable '$enableB'
  end

  if_enable '$enableA' do
    test_a
  end
  if_enable '$enableB' do
    test_b
  end
end

您当前的解决方案也非常好,尽管我会通过将方法定义移动到您的界面并使其更加通用来增强它:

# lib/my_app/my_interface.rb
def if_enable_when_charz(var)
  if job == :charz
    if_enable var do
      yield
    end
  else
    yield
  end
end

那么你就有了一个很好的 helper 来保持你的流程逻辑非常干净:

# program/my_flow.rb
Flow.create do |options|
  if_enable_when_charz '$enableA' do
    test_a
  end
  if_enable_when_charz '$enableB' do
    test_b
  end
end

关于origen-sdk - 有没有办法将 if_enable 配置为始终通过或有条件地删除变量检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586668/

相关文章:

origen-sdk - Origen 支持寄存器别名吗?

origen-sdk - 通过手动控制覆盖时钟引脚,然后再次计时

origen-sdk - 将参数传递给非硅子 block /助手的约定

origen-sdk - 在规范测试中切换测试仪

origen-sdk - 子 block 基址覆盖?

origen-sdk - 访问/使用默认流程方法