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

                var returnValues = DequeueUntilSleep();

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

                Clear();
                var returnValues = DequeueUntilSleep();

                returnValues.ShouldBeSameEventsAs(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
                    );
            }