overlaps for Data.Vector.Mutable behaves oddly for empty vectors
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
Línea de trabajo
Comienza con la implementación de basicOverlaps para Data.Vector.Mutable que se muestra en el issue. Primero establece y documenta la semántica prevista de los solapamientos para vectores vacíos, incluidos los offsets compartidos y los offsets dentro de vectores no vacíos. Después, alinea la implementación con esa especificación y añade cobertura para los casos tratados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
The basicOverlaps implementation for Data.Vector.Mutable is:
basicOverlaps (MVector i m arr1) (MVector j n arr2)
= sameMutableArray arr1 arr2
&& (between i j (j+n) || between j i (i+m))
where
between x y z = x >= y && x < z
This will return True for two vectors where two vectors share the same mutable array and offset, but one has a zero length and the other has a non-zero length. I cannot find a precise definition of what it means for possibly-empty vectors to overlap, so it's hard to say for sure this is wrong, but it certainly disagrees with my understanding of what overlaps ought to mean.
I suggest this implementation instead:
basicOverlaps (MVector i m arr1) (MVector j n arr2)
= sameMutableArray arr1 arr2 && i < j + n && j < i + m
That will still report an overlap for an empty vector with an offset in the middle of a containing non-empty vector, though. It's even less clear what the right answer is there. So I guess what we really need is a precise specification first, and then we can write an implementation that matches it.
- Lenguaje dominante
- Haskell
- Estrellas
- 404
- Forks
- 146
- Merge medio
- 1 d 22 h
- PR fusionados (30 d)
- 3
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de haskell/vector
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 50/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
-
`Size` can be a newtype.Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
Todos los issues de haskell/vector
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
compiler-explorer/compiler-explorer#9272 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
alunduil/siren-json.hs#247 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
alunduil/network-arbitrary#196 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
alunduil/collection-json.hs#402 ·
Los mantenedores suelen responder en 1 día
-
`--margin` still counts code points when it measures the last line of a call in `Margin.hs`Posiblemente ocupada @sherenkov la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
objectionary/phino#1871 · 2 comentarios ·
Los mantenedores suelen responder en 1 día