public void MergeRemoves_SingleValueWithEmptyRepository_AddsElementsToTheRepository(TestType value, Guid tag, long timestamp) { var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp + 1, true); _repository.PersistElements(new HashSet <OUR_OptimizedSetElement <TestType> > { new (value, tag, timestamp, false) }.ToImmutableHashSet());
public void MergeAdds_IsCommutative(Guid firstTag, Guid secondTag, long timestamp) { var firstElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(), firstTag, timestamp, false); var secondElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(), secondTag, timestamp, false); var thirdElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(), secondTag, timestamp, false); var fourthElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(), firstTag, timestamp, false); var fifthElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(), firstTag, timestamp, false); var firstRepository = new OUR_OptimizedSetRepository(); var firstService = new OUR_OptimizedSetService <TestType>(firstRepository); _repository.PersistElements(new HashSet <OUR_OptimizedSetElement <TestType> > { firstElement, secondElement, thirdElement }.ToImmutableHashSet()); firstService.Merge(new HashSet <OUR_OptimizedSetElement <TestType> > { fourthElement, fifthElement }.ToImmutableHashSet()); var firstRepositoryValues = firstRepository.GetElements(); var secondRepository = new OUR_OptimizedSetRepository(); var secondService = new OUR_OptimizedSetService <TestType>(secondRepository); _repository.PersistElements(new HashSet <OUR_OptimizedSetElement <TestType> > { fourthElement, fifthElement }.ToImmutableHashSet()); secondService.Merge(new HashSet <OUR_OptimizedSetElement <TestType> > { firstElement, secondElement, thirdElement }.ToImmutableHashSet()); var secondRepositoryValues = firstRepository.GetElements(); Assert.Equal(firstRepositoryValues, secondRepositoryValues); }
public void Update_NotExistingValue_DoesNotAddToTheAddsSet(TestType value, Guid tag, long timestamp) { var ourSet = new OUR_OptimizedSet <TestType>(); ourSet = ourSet.Update(value, tag, timestamp); var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); Assert.DoesNotContain(element, ourSet.Elements); }
public void Add_AddsElementToAddsSet(TestType value, Guid tag, long timestamp) { var ourSet = new OUR_OptimizedSet <TestType>(); ourSet = ourSet.Add(value, tag, timestamp); var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); Assert.Contains(element, ourSet.Elements); }
public void Add_Concurrent_AddsOnlyOneElement(TestType value, Guid tag, long timestamp) { var ourSet = new OUR_OptimizedSet <TestType>(); ourSet = ourSet.Add(value, tag, timestamp); ourSet = ourSet.Add(value, tag, timestamp); var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); Assert.Equal(1, ourSet.Elements.Count(v => Equals(v, element))); }
public void MergeAdds_SingleValueWithEmptyRepository_AddsElementsToTheRepository(TestType value, Guid tag, long timestamp) { var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); _ourSetService.Merge(new HashSet <OUR_OptimizedSetElement <TestType> > { element }.ToImmutableHashSet()); var repositoryValues = _repository.GetElements(); Assert.Equal(1, repositoryValues.Count(x => Equals(x, element))); }
public void Create_CreatesSetWithElements(OUR_OptimizedSetElement <TestType> one, OUR_OptimizedSetElement <TestType> two, OUR_OptimizedSetElement <TestType> three) { var elements = new[] { one, two, three }.ToImmutableHashSet(); var ourSet = new OUR_OptimizedSet <TestType>(elements); Assert.Equal(elements.Count, ourSet.Elements.Count); foreach (var element in elements) { Assert.Contains(element, ourSet.Elements); } }
public void Update_UpdatesElementInAddsSet(TestType value, Guid tag, long timestamp) { var ourSet = new OUR_OptimizedSet <TestType>(); var newValue = _builder.Build(value.Id); var newElement = new OUR_OptimizedSetElement <TestType>(newValue, tag, timestamp + 1, false); ourSet = ourSet.Add(value, tag, timestamp); ourSet = ourSet.Update(newValue, tag, timestamp + 1); var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); Assert.Contains(newElement, ourSet.Elements); Assert.DoesNotContain(element, ourSet.Elements); }
public void MergeAdds_IsIdempotent(HashSet <OUR_OptimizedSetElement <TestType> > values, TestType value, Guid tag, long timestamp) { _repository.PersistElements(values.ToImmutableHashSet()); var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); values.Add(element); _ourSetService.Merge(values.ToImmutableHashSet()); _ourSetService.Merge(values.ToImmutableHashSet()); _ourSetService.Merge(values.ToImmutableHashSet()); var repositoryValues = _repository.GetElements(); AssertContains(values, repositoryValues); }
public void MergeAdds_UpdatedElementWithLowerTimestamp_DoesNotDoAnything(TestType value, Guid tag, long timestamp) { var element = new OUR_OptimizedSetElement <TestType>(value, tag, timestamp, false); _repository.PersistElements(new HashSet <OUR_OptimizedSetElement <TestType> > { element }.ToImmutableHashSet()); var newElement = new OUR_OptimizedSetElement <TestType>(_builder.Build(value.Id), tag, timestamp - 1, false); _ourSetService.LocalAdd(newElement.Value, newElement.Tag, newElement.Timestamp); var repositoryValues = _repository.GetElements(); Assert.Equal(1, repositoryValues.Count(x => Equals(x, element))); Assert.Equal(0, repositoryValues.Count(x => Equals(x, newElement))); }