Fixed mpmc_q test for osx in travis

This commit is contained in:
gabime 2018-08-17 17:17:16 +03:00
parent a281d21fbf
commit 9ad9cfb898
3 changed files with 21 additions and 17 deletions

View File

@ -84,8 +84,6 @@ matrix:
before_script: before_script:
- if [ -n "$GCC_VERSION" ]; then export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"; fi - if [ -n "$GCC_VERSION" ]; then export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"; fi
- if [ -n "$CLANG_VERSION" ]; then export CXX="clang++-${CLANG_VERSION}" CC="clang-${CLANG_VERSION}"; fi - if [ -n "$CLANG_VERSION" ]; then export CXX="clang++-${CLANG_VERSION}" CC="clang-${CLANG_VERSION}"; fi

View File

@ -7,6 +7,7 @@
#include <exception> #include <exception>
#include <fstream> #include <fstream>
#include <ostream> #include <ostream>
#include <iostream>
#include <string> #include <string>
#define SPDLOG_TRACE_ON #define SPDLOG_TRACE_ON

View File

@ -2,25 +2,27 @@
using namespace std::chrono; using namespace std::chrono;
using std::chrono::milliseconds; using std::chrono::milliseconds;
using std::chrono::system_clock; using test_clock = std::chrono::high_resolution_clock ;
system_clock::time_point now_millis()
static milliseconds millis_from(const test_clock::time_point &tp0)
{ {
return time_point_cast<milliseconds>(system_clock::now()); return std::chrono::duration_cast<milliseconds>(test_clock::now()-tp0);
} }
TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]") TEST_CASE("dequeue-empty-nowait", "[mpmc_blocking_q]")
{ {
size_t q_size = 100; size_t q_size = 100;
milliseconds tolerance_wait(10); milliseconds tolerance_wait(30);
spdlog::details::mpmc_blocking_queue<int> q(q_size); spdlog::details::mpmc_blocking_queue<int> q(q_size);
int popped_item; int popped_item;
auto millis_0 = now_millis(); auto start = test_clock::now();
auto rv = q.dequeue_for(popped_item, milliseconds::zero()); auto rv = q.dequeue_for(popped_item, milliseconds::zero());
auto millis_1 = now_millis(); auto delta_ms = millis_from(start);
REQUIRE(rv == false); REQUIRE(rv == false);
REQUIRE((millis_1 - millis_0) <= tolerance_wait); INFO("Delta " << delta_ms.count() << " millis");
REQUIRE(delta_ms <= tolerance_wait);
} }
TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]") TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]")
@ -28,16 +30,17 @@ TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]")
size_t q_size = 100; size_t q_size = 100;
milliseconds wait_ms(250); milliseconds wait_ms(250);
milliseconds tolerance_wait(10); milliseconds tolerance_wait(30);
spdlog::details::mpmc_blocking_queue<int> q(q_size); spdlog::details::mpmc_blocking_queue<int> q(q_size);
int popped_item; int popped_item;
auto millis_0 = now_millis(); auto start = test_clock::now();
auto rv = q.dequeue_for(popped_item, wait_ms); auto rv = q.dequeue_for(popped_item, wait_ms);
auto millis_1 = now_millis(); auto delta_ms = millis_from(start);
auto delta_ms = millis_1 - millis_0;
REQUIRE(rv == false); REQUIRE(rv == false);
INFO("Delta " << delta_ms.count() << " millis");
REQUIRE(delta_ms >= wait_ms); REQUIRE(delta_ms >= wait_ms);
REQUIRE(delta_ms <= wait_ms + tolerance_wait); REQUIRE(delta_ms <= wait_ms + tolerance_wait);
} }
@ -47,15 +50,17 @@ TEST_CASE("enqueue_nowait", "[mpmc_blocking_q]")
size_t q_size = 1; size_t q_size = 1;
spdlog::details::mpmc_blocking_queue<int> q(q_size); spdlog::details::mpmc_blocking_queue<int> q(q_size);
milliseconds tolerance_wait(10); milliseconds tolerance_wait(30);
q.enqueue(1); q.enqueue(1);
REQUIRE(q.overrun_counter() == 0); REQUIRE(q.overrun_counter() == 0);
auto millis_0 = now_millis(); auto start = test_clock::now();
q.enqueue_nowait(2); q.enqueue_nowait(2);
auto millis_1 = now_millis(); auto delta_ms = millis_from(start);
REQUIRE((millis_1 - millis_0) <= tolerance_wait);
INFO("Delta " << delta_ms.count() << " millis");
REQUIRE(delta_ms <= tolerance_wait);
REQUIRE(q.overrun_counter() == 1); REQUIRE(q.overrun_counter() == 1);
} }