Ensure the loop callback is scheduled when the ready queue is not empty
[folly.git] / folly / experimental / fibers / test / FibersTest.cpp
index 681e608f96defde30dd3837bd4bf1806c7149c28..bc7a738051828dad697cccb995de87605b78703d 100644 (file)
@@ -1281,6 +1281,31 @@ TEST(FiberManager, fiberLocalHeap) {
   testFiberLocal<LargeData>();
 }
 
+TEST(FiberManager, yieldTest) {
+  FiberManager manager(folly::make_unique<SimpleLoopController>());
+  auto& loopController =
+    dynamic_cast<SimpleLoopController&>(manager.loopController());
+
+  bool checkRan = false;
+
+  manager.addTask(
+    [&]() {
+      manager.yield();
+      checkRan = true;
+    }
+  );
+
+  loopController.loop(
+    [&]() {
+      if (checkRan) {
+        loopController.stop();
+      }
+    }
+  );
+
+  EXPECT_TRUE(checkRan);
+}
+
 static size_t sNumAwaits;
 
 void runBenchmark(size_t numAwaits, size_t toSend) {