-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMaîtreDTests.fs
More file actions
45 lines (36 loc) · 1.32 KB
/
MaîtreDTests.fs
File metadata and controls
45 lines (36 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module Ploeh.Samples.MaîtreDTests
open Ploeh.Samples.MaîtreD
open FsCheck
open FsCheck.Xunit
open Swensen.Unquote
module Tuple2 =
let curry f x y = f (x, y)
module Gen =
let reservation = gen {
let! PositiveInt quantity = Arb.generate
let! reservation = Arb.generate
return { reservation with Quantity = quantity } }
[<Property(QuietOnSuccess = true)>]
let ``tryAccept behaves correctly when it can accept``
(NonNegativeInt excessCapacity) =
Tuple2.curry id
<!> Gen.reservation
<*> Gen.listOf Gen.reservation
|> Arb.fromGen |> Prop.forAll <| fun (reservation, reservations) ->
let capacity =
excessCapacity
+ (reservations |> List.sumBy (fun x -> x.Quantity))
+ reservation.Quantity
let actual = tryAccept capacity reservations reservation
Some { reservation with IsAccepted = true } =! actual
[<Property(QuietOnSuccess = true)>]
let ``tryAccept behaves correctly when it can't accept``
(PositiveInt lackingCapacity) =
Tuple2.curry id
<!> Gen.reservation
<*> Gen.listOf Gen.reservation
|> Arb.fromGen |> Prop.forAll <| fun (reservation, reservations) ->
let capacity =
(reservations |> List.sumBy (fun x -> x.Quantity)) - lackingCapacity
let actual = tryAccept capacity reservations reservation
None =! actual