Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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);
         }
     }
 }
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
 public void DuplicateKeys()
 {
     using (var query = TestPerson.CreatePeopleDictionary().ToActiveDictionary((key, value) => new KeyValuePair <int, TestPerson>(0, value)))
         Assert.IsNotNull(query.OperationFault);
 }