Listar la igualdad de miembros en FsUnit

Quiero verificar que dos listas tengan los mismos miembros, independientemente del orden:

let memCount items = items |> Seq.countBy id |> Map.ofSeq
let memberEquals items1 items2 = memCount items1 = memCount items2

Actualmente, uso esto en una prueba de la siguiente manera:

memberEquals expected actual |> should be True

Sin embargo, esto no es tan agradable para el informe de errores.

¿Puedo extender FsUnit para agregar un memberEquals similar a equals or contains? Alternativamente, siempre podría ordenar las listas antes de compararlas. ¿Cuál es el mejor enfoque aquí?

(Estoy usando FsUnit con nUnit, por lo que vale).

preguntado el 12 de junio de 12 a las 19:06

Es en este tipo de escenarios no triviales donde verá que Unquote realmente comienza a brillar, simplemente porque el propio F# es excelente para expresar este tipo de afirmaciones. Ver gist.github.com/2919920. -

1 Respuestas

Tus memberEquals La función no comprueba si las listas tienen los mismos miembros (solo el mismo número de elementos). La forma más fácil de hacerlo es:

let memberEquals items1 items2 = (set items1 = set items2)

Si las listas pueden contener duplicados, deberá ordenarlas y compararlas como listas.

Puedes leer sobre el set funcionar en MSDN.

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.