我想检查两个列表是否具有相同的成员,无论顺序如何:
let memCount items = items |> Seq.countBy id |> Map.ofSeq
let memberEquals items1 items2 = memCount items1 = memCount items2
目前,我在测试中使用它如下:
memberEquals expected actual |> should be True
然而,这对于错误报告来说并不是那么好。
我可以扩展FsUnit以添加与memberEquals
或equals
类似的contains
吗?或者,我可以在比较它们之前总是对列表进行排序。这里最好的方法是什么?
(我正在使用带有nUnit的FsUnit,因为它的价值。)
答案 0 :(得分:4)
您的memberEquals
函数不会测试列表是否具有相同的成员(只有相同数量的项目)。最简单的方法是:
let memberEquals items1 items2 = (set items1 = set items2)
如果列表可能包含重复项,则需要对其进行排序并将其作为列表进行比较。
†您可以在MSDN上了解set
功能。