public void ElementsAdded() { var people = TestPerson.CreatePeopleDictionary(); var counts = new BlockingCollection <int>(); using (var query = people.ActiveWhere((key, value) => value.Name !.Length == 4)) { counts.Add(query.Count); people.Add(14, new TestPerson("Jack")); counts.Add(query.Count); people.Add(15, new TestPerson("Chuck")); counts.Add(query.Count); people.AddRange(new KeyValuePair <int, TestPerson>[] { new KeyValuePair <int, TestPerson>(16, new TestPerson("Jill")), new KeyValuePair <int, TestPerson>(17, new TestPerson("Nick")) }); counts.Add(query.Count); people.AddRange(new KeyValuePair <int, TestPerson>[] { new KeyValuePair <int, TestPerson>(18, new TestPerson("Clint")), new KeyValuePair <int, TestPerson>(19, new TestPerson("Harry")) }); counts.Add(query.Count); people.AddRange(new KeyValuePair <int, TestPerson>[] { new KeyValuePair <int, TestPerson>(20, new TestPerson("Dana")), new KeyValuePair <int, TestPerson>(21, new TestPerson("Ray")) }); counts.Add(query.Count); people[7] = new TestPerson("Tony"); counts.Add(query.Count); } Assert.IsTrue(new int[] { 2, 3, 3, 5, 5, 6, 7 }.SequenceEqual(counts)); }
public void SourceManipulation() { var people = TestPerson.CreatePeopleDictionary(); using (var expr = people.ActiveSelect((key, value) => Tuple.Create(key, value.Name.Length))) { void checkValues(params int[] values) => Assert.IsTrue(values.SequenceEqual(expr.OrderBy(t => t.Item1).Select(t => t.Item2))); checkValues(4, 5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); people.Add(people.Count, people[0]); checkValues(4, 5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5, 4); people[0].Name = "Johnny"; checkValues(6, 5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5, 6); people.Remove(people.Count - 1); checkValues(6, 5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); var temp = people[1]; people[1] = people[0]; people[0] = temp; checkValues(5, 6, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); people.Add(-1, people[0]); checkValues(5, 5, 6, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); people.Remove(0); checkValues(5, 6, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); temp = people[-1]; people[-1] = people[1]; people[1] = temp; checkValues(6, 5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); people.Remove(-1); checkValues(5, 7, 4, 5, 6, 3, 5, 7, 7, 6, 5, 5, 5); } }
public async Task SourceManipulation() { var context1 = new AsyncSynchronizationContext(); var context2 = new AsyncSynchronizationContext(); var people = TestPerson.CreatePeopleDictionary(context1); using (var query = people.SwitchContext(context2)) { Assert.AreEqual(14, query.Count); people.Add(14, new TestPerson("Daniel")); await Task.Delay(250); Assert.AreEqual(15, query.Count); people[14] = new TestPerson("Javon"); await Task.Delay(250); Assert.AreEqual("Javon", query[14].Name); people[0] = people[14]; await Task.Delay(250); Assert.AreEqual("Javon", query[0].Name); people.Remove(0); await Task.Delay(250); Assert.AreEqual(14, query.Count); people.Reset(new Dictionary <int, TestPerson> { { 0, new TestPerson("Sarah") } }); await Task.Delay(250); Assert.AreEqual(1, query.Count); } }
public void SourceManipulation() { var people = TestPerson.CreatePeopleDictionary(); using var aggregate = people.ActiveSum((key, value) => value.Name !.Length); Assert.IsNull(aggregate.OperationFault); Assert.AreEqual(74, aggregate.Value); people.Add(people.Count, people[0]); Assert.AreEqual(78, aggregate.Value); people[0].Name = "Johnny"; Assert.AreEqual(82, aggregate.Value); }
public void SourceManipulation() { var people = TestPerson.CreatePeopleDictionary(); using var query = people.ToActiveEnumerable(); void checkSum(int against) => Assert.AreEqual(against, query.Sum(person => person !.Name !.Length)); Assert.AreEqual(0, query.GetElementFaults().Count); checkSum(74); people.Add(people.Count, people[0]); checkSum(78); people[0].Name = "Johnny"; checkSum(82); }
public void SourceManipulation() { foreach (var indexingStrategy in new IndexingStrategy[] { IndexingStrategy.HashTable, IndexingStrategy.SelfBalancingBinarySearchTree }) { var people = TestPerson.CreatePeopleDictionary(); using (var query = people.ToActiveDictionary((key, value) => new KeyValuePair <string, string>(value.Name.Substring(0, 3), value.Name.Substring(3)))) { Assert.IsNull(query.OperationFault); Assert.AreEqual(string.Empty, query["Ben"]); people[6].Name = "Benjamin"; Assert.IsNull(query.OperationFault); Assert.AreEqual("jamin", query["Ben"]); people[6].Name = "Ben"; var benny = new TestPerson("!!!TROUBLE"); people.Add(people.Count, benny); Assert.IsNull(query.OperationFault); benny.Name = "Benny"; Assert.IsNotNull(query.OperationFault); var benjamin = new TestPerson("@@@TROUBLE"); people.Add(people.Count, benjamin); benjamin.Name = "Benjamin"; Assert.IsNotNull(query.OperationFault); benny.Name = "!!!TROUBLE"; Assert.IsNotNull(query.OperationFault); Assert.AreEqual("TROUBLE", query["!!!"]); benjamin.Name = "@@@TROUBLE"; Assert.IsNull(query.OperationFault); Assert.AreEqual("TROUBLE", query["@@@"]); people.Add(people.Count, benjamin); Assert.IsNotNull(query.OperationFault); Assert.AreEqual("TROUBLE", query["@@@"]); benjamin.Name = "###TROUBLE"; Assert.IsNotNull(query.OperationFault); Assert.AreEqual("TROUBLE", query["###"]); people.Add(people.Count, benjamin); Assert.IsNotNull(query.OperationFault); people.Remove(people.Count - 1); Assert.IsNotNull(query.OperationFault); people.Remove(people.Count - 1); Assert.IsNull(query.OperationFault); people.Remove(people.Count - 1); Assert.IsNull(query.OperationFault); people.Remove(people.Count - 1); Assert.IsNull(query.OperationFault); } } }
public void ElementResultChanges() { var people = TestPerson.CreatePeopleDictionary(); var counts = new BlockingCollection <int>(); using (var query = people.ActiveWhere((key, value) => value.Name !.Length == 4)) { counts.Add(query.Count); people[0].Name = "Johnny"; counts.Add(query.Count); people[1].Name = "Emilia"; counts.Add(query.Count); people[12].Name = "Jack"; counts.Add(query.Count); } Assert.IsTrue(new int[] { 2, 1, 1, 2 }.SequenceEqual(counts)); }
public void ElementsRemoved() { var people = TestPerson.CreatePeopleDictionary(); var counts = new BlockingCollection <int>(); using (var query = people.ActiveWhere((key, value) => value.Name !.Length == 5)) { counts.Add(query.Count); people.Remove(1); counts.Add(query.Count); people.Remove(0); counts.Add(query.Count); people.RemoveRange(new int[] { 11, 12 }); counts.Add(query.Count); people.RemoveRange(new int[] { 10, 13 }); counts.Add(query.Count); } Assert.IsTrue(new int[] { 6, 5, 5, 3, 2 }.SequenceEqual(counts)); }
public void DuplicateKeys() { using (var query = TestPerson.CreatePeopleDictionary().ToActiveDictionary((key, value) => new KeyValuePair <int, TestPerson>(0, value))) Assert.IsNotNull(query.OperationFault); }