• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/message_loop.h"
6 #include "base/thread.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8 
9 namespace {
10 
11 // We use caps here just to ensure that the method name doesn't interfere with
12 // the wildcarded suppressions.
13 class TOOLS_SANITY_TEST_CONCURRENT_THREAD : public PlatformThread::Delegate {
14  public:
TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool * value)15   explicit TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool *value) : value_(value) {}
~TOOLS_SANITY_TEST_CONCURRENT_THREAD()16   ~TOOLS_SANITY_TEST_CONCURRENT_THREAD() {}
ThreadMain()17   void ThreadMain() {
18     *value_ = true;
19   }
20  private:
21   bool* value_;
22 };
23 
24 }
25 
26 // A memory leak detector should report an error in this test.
TEST(ToolsSanityTest,MemoryLeak)27 TEST(ToolsSanityTest, MemoryLeak) {
28   int *leak = new int[256];  // Leak some memory intentionally.
29   leak[4] = 1;  // Make sure the allocated memory is used.
30 }
31 
32 // A data race detector should report an error in this test.
TEST(ToolsSanityTest,DataRace)33 TEST(ToolsSanityTest, DataRace) {
34   bool shared = false;
35   PlatformThreadHandle a;
36   PlatformThreadHandle b;
37   PlatformThread::Delegate *thread1 =
38       new TOOLS_SANITY_TEST_CONCURRENT_THREAD(&shared);
39   PlatformThread::Delegate *thread2 =
40       new TOOLS_SANITY_TEST_CONCURRENT_THREAD(&shared);
41 
42   PlatformThread::Create(0, thread1, &a);
43   PlatformThread::Create(0, thread2, &b);
44   PlatformThread::Join(a);
45   PlatformThread::Join(b);
46   EXPECT_TRUE(shared);
47   delete thread1;
48   delete thread2;
49 }
50 
51