public void TryAddEntryExists() { var concurrentArray = new ConcurrentArrayBuilder <string, object>().Build(); var existingEntry = new Entry <string, object>(42, "Foo", null); concurrentArray.TryAdd(existingEntry); var addInfo = concurrentArray.TryAdd(new Entry <string, object>(42, "Foo", "Bar")); addInfo.OperationResult.Should().Be(AddResult.ExistingEntryFound); addInfo.TargetEntry.Should().Be(existingEntry); }
public void ConcurrentAddTest() { var processorCount = Environment.ProcessorCount; var entryCount = processorCount * 100000; var allNumbers = Enumerable.Range(1, entryCount).ToArray(); var groupsPerTask = allNumbers.GroupBy(number => number % processorCount) .ToArray(); var concurrentArray = new ConcurrentArrayBuilder <int, object>().WithCapacity(LinearDoublingPrimeStrategy.GetNextCapacity(entryCount)) .Build(); Parallel.ForEach(groupsPerTask, group => { foreach (var number in group) { var addResult = concurrentArray.TryAdd(new Entry <int, object>(number.GetHashCode(), number, null)); addResult.OperationResult.Should().Be(AddResult.AddSuccessful); } }); concurrentArray.Count.Should().Be(allNumbers.Length); foreach (var number in allNumbers) { var entry = concurrentArray.Find(number.GetHashCode(), number); entry.Should().NotBeNull(); } }
public void TryAddParameterNull() { var concurrentArray = new ConcurrentArrayBuilder <string, object>().Build(); Action act = () => concurrentArray.TryAdd(null); act.ShouldThrow <ArgumentNullException>() .And.ParamName.Should().Be("entry"); }
public void SimpleAddAndRetrieve(Entry <string, string> entry) { var concurrentArray = new ConcurrentArrayBuilder <string, string>().Build(); var tryAddResult = concurrentArray.TryAdd(entry); var foundEntry = concurrentArray.Find(entry.HashCode, entry.Key); tryAddResult.OperationResult.Should().Be(AddResult.AddSuccessful); foundEntry.Should().BeSameAs(entry); }
public void CountMustReflectAddedEntries(Entry <int, string>[] entries) { var concurrentArray = new ConcurrentArrayBuilder <int, string>().Build(); foreach (var entry in entries) { concurrentArray.TryAdd(entry); } concurrentArray.Count.Should().Be(entries.Length); }
public void TryAddWhenArrayIsFull() { var concurrentArray = new ConcurrentArrayBuilder <int, object>().WithCapacity(4) .Build() .FillArray(); var addInfo = concurrentArray.TryAdd(new Entry <int, object>(5, 5, null)); addInfo.OperationResult.Should().Be(AddResult.ArrayFull); addInfo.TargetEntry.Should().BeNull(); }
public void CustomKeyComparer() { var keyComparerMock = new KeyComparerMock(); var concurrentArray = new ConcurrentArrayBuilder <int, object>().WithKeyComparer(keyComparerMock) .Build(); concurrentArray.TryAdd(new Entry <int, object>(6, 6, null)); concurrentArray.Find(6, 6); keyComparerMock.EqualsMustHaveBeenCalledAtLeastOnce(); }
public void AddAndRetrieveAll(Entry <int, string>[] entries) { var concurrentArray = new ConcurrentArrayBuilder <int, string>().Build(); foreach (var entry in entries) { concurrentArray.TryAdd(entry); } foreach (var entry in entries) { var foundEntry = concurrentArray.Find(entry.HashCode, entry.Key); foundEntry.Should().BeSameAs(entry); } }