Files
raft-fable/Raft.Test/NetworkAction.fs
patrick f46557926e
All checks were successful
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/all-checks-complete Pipeline was successful
Modernise CI (#5)
Co-authored-by: Smaug123 <3138005+Smaug123@users.noreply.github.com>
Reviewed-on: #5
2025-09-09 08:18:41 +00:00

35 lines
1.5 KiB
Forth

namespace Raft.Test
open FsCheck
open FsCheck.FSharp
open Raft
[<RequireQualifiedAccess>]
module NetworkAction =
let generate<'a> (clusterSize : int) : Gen<NetworkAction<'a>> =
gen {
let! choice = ArbMap.defaults |> ArbMap.generate<NetworkAction<'a>>
let! server = Gen.choose (0, clusterSize - 1)
let server = server * 1<ServerId>
match choice with
| NetworkAction.InactivityTimeout _ -> return NetworkAction.InactivityTimeout server
| NetworkAction.NetworkMessage (_, message) -> return NetworkAction.NetworkMessage (server, abs message)
| NetworkAction.DropMessage (_, message) -> return NetworkAction.DropMessage (server, abs message)
| NetworkAction.Heartbeat _ -> return NetworkAction.Heartbeat server
| NetworkAction.ClientRequest (_, ClientRequest.ClientRequest (client, sequence, data, func)) ->
return
NetworkAction.ClientRequest (server, ClientRequest.ClientRequest (client, sequence, data, ignore))
| NetworkAction.ClientRequest (_, ClientRequest.RegisterClient _) ->
return NetworkAction.ClientRequest (server, ClientRequest.RegisterClient ignore)
}
let rec genNoClientRequests<'a> (clusterSize : int) : Gen<NetworkAction<'a>> =
generate clusterSize
|> Gen.filter (fun action ->
match action with
| NetworkAction.ClientRequest _ -> false
| _ -> true
)