public void AutoSortingEnumerator_Should_NotChange_IfItIsContinueIteratingToTheEnd(params string[] values) { var testQueue = new FromLastIteratedEnumerable <string>(values); testQueue.Iterate().ToArray(); var result = testQueue.Iterate().ToArray(); result.Should().BeInAscendingOrder(); result.Should().BeEquivalentTo(values, config => config.WithStrictOrdering()); }
public void AutoSortingEnumerator_Should_SetLastIteratedItemToTheBeginning(int takeCount, params string[] values) { var testQueue = new FromLastIteratedEnumerable <string>(values); testQueue.Iterate().Take(takeCount).ToArray(); var result = testQueue.Iterate().ToArray(); result[0].Should().BeEquivalentTo(values[takeCount - 1]); }
private IEnumerable <Thread> CreateTestThreads( FromLastIteratedEnumerable <string> autosorter, int itemsCount, int threadsCount, int syclesInThreadCount) { for (var threadIndex = 0; threadIndex < threadsCount; threadIndex++) { yield return(new Thread( () => { for (var i = 0; i < syclesInThreadCount; i++) { autosorter.Iterate().Take(random.Next(1, itemsCount)).ToArray(); } })); } }
public void AutoSortingEnumerator_ShouldBe_ThreadSafe() { const int itemsCount = 100; const int threadsCount = 100; const int syclesInThreadCount = 100; var sourceCollection = fixture.CreateMany <string>(itemsCount).ToArray(); var testQueue = new FromLastIteratedEnumerable <string>(sourceCollection.ToArray()); var threads = CreateTestThreads(testQueue, itemsCount, threadsCount, syclesInThreadCount).ToArray(); threads.ForEach(thread => thread.Start()); while (threads.Any(thread => thread.IsAlive)) { } var result = testQueue.Iterate().ToArray(); result.Should().BeEquivalentTo(sourceCollection); }