public void EntitiesCanBeSuccesfullyUsedInDictionariesAsKeys_True_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyOne = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; TestDomain.Keys.VeryComplexStructKey veryComplexKeyTwo = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 3, TextId = "4", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyOne; secondVeryComplexEntity.Id = veryComplexKeyTwo; firstVeryComplexEntity.Name = "SameProp"; secondVeryComplexEntity.Name = "SameProp"; Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string>(); entityDict.Add(firstVeryComplexEntity, value: "FirstEntity"); entityDict.Add(secondVeryComplexEntity, value: "SecondEntity"); var expected = true; var actual = (entityDict[firstVeryComplexEntity] == "FirstEntity") && (entityDict[secondVeryComplexEntity] == "SecondEntity"); Assert.IsTrue(actual == expected, message: "You should be able to use the entity as Key, taking into account only its key value"); }
public void ComparingEntitiesWithDifferentVeryComplexKey_IsNotEqual_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyOne = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; TestDomain.Keys.VeryComplexStructKey veryComplexKeyTwo = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 3, TextId = "4", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyOne; secondVeryComplexEntity.Id = veryComplexKeyTwo; firstVeryComplexEntity.Name = "SameProp"; secondVeryComplexEntity.Name = "SameProp"; var expected = false; var actual = firstVeryComplexEntity == secondVeryComplexEntity; Assert.IsTrue(actual == expected, message: "Both entities should not be equal due to having different very complex key"); }
public void HashCollisionsAreWithinLimitsVeryComplexKey_ReturnsTrue_NoException() { Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string>(); object syncObject = new object(); int errors = 0; int maxIterations = 1000000; Parallel.For(fromInclusive: 0, toExclusive: maxIterations, body: (iteration) => { try { TestDomain.Entities.VeryComplexKeyEntity entity = new TestDomain.Entities.VeryComplexKeyEntity(); entity.Id = new TestDomain.Keys.VeryComplexStructKey() { NumericId = iteration, TextId = iteration.ToString(), UniqueGuidId = Guid.NewGuid() }; entity.Name = "Entity " + iteration; lock (syncObject) { entityDict.Add(entity, iteration.ToString()); } } catch { Interlocked.Increment(ref errors); } }); var limit = 1; var expected = true; var actual = (errors < limit); Assert.IsTrue(actual == expected, message: "The hashing algoritm generates more than " + limit + " collision per " + maxIterations + " entities"); Assert.IsTrue(entityDict.Count == maxIterations - errors, message: "Something wrong happened running the test, the right number of elements where not introduced in the dictionary"); }
public void YouCannotAddTwiceTheSameEntityAsKeyToADictionary_ArgumentException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyToShare = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyToShare; secondVeryComplexEntity.Id = veryComplexKeyToShare; firstVeryComplexEntity.Name = "FirstProp"; secondVeryComplexEntity.Name = "SecondProp"; Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary <TestDomain.Entities.VeryComplexKeyEntity, string>(); entityDict.Add(firstVeryComplexEntity, value: "FirstEntity"); entityDict.Add(secondVeryComplexEntity, value: "SecondEntity"); }
public void ComparingEntitiesWithDifferentVeryComplexKeyCanHandleNulls_IsEqual_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyToShare = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = null, UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyToShare; secondVeryComplexEntity.Id = veryComplexKeyToShare; firstVeryComplexEntity.Name = "FirstProp"; secondVeryComplexEntity.Name = "SecondProp"; var expected = true; var actual = firstVeryComplexEntity == secondVeryComplexEntity; Assert.IsTrue(actual == expected, message: "Both entities should be equal due to having same very complex key"); }
public void HashCollisionsAreWithinLimitsVeryComplexKey_ReturnsTrue_NoException() { Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string>(); object syncObject = new object(); int errors = 0; int maxIterations = 1000000; Parallel.For(fromInclusive: 0, toExclusive: maxIterations, body: (iteration) => { try { TestDomain.Entities.VeryComplexKeyEntity entity = new TestDomain.Entities.VeryComplexKeyEntity(); entity.Id = new TestDomain.Keys.VeryComplexStructKey() { NumericId = iteration, TextId = iteration.ToString(), UniqueGuidId = Guid.NewGuid() }; entity.Name = "Entity " + iteration; lock (syncObject) { entityDict.Add(entity, iteration.ToString()); } } catch { Interlocked.Increment(ref errors); } }); var limit = 1; var expected = true; var actual = (errors < limit); Assert.IsTrue(actual == expected, message: "The hashing algoritm generates more than " + limit + " collision per " + maxIterations + " entities"); Assert.IsTrue(entityDict.Count == maxIterations - errors, message: "Something wrong happened running the test, the right number of elements where not introduced in the dictionary"); }
public void YouCannotAddTwiceTheSameEntityAsKeyToADictionary_ArgumentException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyToShare = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyToShare; secondVeryComplexEntity.Id = veryComplexKeyToShare; firstVeryComplexEntity.Name = "FirstProp"; secondVeryComplexEntity.Name = "SecondProp"; Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string>(); entityDict.Add(firstVeryComplexEntity, value: "FirstEntity"); entityDict.Add(secondVeryComplexEntity, value: "SecondEntity"); }
public void EntitiesCanBeSuccesfullyUsedInDictionariesAsKeys_True_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyOne = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; TestDomain.Keys.VeryComplexStructKey veryComplexKeyTwo = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 3, TextId = "4", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyOne; secondVeryComplexEntity.Id = veryComplexKeyTwo; firstVeryComplexEntity.Name = "SameProp"; secondVeryComplexEntity.Name = "SameProp"; Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string> entityDict = new Dictionary<TestDomain.Entities.VeryComplexKeyEntity, string>(); entityDict.Add(firstVeryComplexEntity, value: "FirstEntity"); entityDict.Add(secondVeryComplexEntity, value: "SecondEntity"); var expected = true; var actual = (entityDict[firstVeryComplexEntity] == "FirstEntity") && (entityDict[secondVeryComplexEntity] == "SecondEntity"); Assert.IsTrue(actual == expected, message: "You should be able to use the entity as Key, taking into account only its key value"); }
public void ComparingEntitiesWithDifferentVeryComplexKeyCanHandleNulls_IsEqual_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyToShare = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = null, UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyToShare; secondVeryComplexEntity.Id = veryComplexKeyToShare; firstVeryComplexEntity.Name = "FirstProp"; secondVeryComplexEntity.Name = "SecondProp"; var expected = true; var actual = firstVeryComplexEntity == secondVeryComplexEntity; Assert.IsTrue(actual == expected, message: "Both entities should be equal due to having same very complex key"); }
public void ComparingEntitiesWithDifferentVeryComplexKey_IsNotEqual_NoException() { TestDomain.Entities.VeryComplexKeyEntity firstVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Entities.VeryComplexKeyEntity secondVeryComplexEntity = new TestDomain.Entities.VeryComplexKeyEntity(); TestDomain.Keys.VeryComplexStructKey veryComplexKeyOne = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 1, TextId = "2", UniqueGuidId = Guid.NewGuid() }; TestDomain.Keys.VeryComplexStructKey veryComplexKeyTwo = new TestDomain.Keys.VeryComplexStructKey() { NumericId = 3, TextId = "4", UniqueGuidId = Guid.NewGuid() }; firstVeryComplexEntity.Id = veryComplexKeyOne; secondVeryComplexEntity.Id = veryComplexKeyTwo; firstVeryComplexEntity.Name = "SameProp"; secondVeryComplexEntity.Name = "SameProp"; var expected = false; var actual = firstVeryComplexEntity == secondVeryComplexEntity; Assert.IsTrue(actual == expected, message: "Both entities should not be equal due to having different very complex key"); }