Skip to content

TarjanTest.test_4 failed #408

@edogawashinichi

Description

@edogawashinichi

Describe the bug
Unit Test 1 FAILED TEST
[ RUN ] TarjanTest.test_4
/mnt/CXXGraph/test/TarjanTest.cpp:185: Failure
Expected equality of these values:
res.verticeBiconnectedComps.size()
Which is: 6
expectRes.size()
Which is: 7

[ FAILED ] TarjanTest.test_4 (0 ms)

To Reproduce
in my environment(CentOS in Docker on macOS), I modified
zlib version from 1.2.13 to 1.2.12 for cmake
in order to pass cmake&&make.
I tried TarjanTest.test_4 on master commit 994e9b9, v3.1.0, v3.0.0,
which all have the same problem.

Expected behavior
expectRes.size()
Which is: 7
Screenshots
image
image

Desktop (please complete the following information):

  • OS: macOS Sonoma 14.4, Docker 25.0.3, CentOS 7.9.2009
  • cmake: 3.23.0
  • gcc: 7.3.1

Additional context
I'm not sure whether it's a bug or just something to do with my environment.
The following is my debug information:

[ RUN ] TarjanTest.test_4
[debug]start tarjan
[debug]notDirected
[debug]start dfs_helper
[debug]curnode=1 timestamp=0
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 2 (curnode: 1)
[debug]if neinode notdisc dfs_helper start: 2
[debug]start dfs_helper
[debug]curnode=2 timestamp=1
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 5 (curnode: 2)
[debug]if neinode notdisc dfs_helper start: 5
[debug]start dfs_helper
[debug]curnode=5 timestamp=2
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 2 (curnode: 5)
[debug]else skip
[debug]for neinode: 6 (curnode: 5)
[debug]if neinode notdisc dfs_helper start: 6
[debug]start dfs_helper
[debug]curnode=6 timestamp=3
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 5 (curnode: 6)
[debug]else skip
[debug]for neinode: 7 (curnode: 6)
[debug]if neinode notdisc dfs_helper start: 7
[debug]start dfs_helper
[debug]curnode=7 timestamp=4
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 11 (curnode: 7)
[debug]if neinode notdisc dfs_helper start: 11
[debug]start dfs_helper
[debug]curnode=11 timestamp=5
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 7 (curnode: 11)
[debug]else skip
[debug]for neinode: 10 (curnode: 11)
[debug]if neinode notdisc dfs_helper start: 10
[debug]start dfs_helper
[debug]curnode=10 timestamp=6
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 9 (curnode: 10)
[debug]if neinode notdisc dfs_helper start: 9
[debug]start dfs_helper
[debug]curnode=9 timestamp=7
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 10 (curnode: 9)
[debug]else skip
[debug]for neinode: 8 (curnode: 9)
[debug]if neinode notdisc dfs_helper start: 8
[debug]start dfs_helper
[debug]curnode=8 timestamp=8
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 14 (curnode: 8)
[debug]if neinode notdisc dfs_helper start: 14
[debug]start dfs_helper
[debug]curnode=14 timestamp=9
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 13 (curnode: 14)
[debug]if neinode notdisc dfs_helper start: 13
[debug]start dfs_helper
[debug]curnode=13 timestamp=10
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 15 (curnode: 13)
[debug]if neinode notdisc dfs_helper start: 15
[debug]start dfs_helper
[debug]curnode=15 timestamp=11
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 13 (curnode: 15)
[debug]else skip
[debug]for neinode: 8 (curnode: 15)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 15/11
[debug]neilow: 8/8
[debug]curlow=min: 15/8
[debug]finish dfs_helper: 15
[debug]if neinode notdisc dfs_helper finish: 15/8
[debug]for tmpcurlow: 13/11
[debug]for curlow=min: 13/8
[debug]if find vbcc
[debug]curdisc: 13/10
[debug]neilow: 15/8
[debug]else curnode not cutv and rootnode: 13
[debug]for neinode: 14 (curnode: 13)
[debug]else skip
[debug]for neinode: 12 (curnode: 13)
[debug]if neinode notdisc dfs_helper start: 12
[debug]start dfs_helper
[debug]curnode=12 timestamp=12
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 13 (curnode: 12)
[debug]else skip
[debug]for neinode: 8 (curnode: 12)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 12/12
[debug]neilow: 8/8
[debug]curlow=min: 12/8
[debug]finish dfs_helper: 12
[debug]if neinode notdisc dfs_helper finish: 12/8
[debug]for tmpcurlow: 13/11
[debug]for curlow=min: 13/8
[debug]if find vbcc
[debug]curdisc: 13/10
[debug]neilow: 12/8
[debug]else curnode not cutv and rootnode: 13
[debug]finish dfs_helper: 13
[debug]if neinode notdisc dfs_helper finish: 13/8
[debug]for tmpcurlow: 14/10
[debug]for curlow=min: 14/8
[debug]if find vbcc
[debug]curdisc: 14/9
[debug]neilow: 13/8
[debug]else curnode not cutv and rootnode: 14
[debug]for neinode: 8 (curnode: 14)
[debug]else skip
[debug]finish dfs_helper: 14
[debug]if neinode notdisc dfs_helper finish: 14/8
[debug]for tmpcurlow: 8/9
[debug]for curlow=min: 8/8
[debug]if find vbcc
[debug]curdisc: 8/8
[debug]neilow: 14/8
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 12
[debug]while pop topnode to vbcc: 15
[debug]while pop topnode to vbcc: 13
[debug]while pop topnode to vbcc: 14
[debug]while break: topnode=neinode=14
[debug]vbcc append curnode: 8
[debug]result emplace vbcc
[debug]for neinode: 15 (curnode: 8)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 8/8
[debug]neilow: 15/8
[debug]curlow=min: 8/8
[debug]for neinode: 9 (curnode: 8)
[debug]else skip
[debug]for neinode: 7 (curnode: 8)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 8/8
[debug]neilow: 7/4
[debug]curlow=min: 8/4
[debug]for neinode: 11 (curnode: 8)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 8/4
[debug]neilow: 11/5
[debug]curlow=min: 8/4
[debug]for neinode: 12 (curnode: 8)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 8/4
[debug]neilow: 12/8
[debug]curlow=min: 8/4
[debug]finish dfs_helper: 8
[debug]if neinode notdisc dfs_helper finish: 8/4
[debug]for tmpcurlow: 9/8
[debug]for curlow=min: 9/4
[debug]if find vbcc
[debug]curdisc: 9/7
[debug]neilow: 8/4
[debug]else curnode not cutv and rootnode: 9
[debug]for neinode: 11 (curnode: 9)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 9/4
[debug]neilow: 11/5
[debug]curlow=min: 9/4
[debug]finish dfs_helper: 9
[debug]if neinode notdisc dfs_helper finish: 9/4
[debug]for tmpcurlow: 10/7
[debug]for curlow=min: 10/4
[debug]if find vbcc
[debug]curdisc: 10/6
[debug]neilow: 9/4
[debug]else curnode not cutv and rootnode: 10
[debug]for neinode: 18 (curnode: 10)
[debug]if neinode notdisc dfs_helper start: 18
[debug]start dfs_helper
[debug]curnode=18 timestamp=13
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 17 (curnode: 18)
[debug]if neinode notdisc dfs_helper start: 17
[debug]start dfs_helper
[debug]curnode=17 timestamp=14
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 18 (curnode: 17)
[debug]else skip
[debug]for neinode: 10 (curnode: 17)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 17/14
[debug]neilow: 10/4
[debug]curlow=min: 17/4
[debug]finish dfs_helper: 17
[debug]if neinode notdisc dfs_helper finish: 17/4
[debug]for tmpcurlow: 18/14
[debug]for curlow=min: 18/4
[debug]if find vbcc
[debug]curdisc: 18/13
[debug]neilow: 17/4
[debug]else curnode not cutv and rootnode: 18
[debug]for neinode: 10 (curnode: 18)
[debug]else skip
[debug]finish dfs_helper: 18
[debug]if neinode notdisc dfs_helper finish: 18/4
[debug]for tmpcurlow: 10/7
[debug]for curlow=min: 10/4
[debug]if find vbcc
[debug]curdisc: 10/6
[debug]neilow: 18/4
[debug]else curnode not cutv and rootnode: 10
[debug]for neinode: 17 (curnode: 10)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 10/4
[debug]neilow: 17/4
[debug]curlow=min: 10/4
[debug]for neinode: 11 (curnode: 10)
[debug]else skip
[debug]for neinode: 16 (curnode: 10)
[debug]if neinode notdisc dfs_helper start: 16
[debug]start dfs_helper
[debug]curnode=16 timestamp=15
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 10 (curnode: 16)
[debug]else skip
[debug]finish dfs_helper: 16
[debug]if neinode notdisc dfs_helper finish: 16/15
[debug]for tmpcurlow: 10/7
[debug]for curlow=min: 10/4
[debug]if find vbcc
[debug]curdisc: 10/6
[debug]neilow: 16/15
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 16
[debug]while break: topnode=neinode=16
[debug]vbcc append curnode: 10
[debug]result emplace vbcc
[debug]finish dfs_helper: 10
[debug]if neinode notdisc dfs_helper finish: 10/4
[debug]for tmpcurlow: 11/6
[debug]for curlow=min: 11/4
[debug]if find vbcc
[debug]curdisc: 11/5
[debug]neilow: 10/4
[debug]else curnode not cutv and rootnode: 11
[debug]for neinode: 8 (curnode: 11)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 11/4
[debug]neilow: 8/4
[debug]curlow=min: 11/4
[debug]for neinode: 9 (curnode: 11)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 11/4
[debug]neilow: 9/4
[debug]curlow=min: 11/4
[debug]finish dfs_helper: 11
[debug]if neinode notdisc dfs_helper finish: 11/4
[debug]for tmpcurlow: 7/5
[debug]for curlow=min: 7/4
[debug]if find vbcc
[debug]curdisc: 7/4
[debug]neilow: 11/4
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 17
[debug]while pop topnode to vbcc: 18
[debug]while pop topnode to vbcc: 8
[debug]while pop topnode to vbcc: 9
[debug]while pop topnode to vbcc: 10
[debug]while pop topnode to vbcc: 11
[debug]while break: topnode=neinode=11
[debug]vbcc append curnode: 7
[debug]result emplace vbcc
[debug]for neinode: 6 (curnode: 7)
[debug]else skip
[debug]for neinode: 5 (curnode: 7)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 7/4
[debug]neilow: 5/2
[debug]curlow=min: 7/2
[debug]for neinode: 8 (curnode: 7)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 7/2
[debug]neilow: 8/4
[debug]curlow=min: 7/2
[debug]finish dfs_helper: 7
[debug]if neinode notdisc dfs_helper finish: 7/2
[debug]for tmpcurlow: 6/4
[debug]for curlow=min: 6/2
[debug]if find vbcc
[debug]curdisc: 6/3
[debug]neilow: 7/2
[debug]else curnode not cutv and rootnode: 6
[debug]for neinode: 2 (curnode: 6)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 6/2
[debug]neilow: 2/1
[debug]curlow=min: 6/1
[debug]finish dfs_helper: 6
[debug]if neinode notdisc dfs_helper finish: 6/1
[debug]for tmpcurlow: 5/3
[debug]for curlow=min: 5/1
[debug]if find vbcc
[debug]curdisc: 5/2
[debug]neilow: 6/1
[debug]else curnode not cutv and rootnode: 5
[debug]for neinode: 7 (curnode: 5)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 5/1
[debug]neilow: 7/2
[debug]curlow=min: 5/1
[debug]finish dfs_helper: 5
[debug]if neinode notdisc dfs_helper finish: 5/1
[debug]for tmpcurlow: 2/2
[debug]for curlow=min: 2/1
[debug]if find vbcc
[debug]curdisc: 2/1
[debug]neilow: 5/1
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 7
[debug]while pop topnode to vbcc: 6
[debug]while pop topnode to vbcc: 5
[debug]while break: topnode=neinode=5
[debug]vbcc append curnode: 2
[debug]result emplace vbcc
[debug]for neinode: 3 (curnode: 2)
[debug]if neinode notdisc dfs_helper start: 3
[debug]start dfs_helper
[debug]curnode=3 timestamp=16
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 2 (curnode: 3)
[debug]else skip
[debug]for neinode: 4 (curnode: 3)
[debug]if neinode notdisc dfs_helper start: 4
[debug]start dfs_helper
[debug]curnode=4 timestamp=17
[debug]find vbcc: stack emplace curnode
[debug]for neinode: 3 (curnode: 4)
[debug]else skip
[debug]for neinode: 2 (curnode: 4)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 4/17
[debug]neilow: 2/1
[debug]curlow=min: 4/1
[debug]finish dfs_helper: 4
[debug]if neinode notdisc dfs_helper finish: 4/1
[debug]for tmpcurlow: 3/17
[debug]for curlow=min: 3/1
[debug]if find vbcc
[debug]curdisc: 3/16
[debug]neilow: 4/1
[debug]else curnode not cutv and rootnode: 3
[debug]finish dfs_helper: 3
[debug]if neinode notdisc dfs_helper finish: 3/1
[debug]for tmpcurlow: 2/2
[debug]for curlow=min: 2/1
[debug]if find vbcc
[debug]curdisc: 2/1
[debug]neilow: 3/1
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 4
[debug]while pop topnode to vbcc: 3
[debug]while break: topnode=neinode=3
[debug]vbcc append curnode: 2
[debug]result emplace vbcc
[debug]for neinode: 6 (curnode: 2)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 2/1
[debug]neilow: 6/1
[debug]curlow=min: 2/1
[debug]for neinode: 4 (curnode: 2)
[debug]else if: neinode disc and (undir or neinode instack)
[debug]curlow: 2/1
[debug]neilow: 4/1
[debug]curlow=min: 2/1
[debug]for neinode: 1 (curnode: 2)
[debug]else skip
[debug]finish dfs_helper: 2
[debug]if neinode notdisc dfs_helper finish: 2/1
[debug]for tmpcurlow: 1/1
[debug]for curlow=min: 1/0
[debug]if find vbcc
[debug]curdisc: 1/0
[debug]neilow: 2/1
[debug]if curdisc<=neilow (curnode cutv or rootnode)
[debug]while pop topnode to vbcc: 2
[debug]while break: topnode=neinode=2
[debug]vbcc append curnode: 1
[debug]result emplace vbcc
[debug]finish dfs_helper: 1
/mnt/CXXGraph-3.0.0/debug/TarjanTest.cpp:188: Failure
Expected equality of these values:
res.verticeBiconnectedComps.size()
Which is: 6
expectRes.size()
Which is: 7
[ FAILED ] TarjanTest.test_4 (1 ms)

For the case TarjanTest.test_4
image
The result I got misses the vbcc [10,17,18].
The problem seems to be caused by the lowestDisc of node 10 modified earlier than the time when it finishes its dfs_helper.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority:CriticalPriority Label for Critical IssuebugSomething isn't workingcoresomething about corehelp wantedExtra attention is neededtestSomething about test

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions