2016-10-31 2 views
1

Ich bin in einem seltsamen Problem mit Scalacheck 1.13.3 ausgeführt: beliebige Instanzen von A => java.util.Date generieren verschiedene Werte abhängig von der Zeit sie aufgerufen werden.Generieren beliebige A => Datum mit scalacheck

Hier ist ein Beton, reproduzierbares Beispiel:

import org.scalatest.FunSuite 
import org.scalatest.prop.GeneratorDrivenPropertyChecks 
import java.util.Date 
import org.scalacheck._ 

class Repr extends FunSuite with GeneratorDrivenPropertyChecks { 
    implicit val cogenDate: Cogen[Date] = Cogen(_.getTime) 

    test("reproduce") { 
    forAll { (s: String, g: String => Date) => 
     val d1 = g(s) 
     Thread.sleep(100) 
     val d2 = g(s) 

     assert(d1 === d2) 
    } 
    } 
} 

Dies schlägt fehl. Das Drucken der tatsächlichen Werte von d1 und d2 zeigt, dass die Daten tatsächlich unterschiedlich sind, mit einem Unterschied zwischen 100 und 103 ms. Ich würde vermuten, dass das Problem von meiner Cogen Instanz kommt, aber ich muss zugeben, ich verstehe nicht warum

+1

Wonach fragen Sie? Sie erzeugen zwei Zeitstempel im Abstand von 100 Millisekunden, und die Ergebnisse liegen im Abstand von 100 Millisekunden? Möglicherweise müssen Sie die Gleichheit neu definieren, so dass zwei Werte innerhalb Ihres Epsilons gleich sind. –

+0

@BobDalgleish Ich könnte den Punkt komplett vermissen, aber ich dachte, ich würde eine reine Funktion erzeugen, die für einen gegebenen 'String' immer den gleichen' Date' Wert erzeugen würde. Dies ist, was ich gerade teste - indem ich 'g', ein beliebiges reines' String => Date', auf dem gleichen String-Wert zu verschiedenen Zeiten aufrufe, erzeugen Sie unterschiedliche Werte. –

Antwort

2

Dies stellt eine Regression in scalacheck 1.13.3 dar, wie im gitter-Kanal des Projekts diskutiert. Ein issue wurde geöffnet.

Verwandte Themen