mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Device: Add com keepalive
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
#include "icsneo/api/periodic.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <condition_variable>
|
||||
|
||||
using namespace icsneo;
|
||||
|
||||
// no wait, make sure stop works
|
||||
TEST(PeriodicTest, StartStop)
|
||||
{
|
||||
const auto start = std::chrono::steady_clock::now();
|
||||
Periodic p([] { return true; }, std::chrono::milliseconds(1000));
|
||||
const auto delta = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start);
|
||||
EXPECT_LT(delta.count(), 100); // hopefully enough
|
||||
}
|
||||
|
||||
// time single cycle
|
||||
TEST(PeriodicTest, OneCycle)
|
||||
{
|
||||
std::condition_variable cv;
|
||||
std::mutex mutex;
|
||||
uint8_t cycles = 0;
|
||||
const auto start = std::chrono::steady_clock::now();
|
||||
{
|
||||
Periodic p([&] {
|
||||
{
|
||||
std::scoped_lock lk(mutex);
|
||||
++cycles;
|
||||
}
|
||||
cv.notify_one();
|
||||
return true;
|
||||
}, std::chrono::seconds(1));
|
||||
std::unique_lock<std::mutex> lk(mutex);
|
||||
cv.wait_for(lk, std::chrono::seconds(2), [&]{ return cycles > 0; });
|
||||
}
|
||||
const auto delta = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - start);
|
||||
EXPECT_EQ(delta.count(), 1);
|
||||
EXPECT_EQ(cycles, 1);
|
||||
}
|
||||
|
||||
TEST(PeriodicTest, TenCycles)
|
||||
{
|
||||
std::condition_variable cv;
|
||||
std::mutex mutex;
|
||||
uint8_t cycles = 0;
|
||||
const auto start = std::chrono::steady_clock::now();
|
||||
{
|
||||
Periodic p([&] {
|
||||
{
|
||||
std::scoped_lock lk(mutex);
|
||||
++cycles;
|
||||
}
|
||||
cv.notify_one();
|
||||
return true;
|
||||
}, std::chrono::milliseconds(100));
|
||||
std::unique_lock<std::mutex> lk(mutex);
|
||||
cv.wait_for(lk, std::chrono::seconds(2), [&]{ return cycles >= 10; });
|
||||
}
|
||||
const auto delta = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - start);
|
||||
EXPECT_EQ(delta.count(), 1);
|
||||
EXPECT_EQ(cycles, 10);
|
||||
}
|
||||
Reference in New Issue
Block a user