1//===- unittests/TimerTest.cpp - Timer tests ------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "llvm/Support/Timer.h"
11#include "gtest/gtest.h"
12
13#if LLVM_ON_WIN32
14#include <windows.h>
15#else
16#include <time.h>
17#endif
18
19using namespace llvm;
20
21namespace {
22
23// FIXME: Put this somewhere in Support, it's also used in LockFileManager.
24void SleepMS() {
25#if LLVM_ON_WIN32
26  Sleep(1);
27#else
28  struct timespec Interval;
29  Interval.tv_sec = 0;
30  Interval.tv_nsec = 1000000;
31  nanosleep(&Interval, nullptr);
32#endif
33}
34
35TEST(Timer, Additivity) {
36  Timer T1("T1");
37
38  EXPECT_TRUE(T1.isInitialized());
39
40  T1.startTimer();
41  T1.stopTimer();
42  auto TR1 = T1.getTotalTime();
43
44  T1.startTimer();
45  SleepMS();
46  T1.stopTimer();
47  auto TR2 = T1.getTotalTime();
48
49  EXPECT_TRUE(TR1 < TR2);
50}
51
52TEST(Timer, CheckIfTriggered) {
53  Timer T1("T1");
54
55  EXPECT_FALSE(T1.hasTriggered());
56  T1.startTimer();
57  EXPECT_TRUE(T1.hasTriggered());
58  T1.stopTimer();
59  EXPECT_TRUE(T1.hasTriggered());
60
61  T1.clear();
62  EXPECT_FALSE(T1.hasTriggered());
63}
64
65} // end anon namespace
66