2011-07-28 13 views
11

Hay un método que resultan Quiero comprobar:problema de redondeo con las pruebas rspec al comparar las matrices de flotación

result.should == [1.0,2.0,3.0] 

pero me da un error:

expected: [1.0, 2.0, 3.0] 
     got: [1.0, 2.0, 3.0] (using ==) 

Creo que el problema de redondeo, pero no sé cómo compararlos, por ejemplo con una desviación de 0.1.

Gracias, apneadiving. escribí mi propia matcher, si ayudar a alguien:

RSpec::Matchers.define :be_closed_array do |expected, truth| 
    match do |actual| 
    same = 0 
    for i in 0..actual.length-1 
     same +=1 if actual[i].round(truth) == expected[i].round(truth) 
    end 
    same == actual.length 
    end 

    failure_message_for_should do |actual| 
    "expected that #{actual} would be close to #{expected}" 
    end 

    failure_message_for_should_not do |actual| 
    "expected that #{actual} would not be close to #{expected}" 
    end 

    description do 
    "be a close to #{expected}" 
    end 
end 

Respuesta

13

Uso:

.should be_close 

O incluso:

.should be_within 

Ref aquí http://rubydoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers

+0

Gracias, sé de estos métodos, pero no sé cómo aplicarlos a la matriz. ¿He iterado cada valor? Debido a que esta línea result.should be_close ([1.0,2.0,3.0], 0.1), no funciona. – zolter

+1

Mmmm ... No sé. Es mejor que crees tu propio marcador, es bastante directo – apneadiving

+1

Dado que RSpec 3 solo se implementa 'be_within': http://www.rubydoc.info/gems/rspec-expectations/3.1.0/RSpec/Matchers#be_within-instance_method vs http://www.rubydoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers#be_close-instance_method – Raf

Cuestiones relacionadas