2015-04-29 17 views
8

Şamandıralar veya şamandıralar (vektörler veya matrisler gibi) içeren nesneler için testler yazarken, çoğunlukla eşitlik için değil, "neredeyse eşit" için test yapmak istiyorum. (fark bazı epsilon olmasına izin verdi).ScalaTest - şamandıralar ve şamandıralar içeren nesneler için "hemen hemen eşit" olup olmadığını kontrol edin

ScalaTest FunSuite kullanırken, normalde assert(xxx == yyy) yazıyor. Şamandıralar ve beğenilerle assert(math.abs(xxx - yyy)<epsilon) yazabilirim, ancak ScalaTest assert macro'un güzel özelliğini, hata mesajının bir parçası olarak karşılaştırılan değerleri bildirmiyorum.

ScalaTest'te float "neredeyse eşitlik" testini nasıl gerçekleştirebilirim, böylece test başarısız olduğunda değerler hata mesajının bir parçası olarak yazılır?

Testi örnek: Bu TolerantNumerics kullanarak ve == yerine === kullanılarak yapılabilir

import org.scalatest.FunSuite 

class FloatTest extends FunSuite { 
    test("Testing computations") { 
    import math._ 
    assert(sin(Pi/4)==sqrt(0.5)) 
    assert(sin(Pi)==0) 
    } 
} 
+0

[http://stackoverflow.com/questions/27213930/scalatest-testing-equality-between-two-floating-point-arrays-with-error-margin](http://stackoverflow.com/questions/27213930/scalatest-test-eşitlik-iki-kayan noktalı-dizi-hata-ile-hata-marjı) – user2829759

+0

Ben bu bir çoğaltılmış ve ben bu şekilde işaretlenmiş olmasına rağmen, ancak ikinci okumada hedef soru ile ilgili, ama farklı Bu, beklenmedik bir şekilde geçen çift testlerle ilgilidir, onları nasıl geçtikleri ile ilgili değildir. – Suma

cevap

13

.

import org.scalactic.TolerantNumerics 
import org.scalatest.FunSuite 

class FloatTest extends FunSuite { 

    val epsilon = 1e-4f 

    implicit val doubleEq = TolerantNumerics.tolerantDoubleEquality(epsilon) 

    test("Testing computations") { 
    import math._ 
    assert(sin(Pi/4) === sqrt(0.5)) 
    assert(sin(Pi) === 0.0) 
    } 
} 

Kendi türleri için Equality[T] kendi alt sınıflarını tanımlayabilirsiniz.

İlgili konular