Persimmon.Dried


はじめに

Persimmon.Dried の概要、ダウンロードや使い方について。

Persimmon.Dried の入手

以下のコマンドを実行しましょう。

1: 
.\.nuget\NuGet.exe Install Persimmon.Dried -OutputDirectory tools -ExcludeVersion

はじめの一歩

fsx ファイルを開き、次のように始めます。

1: 
2: 
3: 
4: 
5: 
#r "Persimmon"
#r "Persimmon.Dried"

open Persimmon
open Persimmon.Dried

Prop.forAll 関数、 Arbitrary インスタンス、関数を使って性質を書けます。

1: 
2: 
3: 
let ``reverse and reverse is original`` = Prop.forAll (Arb.list Arb.int) (fun xs ->
  List.rev (List.rev xs) = xs
)

性質の確認

F# インタラクティブ上にこの定義をロードして、起動してみましょう。

1: 
let prms = { Runner.Parameters.Default with Callback = Runner.createConsoleReporter 1 }
1: 
Runner.run "" prms ``reverse and reverse is original``
No output has been produced.

性質が失敗したとき、 Persimmon.Dried は判例を表示します。 例えば,

1: 
2: 
3: 
let ``failure example`` = Prop.forAll (Arb.list Arb.int) (fun xs ->
  List.rev xs = xs
)

を定義し、性質を確認してみましょう。

1: 
Runner.run "" prms ``failure example``
No output has been produced.

Persimmon.Console を使って性質を確認する

プロジェクトを作成し、property コンピュテーション式を使ってテストを書きます。

1: 
2: 
3: 
4: 
5: 
open FsRandom

let ``binding example`` = property "binding example" {
  apply ``reverse and reverse is original``
}

以下のコマンドを実行しましょう。

1: 
2: 
.\.nuget\NuGet.exe Install Persimmon.Console -OutputDirectory packages -ExcludeVersion
.\packages\Persimmon.Console\tools\Persimmon.Console.exe 'input file path'
val ( reverse and reverse is original ) : obj

Full name: GettingStarted.( reverse and reverse is original )
type 'T list = List<'T>

Full name: Microsoft.FSharp.Collections.list<_>
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
Multiple items
module List

from Microsoft.FSharp.Collections

--------------------
val prms : obj

Full name: GettingStarted.prms
val ( failure example ) : obj

Full name: GettingStarted.( failure example )
val ( binding example ) : obj

Full name: GettingStarted.( binding example )
Fork me on GitHub