J'ai commencé à utiliser FsUnit pour tester le code F #. Il permet d'exprimer l'affirmation dans le style F #, par exemple:FsUnit et vérification de l'égalité des nombres à virgule flottante
[<Test>]
member this.``Portugal voted for 23 countries in 2001 Eurovision contest``() =
this.totalVotes
|> getYearVotesFromCountry "Portugal" 2001
|> Seq.length
|> should equal 23
Note « doit être égale à 23 » que je reçois de FsUnit. Voici comment FsUnit définit:
x = laisser égale nouvelle EqualConstraint (x)
Avec nombres à virgule flottante, il est pas aussi simple que cela. Je dois utiliser EqualConstraint avec la méthode Within. Il convient naturellement C#:
Assert.That(result).Is.EqualTo(1).Within(0.05);
Bien sûr, je voudrais pouvoir écrire en F #:
result |> should equal 1 within 0.05
Mais cela ne fonctionne pas. J'ai fini par la définition d'une nouvelle fonction:
let almostEqual x = (new EqualConstraint(x)).Within(0.01)
ou si je veux précision paramétrisation, je peux spécifier comme second argument:
let equalWithin x y = (new EqualConstraint(x)).Within(y)
Mais aucun d'entre eux sont assez. Je voudrais définir la fonction "within" d'une manière plus naturelle pour F #, donc elle peut être utilisée avec equal. F # ne supporte pas la surcharge de méthode, donc il semble que je ne puisse pas le définir de telle manière que "equal" puisse être utilisé seul ou avec "within".
Des idées?
Wow! C'est vraiment besoin en effet!Merci pour une autre excellente suggestion. Et celui-ci est également basé sur des opérateurs personnalisés. –