接下来的Origen test_ids接受Proc / Lambda?

时间:2018-06-04 20:36:36

标签: origen-sdk

我正在与Origen test_ids gem 'next in range' feature合作。当我在测试界面中设置softbin配置时,我会动态地找出有多少不同的硬盘有一个独特的softbin范围。这是已知的,但根据所测试的测试模块而有所不同。一些测试模块可能有3个hardbin到softbin组合,有些有5个。是否可以将Proc / Lambda传递给下面显示的softbin配置?

  config.softbins needs: :bin do |options|
    if options[:bin] == 1
      TestIds.next_in_range((1000..2000))
    elsif options[:bin] == 11
      TestIds.next_in_range((10000..99999))
    end
  end 

这样elsif语句的数量,bin和softbin范围都是动态拼接在一起的。我知道eval可以工作,但似乎不赞成。

修改

好的,在回顾了Ginty的答案之后我尝试了解决方案,但似乎这些选项没有传递到next_in_range方法。这是配置:

            TestIds.configure current_test_insertion do |config|
              config.bins.include << binning_obj.configs(:all).hbin
              config.softbins needs: :bin do |options|
                bin_map = Hash[test_type_hardbins.zip(binning_test_types)]
                TestIds.next_in_range(bin_map[options[:bin]])
              end
              config.send_to_ate = false
            end

这是错误:

COMPLETE CALL STACK
-------------------
wrong number of arguments (given 1, expected 2)
/users/user/origen/github/test_ids/lib/test_ids.rb:236:in `next_in_range'

当我传递选项时:

TestIds.next_in_range(bin_map[options[:bin]], options)

我收到此错误:

COMPLETE CALL STACK
-------------------
undefined method `map' for nil:NilClass
Did you mean?  tap
/users/user/origen/github/test_ids/lib/test_ids/allocator.rb:45:in `range_item'
/users/user/origen/github/test_ids/lib/test_ids/allocator.rb:32:in `next_in_range'

鉴于docs say this feature is in beta,我应该将其转移到Github问题吗?

THX

1 个答案:

答案 0 :(得分:1)

当使用块定义一个softbin时,你可以完全自由地在块中放入任何你想要的东西,所以在方程式中添加一个额外的Proc对我来说没有意义。

这里有两个可以组合的API,一个是定义函数来计算数字的能力:

config.softbins do |options|
  # Put any logic you like in here, return the number at the end
end

另一个API是让TestIds跟踪范围内的位置的能力:

TestIds.next_in_range((1000..2000))

您可以根据自己的意愿在块内使用或不使用。

你应该完全自由地定义你喜欢的规则:

config.softbins needs: bin do |options|
  if Time.now.tuesday?
    bin_map = { 5: (1..10), 11: (11..20) }
  else
    bin_map = { 6: (10..20), 12: (21..30) }
  end
  TestIds.next_in_range(bin_map[options[:bin]])
end

请注意,如果您在不同分支中引用相同的next_in_range,那么它们将使用相同的数字集合。

如果您希望它们各自在该范围内独立计数,那么您需要设置不同的配置,以便它们各自拥有自己的数据库:

if Time.now.tuesday?
  TestIds.configure :rule1 do |config|

  end
else
  TestIds.configure :rule2 do |config|

  end
end