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_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);
 }