Class: OrigenTesters::SmartestBasedTester::Base::TestSuite

Inherits:
Object
  • Object
show all
Defined in:
lib/origen_testers/smartest_based_tester/base/test_suite.rb

Direct Known Subclasses

V93K::TestSuite

Constant Summary collapse

ATTRS =
%w(name
   comment

   timing_equation timing_spec timing_set
   level_equation level_spec level_set
   analog_set
   pattern
   context
   test_type
   test_method

   test_number
   test_level

   bypass
   set_pass
   set_fail
   hold
   hold_on_fail
   output_on_pass
   output_on_fail
   pass_value
   fail_value
   per_pin_on_pass
   per_pin_on_fail
   log_mixed_signal_waveform
   fail_per_label
   ffc_enable
   log_first
   ffv_enable
   frg_enable
   hardware_dsp_disable
)
ALIASES =
{
  tim_equ_set:     :timing_equation,
  tim_spec_set:    :timing_spec,
  timset:          :timing_set,
  timeset:         :timing_set,
  time_set:        :timing_set,
  lev_equ_set:     :level_equation,
  lev_spec_set:    :level_spec,
  levset:          :level_set,
  levels:          :level_set,
  pin_levels:      :level_set,
  anaset:          :analog_set,
  test_num:        :test_number,
  test_function:   :test_method,
  value_on_pass:   :pass_value,
  value_on_fail:   :fail_value,
  seqlbl:          :pattern,
  mx_waves_enable: :log_mixed_signal_waveform,
  hw_dsp_disable:  :hardware_dsp_disable,
  ffc_on_fail:     :log_first
}
DEFAULTS =
{
  output_on_pass:  true,
  output_on_fail:  true,
  pass_value:      true,
  fail_value:      true,
  per_pin_on_pass: true,
  per_pin_on_fail: true
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, attrs = {}) ⇒ TestSuite

Returns a new instance of TestSuite.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 88

def initialize(name, attrs = {})
  @name = name
  if interface.unique_test_names == :signature
    if interface.flow.sig
      @name = "#{name}_#{interface.flow.sig}"
    end
  elsif interface.unique_test_names == :flowname || interface.unique_test_names == :flow_name
    @name = "#{name}_#{interface.flow.name.to_s.symbolize}"
  elsif interface.unique_test_names == :preflowname || interface.unique_test_names == :pre_flow_name
    @name = "#{interface.flow.name.to_s.symbolize}_#{name}"
  elsif interface.unique_test_names
    utn_string = interface.unique_test_names.to_s
    if utn_string =~ /^prepend_/
      utn_string = utn_string.gsub(/^prepend_/, '')
      @name = "#{utn_string}_#{name}"
    else
      utn_string = utn_string.gsub(/^append_/, '')
      @name = "#{name}_#{utn_string}"
    end
  end
  # Set the defaults
  DEFAULTS.each do |k, v|
    send("#{k}=", v)
  end
  # Then the values that have been supplied
  attrs.each do |k, v|
    send("#{k}=", v) if respond_to?("#{k}=") && k.to_sym != :name
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



154
155
156
157
158
159
160
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 154

def method_missing(method, *args, &block)
  if test_method && test_method.respond_to?(method)
    test_method.send(method, *args, &block)
  else
    super
  end
end

Instance Attribute Details

#metaObject

Returns the value of attribute meta.



5
6
7
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 5

def meta
  @meta
end

Instance Method Details

#inspectObject



123
124
125
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 123

def inspect
  "<TestSuite: #{name}>"
end

#interfaceObject



166
167
168
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 166

def interface
  Origen.interface
end

#linesObject



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 132

def lines
  l = []
  l << "  comment = \"#{comment}\";" if comment
  l << "  ffc_on_fail = #{wrap_if_string(log_first)};" if log_first
  l << "  local_flags = #{flags};"
  l << '  override = 1;'
  l << "  override_anaset = #{wrap_if_string(analog_set)};" if analog_set
  l << "  override_lev_equ_set = #{wrap_if_string(level_equation)};" if level_equation
  l << "  override_lev_spec_set = #{wrap_if_string(level_spec)};" if level_spec
  l << "  override_levset = #{wrap_if_string(level_set)};" if level_set
  l << "  override_seqlbl = #{wrap_if_string(pattern)};" if pattern
  l << "  override_test_number = #{test_number};" if test_number
  l << "  override_testf = #{test_method.id};" if test_method
  l << "  override_tim_equ_set = #{wrap_if_string(timing_equation)};" if timing_equation
  l << "  override_tim_spec_set = #{wrap_if_string(timing_spec)};" if timing_spec
  l << "  override_timset = #{wrap_if_string(timing_set)};" if timing_set
  l << '  site_control = "parallel:";'
  l << '  site_match = 2;'
  l << "  test_level = #{test_level};" if test_level
  l
end

#name=(val, options = {}) ⇒ Object

The name is immutable once the test_suite is created, this will raise an error when called



128
129
130
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 128

def name=(val, options = {})
  fail 'Once assigned the name of a test suite cannot be changed!'
end

#pattern=(name) ⇒ Object



118
119
120
121
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 118

def pattern=(name)
  Origen.interface.record_pattern_reference(name) if name
  @pattern = name
end

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 162

def respond_to?(method)
  (test_method && test_method.respond_to?(method)) || super
end

#to_metaObject



170
171
172
# File 'lib/origen_testers/smartest_based_tester/base/test_suite.rb', line 170

def to_meta
  meta || {}
end