37 lines
1.3 KiB
FSharp
37 lines
1.3 KiB
FSharp
module NightLight.Core.Tests.InteractionListGenerators
|
|
|
|
open FsCheck.FSharp
|
|
open NightLight.Core.Models
|
|
open NightLight.Core.Tests.GenHelpers
|
|
open NightLight.Core.Tests.TimeChangedGenerators
|
|
|
|
let private genHumanInteraction =
|
|
let genLightInteraction =
|
|
Gen.elements lights
|
|
|> Gen.bind (fun light -> Gen.elements [ LightPoweredOn light; LightPoweredOff light ])
|
|
|
|
let genRemoteInteraction =
|
|
Gen.elements [ RemotePressedOnButton; RemotePressedOffButton ]
|
|
|
|
Gen.oneof [ genLightInteraction; genRemoteInteraction ]
|
|
|> Gen.map Interaction.HumanInteraction
|
|
|
|
let private genInteraction = Gen.oneof [ genTimeChanged; genHumanInteraction ]
|
|
|
|
let private genInteractionsListThatStartsWithTimeChanged =
|
|
[ genTimeChanged |> Gen.map List.singleton; Gen.listOf genInteraction ]
|
|
|> concatGens
|
|
|
|
let genInteractionListThatStartsWithTimeChangedAndEndsWith (endsWith: Interaction) =
|
|
let genNonTrivialList =
|
|
genInteractionsListThatStartsWithTimeChanged
|
|
|> Gen.map (fun lst -> lst @ [ endsWith ])
|
|
|
|
match endsWith with
|
|
| Interaction.TimeChanged _ ->
|
|
let genTrivialList = Gen.constant <| List.singleton endsWith
|
|
Gen.frequency [ 1, genTrivialList; 9, genNonTrivialList ]
|
|
| _ -> genNonTrivialList
|
|
|
|
let genInteractionListExcept disqualifier =
|
|
genInteraction |> Gen.filter (not << disqualifier) |> Gen.listOf
|