public void GetCharCounts_ShouldReturnDoubledValues_WhenSameFileAddedSecondTime() { var counter = new MultiFileCharacterCounter(); counter.Add(EmbeddedFiles.Large); var firstResults = counter.GetCharCounts(); counter.Add(EmbeddedFiles.Large); Assert.That(counter.GetCharCounts().All(secondResult => IsDoubled(secondResult, firstResults))); }
public void GetCharCounts_ShouldReturnRevisedCountWhenAnotherFileAddedAfterGettingInitialResults() { using (var counter = new MultiFileCharacterCounter()) { counter.Add(EmbeddedFiles.Large); counter.Add(EmbeddedFiles.Huge); Thread.Sleep(50); IReadOnlyDictionary <char, int> result1 = counter.GetCharCounts(); counter.Add(EmbeddedFiles.Medium); Thread.Sleep(250); IReadOnlyDictionary <char, int> result2 = counter.GetCharCounts(); Assert.That(result2.Count, Is.GreaterThan(result1.Count)); } }
public void GetCharCounts_ShouldReturnTheFinalCountForAllAddedFiles() { using (var counter = new MultiFileCharacterCounter()) { counter.Add(EmbeddedFiles.Medium); counter.Add(EmbeddedFiles.Large); counter.Add(EmbeddedFiles.Huge); IReadOnlyDictionary <char, int> result1 = counter.GetCharCounts(); Assert.That(result1, Is.Not.Empty); Thread.Sleep(250); IReadOnlyDictionary <char, int> result2 = counter.GetCharCounts(); Assert.That(result2, Is.Not.Empty); Assert.That(result2, Is.EqualTo(result1)); } }
public void GetCharCounts_ShouldReturnValue_WhenCalledWhileAddsAreOccurringOnOtherThreads() { const int NumAdds = 1000, NumGets = 10000; var counter = new MultiFileCharacterCounter(); Task[] addTasks = Enumerable.Range(0, NumAdds).Select(i => Task.Factory.StartNew(() => counter.Add(EmbeddedFiles.Medium))).ToArray(); var results = Enumerable.Range(0, NumGets).Select(i => counter.GetCharCounts()).ToList(); Assert.That(results.All(d => d != null)); Task.WaitAll(addTasks); }