pgtap/mincut/compare.test.sql test data is flawed
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
- #3104 de @prashsti29 — cerrado sin fusionar
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 65/100
Línea de trabajo
The issue is in the test file pgtap/mincut/compare.test.sql. First, examine the flawed test data for tests 5 and 6, understanding the graph structure and the Stoer-Wagner algorithm requirements. Review the pgr_stoerWagner function's implementation and the Boost library version impact. Create a valid test graph with non-negative costs and undirected edges, then update the test SQL with correct expected results. Run the TAP tests to verify the fix.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The two functionality tests in pgtap/mincut/compare.test.sql use graphs that are either vacuous or invalid, and the expected return values are not guaranteed.
This test case would benefit from being rewritten to use a graph designed for min-cut testing, but I am raising this issue because changes to Boost can cause it to fail.
To Reproduce
Compiling the test against Boost 1.80 or later (which uses a different implementation of Stoer-Wagner than earlier versions) causes failures.
Test 5
The graph for unit test "5: Mincut of edge 17" uses a graph with two nodes and one edge. Evaluating the inner query of the PREPARE stoerWagner6 statement (the one being passed to pgr_stoerWagner()) gives the following:
id | source | target | cost | reverse_cost
----+--------+--------+------+--------------
17 | 14 | 15 | 1 | 1
(1 row)
Obviously this is the exact same graph as generated by the simpler stoerWagner5 subquery; in both cases the mincut is trivially to cut the only existing edge, so the comparison of stoerWagner5 and stoerWagner6 tests only that pgr_stoerWagner generates the same output given the same input, which was probably not what was intended.
Test 6
The subquery being passed to pgr_stoerWagner7 for the test "6: Compare the mincut of subgraph with actual result" results in the following graph:
id | source | target | cost | reverse_cost
----+--------+--------+------+--------------
1 | 1 | 2 | 1 | 1
2 | 2 | 3 | -1 | 1
3 | 3 | 4 | -1 | 1
4 | 2 | 5 | 1 | 1
5 | 3 | 6 | 1 | -1
6 | 7 | 8 | 1 | 1
7 | 8 | 5 | 1 | 1
8 | 5 | 6 | 1 | 1
9 | 6 | 9 | 1 | 1
10 | 5 | 10 | 1 | 1
11 | 6 | 11 | 1 | -1
12 | 10 | 11 | 1 | -1
13 | 11 | 12 | 1 | -1
14 | 10 | 13 | 1 | 1
15 | 9 | 12 | 1 | 1
16 | 4 | 9 | 1 | 1
(16 rows)
And expects that the mincut result is to cut the single edge with id 1.
There are three flaws with this test:
- The Stoer-Wagner algorithm requires all edges have non-negative costs, but edges 2 and 3 violate this.
- The Stoer-Wagner algorithm requires an undirected graph, but edges 2, 3, 5, 11, 12, and 13 have different costs in different directions.
- There are four distinct edges of equal weight that, each on its own, can be removed to partition the graph: edges 1, 6, 7, and 14. (Notice that nodes 1, 7, and 13 only have a single connection to the graph, and node 8 lies between node 7 and the rest of the graph.)
The test query for 6 asserts that the algorithm will select edge 1, but 6, 7, and 14 are valid (and edge 14 is selected when built against more modern versions of Boost).
- Lenguaje dominante
- C++
- Estrellas
- 1.4k
- Forks
- 397
- Merge medio
- 2 d 2 h
- PR fusionados (30 d)
- 4
Preparar el entorno
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 pgRouting/pgrouting
-
Boost broken linksPosiblemente ocupada @Nandan-Raichura-Dev la tomó hace 1 día. AbiertoEnhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
pgRouting/pgrouting#3176 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Add details to CONTRIBUTING.mdAbiertoAdministrative Enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
Los mantenedores suelen responder en 2 días
-
points_input Developers docPosiblemente ocupada @withaman69 la tomó hace 85 días. AbiertoC/C++ Developers Doc. good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
pgRouting/pgrouting#973 · 10 comentarios ·
Los mantenedores suelen responder en 2 días
-
get_check_data developers docPosiblemente ocupada @withaman69 la tomó hace 87 días. AbiertoC/C++ Developers Doc. good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
pgRouting/pgrouting#972 · 7 comentarios ·
Los mantenedores suelen responder en 2 días
-
circuits Functionality Request
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Los mantenedores suelen responder en 2 días
Todos los issues de pgRouting/pgrouting
Issues similares
-
good first issue invalid
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
DanielJerolm/gpcc#74 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
patrick-hudson/put.gd-desktop#808 ·
Los mantenedores suelen responder en 1 día
-
DPI change is not fully handled in the cascading window on WindowsPosiblemente ocupada @yukawa la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 4 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
dasher-project/Dasher-GTK#97 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día