pgtap/mincut/compare.test.sql test data is flawed
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
- #3104 di @prashsti29 — chiusa senza merge
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 65/100
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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).
- Lingua principale
- C++
- Stelle
- 1.4k
- Fork
- 397
- Merge medio
- 2g 2h
- PR unite (30g)
- 4
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pgRouting/pgrouting
-
Boost broken linksForse già presa @Nandan-Raichura-Dev l’ha presa 1 giorno fa. ApertaEnhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
pgRouting/pgrouting#3176 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Administrative Enhancement
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
I maintainer di solito rispondono entro 2 giorni
-
points_input Developers docForse già presa @withaman69 l’ha presa 86 giorni fa. ApertaC/C++ Developers Doc. good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
pgRouting/pgrouting#973 · 10 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
get_check_data developers docForse già presa @withaman69 l’ha presa 88 giorni fa. ApertaC/C++ Developers Doc. good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
pgRouting/pgrouting#972 · 7 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
circuits Functionality Request
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di pgRouting/pgrouting
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
elf-alchemist/elfbsp#113 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
patrick-hudson/put.gd-desktop#979 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Dao-AILab/flash-attention#3097 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
Niko1221/Strata#4779 · 2 commenti ·
I maintainer di solito rispondono entro 3 giorni
-
tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
prestonbrown/helixscreen#1990 ·
I maintainer di solito rispondono entro 1 giorno