diff --git a/NightLight.Core.Tests/InteractionListGenerators.fs b/NightLight.Core.Tests/InteractionListGenerators.fs index b7810c3..d91defb 100644 --- a/NightLight.Core.Tests/InteractionListGenerators.fs +++ b/NightLight.Core.Tests/InteractionListGenerators.fs @@ -2,10 +2,33 @@ module NightLight.Core.Tests.InteractionListGenerators open System open NightLight.Core.Models +open NightLight.Core.Tests.InteractionListHelpers open FsCheck.FSharp let private genTimeChanged = - ArbMap.defaults |> ArbMap.generate |> Gen.map Interaction.TimeChanged + let genDate = ArbMap.defaults |> ArbMap.generate |> Gen.map _.Date + + let genTimeSpanBetween (l: TimeSpan) (h: TimeSpan) = + Gen.choose (int l.TotalSeconds, int h.TotalSeconds) + |> Gen.map int64 + |> Gen.map TimeSpan.FromSeconds + + let (+) = Gen.map2 (+) + + let genDayBoundaryDateTime = + genDate + + Gen.elements [ startOfDay; endOfDay ] + + genTimeSpanBetween (-TimeSpan.FromMinutes 20.0) (TimeSpan.FromMinutes 20.0) + + let genStartOfDayDateTime = + genDate + + Gen.constant startOfDay + + genTimeSpanBetween TimeSpan.Zero (TimeSpan.FromMinutes 20.0) + + let genAnyDateTime = ArbMap.defaults |> ArbMap.generate + + Gen.frequency [ 4, genStartOfDayDateTime; 2, genDayBoundaryDateTime; 1, genAnyDateTime ] + |> Gen.map Interaction.TimeChanged let private genHumanInteraction = Gen.elements lights diff --git a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj index 7ec25a6..a4cdd8c 100644 --- a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj +++ b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj @@ -9,8 +9,8 @@ - + diff --git a/NightLight.Core.Tests/NightLightTests.fs b/NightLight.Core.Tests/NightLightTests.fs index 4bc386f..1dfc2ea 100644 --- a/NightLight.Core.Tests/NightLightTests.fs +++ b/NightLight.Core.Tests/NightLightTests.fs @@ -41,8 +41,7 @@ type NightLightTests() = |> Prop.label fakeHome.Label |> Prop.trivial (fakeHome.LightsThatAreOn.Length = 0) - // TODO: Bias generator for alarm cases so that `MaxTest` can be reduced - [ |], MaxTest = 10_000)>] + [ |])>] let ``All lights should either be off or have a brightness that fits its color`` (interactions: Interaction list) = let fakeHome = createFakeHomeWithNightLightAndInteract interactions let time = getTimeAfterInteractions interactions |> _.TimeOfDay