반응형
class명을 어떻게 지어야 하는지 몰라 그냥 TimeInterval로 지었음
정확하게 interval마다 무언가를 하는 것이 아니라.. interval 이상 지난 후 내가 뭘 해야 할 때 씀
처음 생성시 시간을 넣어주고 CheckInterval()을 계속 호출하면 생성시 넣어준 interval이 지나면 true를 return함
먼저 결과는..
# g++ time_interval.cpp -lgtest -lgtest_main -lpthread # ./a.out Running main() from gtest_main.cc [==========] Running 2 tests from 1 test case. [----------] Global test environment set-up. [----------] 2 tests from TimeInterval [ RUN ] TimeInterval.GetTimeInterval [ OK ] TimeInterval.GetTimeInterval (0 ms) [ RUN ] TimeInterval.IsExceedTimeInterval [ OK ] TimeInterval.IsExceedTimeInterval (301 ms) [----------] 2 tests from TimeInterval (301 ms total) [----------] Global test environment tear-down [==========] 2 tests from 1 test case ran. (302 ms total) [ PASSED ] 2 tests. |
code는 요럼
#include <iostream>
#include <chrono>
#include <unistd.h>
#include "gtest/gtest.h"
using namespace std;
class TimeInterval
{
public:
TimeInterval(void) = delete;
explicit TimeInterval(const size_t intervalInMilliseconds)
: lastTime_(std::chrono::steady_clock::now()),
intervalInMilliseconds_(intervalInMilliseconds)
{
}
virtual ~TimeInterval(void)
{
}
virtual size_t GetInterval(void) const
{
return intervalInMilliseconds_;
}
virtual bool CheckInterval(void)
{
std::chrono::steady_clock::time_point currentTime = std::chrono::steady_clock::now();
auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - lastTime_).count();
if (elapsedTime >= intervalInMilliseconds_)
{
lastTime_ = currentTime;
return true;
}
return false;
}
private:
std::chrono::steady_clock::time_point lastTime_;
const size_t intervalInMilliseconds_;
};
TEST(TimeInterval, GetTimeInterval)
{
size_t TIME_INTERVAL_IN_MILLISECONDS = 200; // 0.2s
TimeInterval interval(TIME_INTERVAL_IN_MILLISECONDS);
EXPECT_EQ(TIME_INTERVAL_IN_MILLISECONDS, interval.GetInterval());
}
TEST(TimeInterval, IsExceedTimeInterval)
{
size_t TIME_INTERVAL_IN_MILLISECONDS = 200; // 0.2s
TimeInterval interval(TIME_INTERVAL_IN_MILLISECONDS);
EXPECT_FALSE(interval.CheckInterval());
usleep(100000);
EXPECT_FALSE(interval.CheckInterval());
usleep(200000);
EXPECT_TRUE(interval.CheckInterval());
EXPECT_FALSE(interval.CheckInterval());
}
반응형
'프로그래밍 > C & C++' 카테고리의 다른 글
rocksdb sample code on ubuntu 18.04 (0) | 2022.02.27 |
---|---|
fifo cache의 변형 (0) | 2022.02.01 |
ubuntu에 google test (gtest) 설치 후 간단히 test (0) | 2022.02.01 |
boost를 이용한 crc 계산 (0) | 2022.01.31 |
댓글