Sha256: 9b779bcac87d88678e664455bbefe93f3ce26156acc91deca4d553815b10d823

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

module Bench
  module Utils
    include Logging
    
    def sort_natural_order(nocase=false)
      proc do |str|
        i = true
        str = str.upcase if nocase
        str.gsub(/\s+/, '').split(/(\d+)/).map {|x| (i = !i) ? x.to_i : x}
      end
    end
    
    def compare(name1,s1,name2,s2)
      r1 = diff([],name1,s1,name2,s2)
      r2 = diff([],name2,s2,name1,s1)
      r1.size > r2.size ? r1 : r2
    end
    
    def diff(res,lname,lvalue,rname,rvalue,path=[])

      return res if lvalue == rvalue
      
      if lvalue.is_a?(Array) and rvalue
        lvalue.each_index do |index| 
          p = Array.new(path)
          p << index
          diff(res,lname,lvalue[index],rname,rvalue.at(index),p)
        end                
      elsif lvalue.is_a?(Hash) and rvalue
        lvalue.each do |key,value| 
          p = Array.new(path)
          p << key
          diff(res,lname,value,rname,rvalue[key],p)
        end
      else            
        res << {:path=>path,lname=>lvalue,rname=>rvalue}
      end
      
      res 
    end
    
    def compare_and_log(expected,actual,caller)
      if expected != actual
        bench_log "#{log_prefix} Verify error at: " + caller
        bench_log "#{log_prefix} Message diff: "
        compare(:expected,expected,:actual,actual).each do |diff|
          bench_log "#{log_prefix} Path: #{diff[:path].join('/')}"
          bench_log "#{log_prefix} Expected: #{diff[:expected].inspect}"
          bench_log "#{log_prefix} Actual: #{diff[:actual].inspect}"
        end
        1
      else
        0
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rhoconnect-3.0.6 bench/lib/bench/utils.rb