La primera solución propuesta - use "list" para convertir los rangos en listas - es ineficaz, ya que primero convertirá los objetos del rango en listas (potencialmente consumiendo mucha memoria, si los rangos son grandes), luego comparará cada elemento. Considere, por ejemplo, a = rango (1000000), el objeto "rango" en sí mismo es pequeño pero si lo coacciona a una lista se vuelve enorme. Entonces tienes que comparar un millón de elementos.
La respuesta (2) es aún menos eficiente, ya que assertItemsEqual no solo va a crear instancias de las listas, sino que las va a ordenar también antes de hacer la comparación de elementos.
En su lugar, ya que sabe que los objetos son rangos, son iguales cuando sus zancadas, los valores de inicio y final son iguales. P.ej.
ranges_equal = len(a)==len(b) and (len(a)==0 or a[0]==b[0] and a[-1]==b[-1])
¿Por qué estás comparando dos rangos? –
Mi unittest solo afirma que el rango fue construido correctamente. En el programa, en lugar de almacenar los valores mínimos y máximos aceptables, almaceno el rango y luego pruebo si val en el rango. – oneporter