diff options
author | Kostya Serebryany <kcc@google.com> | 2014-02-13 09:52:15 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-02-13 09:52:15 +0000 |
commit | 361082bac8b483a9e962abefc3627d5867d779eb (patch) | |
tree | 33d57e1ce0190004d891417b393b044daa7f1c7e /lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc | |
parent | 56f859072ba1d194373654fca84b941ffb035c84 (diff) |
[sanitizer] findPath for deadlock detector
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@201306 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc')
-rw-r--r-- | lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc b/lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc index d84ccdafd..0e04ac870 100644 --- a/lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc +++ b/lib/sanitizer_common/tests/sanitizer_bvgraph_test.cc @@ -61,7 +61,16 @@ TEST(SanitizerCommon, BVGraph) { from = my_rand() % g.size(); bool is_reachable = g.isReachable(from, target); if (is_reachable) { - // printf("reachable: %d %zd\n", it, from); + uptr path[BV::kSize]; + uptr len; + for (len = 1; len < BV::kSize; len++) { + if (g.findPath(from, target, path, len) == len) + break; + } + EXPECT_LT(len, BV::kSize); + EXPECT_TRUE(target.getBit(path[len - 1])); + // fprintf(stderr, "reachable: %zd; path %zd {%zd %zd %zd}\n", + // from, len, path[0], path[1], path[2]); num_reachable++; } } @@ -71,6 +80,7 @@ TEST(SanitizerCommon, BVGraph) { TEST(SanitizerCommon, BVGraph_isReachable) { typedef TwoLevelBitVector<> BV; + uptr path[5]; BVGraph<BV> g; g.clear(); BV target; @@ -103,6 +113,13 @@ TEST(SanitizerCommon, BVGraph_isReachable) { EXPECT_TRUE(g.isReachable(f1, target)); EXPECT_FALSE(g.isReachable(f2, target)); EXPECT_FALSE(g.isReachable(f3, target)); + EXPECT_EQ(g.findPath(f0, target, path, ARRAY_SIZE(path)), 3U); + EXPECT_EQ(path[0], f0); + EXPECT_EQ(path[1], f1); + EXPECT_EQ(path[2], t0); + EXPECT_EQ(g.findPath(f1, target, path, ARRAY_SIZE(path)), 2U); + EXPECT_EQ(path[0], f1); + EXPECT_EQ(path[1], t0); g.addEdge(f3, t1); EXPECT_TRUE(g.isReachable(f0, target)); |