}
}
+// All the never_fail tests are for the non-dynamic version only.
+// False positive for dynamic version. Some writeIfNotFull() and
+// tryWriteUntil() operations may fail in transient conditions related
+// to expansion.
+
TEST(MPMCQueue, mt_never_fail) {
std::vector<int> nts {1, 3, 100};
int n = 100000;
runMtNeverFail<EmulatedFutexAtomic>(nts, n);
}
-TEST(MPMCQueue, mt_never_fail_dynamic) {
- std::vector<int> nts{1, 3, 100};
- int n = 100000;
- runMtNeverFail<std::atomic, true>(nts, n);
-}
-
-TEST(MPMCQueue, mt_never_fail_emulated_futex_dynamic) {
- std::vector<int> nts{1, 3, 100};
- int n = 100000;
- runMtNeverFail<EmulatedFutexAtomic, true>(nts, n);
-}
-
template <bool Dynamic = false>
void runMtNeverFailDeterministic(std::vector<int>& nts, int n, long seed) {
LOG(INFO) << "using seed " << seed;
runMtNeverFailDeterministic(nts, n, seed);
}
-TEST(MPMCQueue, mt_never_fail_deterministic_dynamic) {
- std::vector<int> nts{3, 10};
- long seed = 0; // nowMicro() % 10000;
- int n = 1000;
- runMtNeverFailDeterministic<true>(nts, n, seed);
-}
-
template <class Clock, template <typename> class Atom, bool Dynamic>
void runNeverFailUntilThread(int numThreads,
int n, /*numOps*/
runMtNeverFailUntilSystem(nts, n);
}
-TEST(MPMCQueue, mt_never_fail_until_system_dynamic) {
- std::vector<int> nts{1, 3, 100};
- int n = 100000;
- runMtNeverFailUntilSystem<true>(nts, n);
-}
-
template <bool Dynamic = false>
void runMtNeverFailUntilSteady(std::vector<int>& nts, int n) {
for (int nt : nts) {
runMtNeverFailUntilSteady(nts, n);
}
-TEST(MPMCQueue, mt_never_fail_until_steady_dynamic) {
- std::vector<int> nts{1, 3, 100};
- int n = 100000;
- runMtNeverFailUntilSteady<true>(nts, n);
-}
-
enum LifecycleEvent {
NOTHING = -1,
DEFAULT_CONSTRUCTOR,
testTimeout<false>(queue);
}
-TEST(MPMCQueue, try_write_until_timeout_dynamic) {
- folly::MPMCQueue<int, std::atomic, true> queue(1);
+TEST(MPMCQueue, must_fail_try_write_until_dynamic) {
+ folly::MPMCQueue<int, std::atomic, true> queue(200, 1, 2);
testTimeout<true>(queue);
}