Method: Divine::BabelHelperMethods#sanity_check

Defined in:
lib/divine/code_generators/code_generator.rb

#sanity_check(ss) ⇒ Object

Sanity check the different revisions of the struct



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/divine/code_generators/code_generator.rb', line 96

def sanity_check(ss)
  vos = ss.sort do |x,y|
    v1,v2 = [x,y].map(&:version)
    v1 <=> v2
  end

  # Check version numbers
  unless vos.map(&:version).uniq.size == ss.size
    raise "Inconsistent version numbering for '#{ss.first.name}': #{vos.map(&:version).join(', ')}"
  end
  
  # Check that we don't have multiple variables with same name
  vos.each do |s|
    names = s.fields.group_by(&:name)
    names.each_pair do |k, v|
      raise "Multiple fields with same name '#{k}' is defined in '#{s.name}', version #{s.version}" unless v.size == 1
    end
  end
  
  # Check types between versions
  check_field_types(vos)
  
  # Check for changed definitions
  check_freezed_structs(vos)
  
  # Return them ordered by version
  vos
end