如何验证一组键值对中的值?
[<Test>]
let ``player has connected row`` () =
let grid = [ for i in 0..8 -> (i, true) ] |> Map.ofSeq
let rows = grid |> Seq.chunkBySize 3 |> Seq.toList
rows.Head.[0..] ** verify all values from list is true** |> should equal true
|&GT; Seq.toList
如何确认行中键值对的所有值都设置为true?
如何为所有行验证此内容?
注:
我是F#的新手所以请原谅我的无知。
答案 0 :(得分:2)
一种选择是使用Seq.forall
功能:
rows.Head |> Seq.forall (fun kvp -> kvp.Value) |> should equal true
这里,如果指定的条件适用于序列中的所有输入,forall
将返回true
(在条件中,我们只返回布尔值)。要对所有行执行此操作,您可以再次使用Seq.forall
:
rows |> Seq.forall (fun row ->
row |> Seq.forall (fun kvp -> kvp.Value)) |> should equal true
这不再需要将输入转换为列表,因为它只使用Seq
函数。
您还可以使用普通的for
循环并单独检查值:
for row in rows do
for kvp in row do
kvp.Value |> should equal true
我想这可能不会让测试纯粹主义者感到高兴,因为我们正在检查F#代码,而不是将其指定为单个声明性断言。虽然我不确定是否有更好的方法可以做到这一点,我可能会使用for
循环来编写它。