/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <folly/ProducerConsumerQueue.h>
-#include <gtest/gtest.h>
-#include <vector>
#include <atomic>
#include <chrono>
#include <memory>
#include <thread>
+#include <vector>
+
#include <glog/logging.h>
+#include <folly/portability/GTest.h>
+
//////////////////////////////////////////////////////////////////////
namespace {
-template<class T> struct TestTraits {
+template <class T> struct TestTraits {
T limit() const { return 1 << 24; }
T generate() const { return rand() % 26; }
};
-template<> struct TestTraits<std::string> {
+template <> struct TestTraits<std::string> {
unsigned int limit() const { return 1 << 22; }
std::string generate() const { return std::string(12, ' '); }
};
-template<class QueueType, size_t Size, bool Pop = false>
+template <class QueueType, size_t Size, bool Pop = false>
struct PerfTest {
typedef typename QueueType::value_type T;
TestTraits<T> traits_;
};
-template<class TestType> void doTest(const char* name) {
+template <class TestType> void doTest(const char* name) {
LOG(INFO) << " testing: " << name;
std::unique_ptr<TestType> const t(new TestType());
(*t)();
}
-template<class T, bool Pop = false>
+template <class T, bool Pop = false>
void perfTestType(const char* type) {
const size_t size = 0xfffe;
"ProducerConsumerQueue");
}
-template<class QueueType, size_t Size, bool Pop>
+template <class QueueType, size_t Size, bool Pop>
struct CorrectnessTest {
typedef typename QueueType::value_type T;
} else {
goto again;
}
+ EXPECT_EQ(*data, expect);
} else {
+ EXPECT_EQ(*data, expect);
queue_.popFront();
}
-
- EXPECT_EQ(*data, expect);
}
}
std::atomic<bool> done_;
};
-template<class T, bool Pop = false>
+template <class T, bool Pop = false>
void correctnessTestType(const std::string& type) {
LOG(INFO) << "Type: " << type;
doTest<CorrectnessTest<folly::ProducerConsumerQueue<T>,0xfffe,Pop> >(
struct DtorChecker {
static unsigned int numInstances;
DtorChecker() { ++numInstances; }
- DtorChecker(const DtorChecker& o) { ++numInstances; }
+ DtorChecker(const DtorChecker& /* o */) { ++numInstances; }
~DtorChecker() { --numInstances; }
};
EXPECT_FALSE(queue.write(3));
EXPECT_EQ(queue.sizeGuess(), 2);
}
+
+TEST(PCQ, Capacity) {
+ folly::ProducerConsumerQueue<int> queue(3);
+ EXPECT_EQ(queue.capacity(), 2); // PCQ max size is buffer size - 1.
+}