public IEnumerator TestAndThen()
        {
            var first  = false;
            var second = false;

            Coroutines.DelayForFrames(1, () => first           = true)
            .AndThen(Coroutines.DelayForFrames(1, () => second = true)).Start();
            Assert.IsFalse(first);
            Assert.IsFalse(second);
            yield return(null);

            Assert.IsTrue(first);
            Assert.IsFalse(second);
            yield return(null);

            Assert.IsTrue(first);
            Assert.IsTrue(second);
        }
        public IEnumerator TestDelayForFrames_FixedUpdate()
        {
            var done = false;

            Coroutines.DelayForFrames(5, () => done = true, fixedUpdate: true).Start();
            Assert.IsFalse(done, "after 0 fu");
            yield return(new WaitForFixedUpdate());

            yield return(new WaitForFixedUpdate());

            yield return(new WaitForFixedUpdate());

            yield return(new WaitForFixedUpdate());

            Assert.IsFalse(done, "after 4 fu");
            yield return(new WaitForFixedUpdate());

            Assert.IsTrue(done, "after 5 fu");
        }
        public IEnumerator TestDelayForFrames()
        {
            var done = false;

            Coroutines.DelayForFrames(5, () => done = true).Start();
            Assert.IsFalse(done, "after 0 frames");
            yield return(null);

            yield return(null);

            yield return(null);

            yield return(null);

            Assert.IsFalse(done, "after 4 frames");
            yield return(null);

            Assert.IsTrue(done, "after 5 frames");
        }