json_merge fails on nonempty objects and returns an array for two empty objects
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 85/100
Línea de trabajo
Comienza por lib/json.eigs:41–51 y el comportamiento de json_decode cubierto en tests/test_json_hard.eigs. Ejecuta las dos reproducciones mediante src/eigenscript y añade cobertura para objetos disjuntos, en conflicto y vacíos. Se considera terminado cuando json_merge devuelve un objeto plano decodificado, la segunda entrada gana los conflictos y todos los casos enumerados pasan.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
json.json_merge fails on ordinary nonempty JSON objects. When both inputs are empty objects, it silently returns the wrong JSON type: an array.
Reproduce
src/eigenscript -e 'import json
print of (json.json_merge of ["{\"a\":1}", "{\"b\":2}"])'
Actual: exit 1, Error line 48: cannot index dict, at append of [merged, obj_a[i]].
Expected: a JSON object containing a: 1 and b: 2.
The empty-input case also fails the contract:
src/eigenscript -e 'import json
print of (json.json_merge of ["{}", "{}"])'
Actual: [] (exit 0). Expected: {}.
Cause and coverage
lib/json.eigs:41–51 documents an object merge in which the second object overwrites matching keys, but initializes merged as a list and integer-indexes the decoded objects. json_decode returns dictionaries for objects; that behavior is already tested. The library API promises to merge two objects.
No existing test calls the library's json_merge. Add coverage for disjoint keys, conflicting keys with the second input winning, either side empty, and both sides empty. Compare decoded objects so serialization whitespace or key ordering is not the oracle. Deep-merge semantics are outside this defect; the implementation explicitly promises a flat merge.
Confirmed with a fresh default release build of b91768e23c5a874a64e76e4af9ab291e6aa49983, with inherited EIGS_* variables removed.
- Lenguaje dominante
- C
- Estrellas
- 3
- Forks
- 7
- Merge medio
- 4 h 5 min
- PR fusionados (30 d)
- 116
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
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 InauguralSystems/EigenScript
-
area:docs good first issue kind:docs-drift
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
InauguralSystems/EigenScript#1400 ·
Los mantenedores suelen responder en 1 día
-
area:docs good first issue kind:docs-drift
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
InauguralSystems/EigenScript#1396 ·
Los mantenedores suelen responder en 1 día
-
docs/BUILTINS.md: task_spawn row says task_yield/task_join 'land in a later increment'; both existAbiertoarea:docs good first issue kind:docs-drift
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
InauguralSystems/EigenScript#1392 ·
Los mantenedores suelen responder en 1 día
-
area:embed kind:silent-wrong
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
InauguralSystems/EigenScript#1387 ·
Los mantenedores suelen responder en 1 día
-
area:stdlib kind:silent-wrong
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
InauguralSystems/EigenScript#1378 ·
Los mantenedores suelen responder en 1 día
Todos los issues de InauguralSystems/EigenScript
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
trezor/trezor-firmware#7997 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
area/ysql kind/bug priority/medium status/awaiting-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
yugabyte/yugabyte-db#34415 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 78/100
KhronosGroup/OpenCL-Headers#318 ·
-
Build failure: mumbleAbierto0.kind: build failure
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
Los mantenedores suelen responder en 1 día