public void StartsPullTimeEntriesIfOnlyCleanUpIsQueue()
            {
                QueueSyncs(PullTimeEntries);

                Dequeue();

                DequeuedStates.ShouldBeSameEventsAs(PullTimeEntries);
            }
            public void StartsSleepIfNothingQueued()
            {
                Dequeue();

                DequeuedStates.ShouldBeSameEventsAs(
                    Sleep
                    );
            }
            public void StartsCleanUpIfOnlyCleanUpIsQueue()
            {
                QueueSyncs(CleanUp);

                Dequeue();

                DequeuedStates.ShouldBeSameEventsAs(CleanUp);
            }
            public void AlwaysReturnsTheStateItRuns(bool[] pushPull)
            {
                DequeuedStates.Clear();
                QueueSyncs(BoolToEnumValues(pushPull));

                var returnValues = DequeueUntilSleep();

                returnValues.ShouldBeSameEventsAs(DequeuedStates.ToArray());
            }
            public void StartsPushIfOnlyPushQueued()
            {
                QueueSyncs(Push);

                Dequeue();

                DequeuedStates.ShouldBeSameEventsAs(
                    Push
                    );
            }
            public void RetursSleepAfterClearNoMatterWhatWasQueuedPreviously(NonEmptyArray <bool> pushPull)
            {
                DequeuedStates.Clear();
                QueueSyncs(BoolToEnumValues(pushPull.Get));

                Clear();
                var returnValues = DequeueUntilSleep();

                returnValues.ShouldBeSameEventsAs(Sleep);
            }
            public void AlwaysRunsCleanUpAfterPushAndPull()
            {
                QueueSyncs(CleanUp, Push, Pull);

                DequeueUntilSleep();

                DequeuedStates.ShouldBeSameEventsAs(
                    Pull, Push, CleanUp, Sleep
                    );
            }
            public void RunsCleanUpJustBeforeSleepIfPullAndPushIsQueuedAsWell()
            {
                QueueSyncs(Pull, Push, CleanUp);

                DequeueUntilSleep();

                DequeuedStates.ShouldBeSameEventsAs(
                    Pull, Push, CleanUp, Sleep
                    );
            }
            public void RunsTwoFullCyclesIfPullIsQueuedAfterFirstPullStarted()
            {
                QueueSyncs(Pull);
                Dequeue();
                QueueSyncs(Pull);

                DequeueUntilSleep();

                DequeuedStates.ShouldBeSameEventsAs(
                    Pull, Push, Pull, Push, Sleep
                    );
            }
            public void RunsFullCycleOnceNoMatterWhatIsQueuedIfPullIsQueued(bool[] pushPull)
            {
                DequeuedStates.Clear();
                var states = (pushPull ?? Enumerable.Empty <bool>())
                             .Select(b => b ? Push : Pull).ToArray();

                QueueSyncs(states);
                if (!states.Contains(Pull))
                {
                    QueueSyncs(Pull);
                }

                DequeueUntilSleep();

                DequeuedStates.ShouldBeSameEventsAs(
                    Pull, Push, Sleep
                    );
            }