示例#1
0
        public void Iterator()
        {
            var d1 = new[] { "Foo", "Bar", "Baz" };
            var d2 = new[] { "One", "Two", "Three", "Four", "Five" };
            var d3 = new[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturnday", "Sunday" };

            var d = new HyperDictionary <string, int>(3);
            var v = 1;

            foreach (var k1 in d1)
            {
                foreach (var k2 in d2)
                {
                    foreach (var k3 in d3)
                    {
                        d[k1, k2, k3] = v++;
                    }
                }
            }

            var l = d1.Length * d2.Length * d3.Length;

            Assert.AreEqual(l, d.Count);
            var c = 0;

            foreach (var kvp in d)
            {
                Assert.AreEqual(c++ + 1, kvp.Value);
            }
            Assert.AreEqual(l, c);
            Assert.AreEqual(l, d[d1.Reverse().First(), d2.Reverse().First(), d3.Reverse().First()]);
        }
示例#2
0
 public void ICollectionCopyToThrowsArgumentIndexExceptionWithArrayIndexPastEnd()
 {
     var d = new HyperDictionary();
     d.Add("foo", "bar");
     d.Add("baz", "boo");
     d.CopyTo(new KeyValuePair<string, object>[2], 1);
 }
示例#3
0
        public void ExtendedPropertiesWork()
        {
            var baz = new string[] { "hello", "there" };
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChild(two);
            two.ExtendProperty("baz", new object[] { 2, 3, 4 }); //NOTE: Integers, not strings!

            //Other verification (sanity)
            Assert.AreEqual("foo value", two["foo"]);
            Assert.AreEqual("bar value", two["bar"]);

            Assert.IsFalse(two.HasOwnProperty("foo"));
            Assert.IsFalse(two.HasOwnProperty("bar"));

            //Interesting assertions for this test
            Assert.IsTrue(two.HasOwnProperty("baz"));

            Assert.AreEqual("hello there 2 3 4", String.Join(" ", two["baz"] as IEnumerable<object>));
            Assert.AreEqual("hello there", String.Join(" ", one["baz"] as IEnumerable<object>));
        }
示例#4
0
        public void AddChildAddsItemToChildrenOfParent()
        {
            var one = new HyperDictionary();
            var two = new HyperDictionary();
            one.AddChild(two);

            var oneChildrenInfo = one.GetType().GetField("children", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var oneChildren = oneChildrenInfo.GetValue(one) as IEnumerable<HyperDictionary>;
            Assert.IsTrue(oneChildren.Contains(two));
        }
示例#5
0
 void Init(HyperDictionary <TKey, TValue> data)
 {
     GrandTotal = aggregatorFactories.Select(f => f.Create()).ToArray();
     foreach (var kvp in data)
     {
         foreach (var a in GrandTotal)
         {
             a.Add(kvp.Value);
         }
     }
 }
示例#6
0
        public void Basics()
        {
            var d = new HyperDictionary <string, int>(3)
            {
                { 1, "Foo", "Blah", "Blubb" },
                { 2, "Bar", "Blah", "Blubb" },
                { 3, "Baz", "Blah", "Blubb" }
            };

            Assert.AreEqual(1, d["Foo", "Blah", "Blubb"]);
            Assert.AreEqual(2, d["Bar", "Blah", "Blubb"]);
            Assert.AreEqual(3, d["Baz", "Blah", "Blubb"]);

            Assert.ThrowsException <ArgumentException>(() => d.Add(3, "Baz", "Blah", "Blubb"));
            d["Baz", "Blah", "Blubb"] = 4;
            Assert.AreEqual(4, d["Baz", "Blah", "Blubb"]);
            Assert.ThrowsException <KeyNotFoundException>(() => d["a", "b", "c"]);

            Assert.AreEqual(3, d.Count);
            d.Clear();
            Assert.AreEqual(0, d.Count);
        }
示例#7
0
 public Pivot(HyperDictionary <TKey, TValue> data, IEnumerable <IAggregatorFactory> factories)
 {
     aggregatorFactories = factories.ToArray();
     Init(data);
 }
示例#8
0
 public PivotTest()
 {
     _data = new HyperDictionary <string, int>(2)
     {
示例#9
0
        private static dynamic InhertiableHyperDictionary()
        {
            Console.WriteLine("Using HyperDictionary to show dictionary inheritance\n==================================================");
            var top = new HyperDictionary("top");
            top["eyes"] = "brown";
            top["hair"] = "pointy";

            var second = new HyperDictionary("second");
            second.InheritsFrom(top);
            second["hair"] = "straight";

            Console.WriteLine("top[\"eyes\"]:\t{0}", top["eyes"]);
            Console.WriteLine("top[\"hair\"]:\t{0}", top["hair"]);
            Console.WriteLine("second[\"eyes\"]:\t{0}", second["eyes"]);
            Console.WriteLine("second[\"hair\"]:\t{0}", second["hair"]);

            //Extends and removes using an IEnumerable<object> value
            top["things"] = new string[] { "first thing", "second thing" };

            var third = new HyperDictionary("third");
            third.InheritsFrom(second);
            third.RemoveProperty("hair");
            third.ExtendProperty("things", new object[] { 3, 4, 5 });

            //Output members of third - note the absence of "hair" member
            Console.Write("third members:\n");
            foreach (object o in third)
            {
                Console.WriteLine(o);
            }
            Console.WriteLine();

            // Output the extended list of items in "things",
            // some from top and some from third.
            // And notice: DIFFERENT DATA TYPES!
            Console.Write("third things:\t");
            var things = third["things"] as IEnumerable<object>;
            foreach (object thing in things)
            {
                Console.Write(" | " + thing.ToString());
            }
            Console.Write(" | ");
            Console.WriteLine();

            Console.WriteLine("Making sure TryGetProperty works...should have 'not set' as the next value...");
            object stomach;
            if (third.TryGetProperty("stomach", out stomach)) Console.WriteLine("third\tstomach:\t{0}", stomach);
            else Console.WriteLine("not set - third.stomach");

            Console.WriteLine();
            Pause();

            return third;
        }
示例#10
0
 public void ICollectionCopyToThrowsArgumentIndexExceptionWithTooSmallDestinationArray()
 {
     var d = new HyperDictionary();
     d.Add("foo", "bar");
     d.Add("baz", "boo");
     d.CopyTo(new KeyValuePair<string, object>[1], 0);
 }
示例#11
0
        public void ICollectionCopyToWithZeroArrayIndexWorks()
        {
            var a = new KeyValuePair<string, object>[3];
            a[0] = new KeyValuePair<string, object>("first", null);
            a[1] = new KeyValuePair<string, object>("second", "i'm second");
            a[2] = new KeyValuePair<string, object>("third", "i'm third");
            var d = new HyperDictionary();
            d.Add("1st", "HyperDictionary first");
            d.Add("2nd", "HyperDictionary second");

            d.CopyTo(a, 0);
            Assert.AreEqual("1st", a[0].Key);
            Assert.AreEqual("HyperDictionary first", a[0].Value);
            Assert.AreEqual("2nd", a[1].Key);
            Assert.AreEqual("HyperDictionary second", a[1].Value);
            Assert.AreEqual("third", a[2].Key);
            Assert.AreEqual("i'm third", a[2].Value);
        }
示例#12
0
        public void ThreeLevelPropertiesWork()
        {
            var baz = new string[] { "hello", "there" };
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            var twoPrime = new HyperDictionary("two'");
            var three = new HyperDictionary("three");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChildren(new HyperDictionary[] { two, twoPrime });
            two.ExtendProperty("baz", new object[] { 2, 3, 4 }); //NOTE: Integers, not strings!

            three.InheritsFrom(two);
            three["bar"] = "three bar value";
            three.ExtendProperty("baz", new object[] { "three-baz" });

            //Other verification (sanity)
            Assert.AreEqual("foo value", two["foo"]);
            Assert.AreEqual("bar value", two["bar"]);

            Assert.IsFalse(two.HasOwnProperty("foo"));
            Assert.IsFalse(two.HasOwnProperty("bar"));

            //Interesting assertions for this test
            Assert.AreSame(one["foo"], twoPrime["foo"]);
            Assert.AreSame(one["bar"], twoPrime["bar"]);
            Assert.AreSame(one["baz"], twoPrime["baz"]);

            Assert.IsTrue(two.HasOwnProperty("baz"));
            Assert.IsTrue(three.HasOwnProperty("baz"));
            Assert.IsTrue(three.HasOwnProperty("bar"));
            Assert.IsFalse(three.HasOwnProperty("foo"));

            Assert.AreEqual("foo value", three["foo"]);
            Assert.AreEqual("three bar value", three["bar"]);

            Assert.AreEqual("hello there 2 3 4", String.Join(" ", two["baz"] as IEnumerable<object>));
            Assert.AreEqual("hello there", String.Join(" ", one["baz"] as IEnumerable<object>));
            Assert.AreEqual("hello there 2 3 4 three-baz", String.Join(" ", three["baz"] as IEnumerable<object>));
        }
示例#13
0
        public void ICollectionValuesOwnedPropertiesWork()
        {
            var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary();
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            var values = one.Values;

            Assert.IsTrue(values.Contains("foo value"));
            Assert.IsTrue(values.Contains("bar value"));
            Assert.IsTrue(values.Contains(baz));
        }
示例#14
0
        public void OwnedPropertiesWork()
        {
            var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary();
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            Assert.AreEqual("foo value", one["foo"]);
            Assert.AreEqual("bar value", one["bar"]);
            Assert.AreSame(baz, one["baz"]);

            Assert.IsTrue(one.HasOwnProperty("foo"));
            Assert.IsTrue(one.HasOwnProperty("bar"));
            Assert.IsTrue(one.HasOwnProperty("baz"));
        }
示例#15
0
        public void OverriddenPropertiesWork()
        {
            var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChild(two);
            two["bar"] = "two's bar value";

            //Other verification (sanity)
            Assert.AreEqual("foo value", two["foo"]);
            Assert.AreSame(baz, two["baz"]);

            Assert.IsFalse(two.HasOwnProperty("foo"));
            Assert.IsFalse(two.HasOwnProperty("baz"));

            //Interesting assertions for this test
            Assert.AreEqual("two's bar value", two["bar"]);
            Assert.AreEqual("bar value", one["bar"]);
            Assert.IsTrue(two.HasOwnProperty("bar"));
        }
示例#16
0
        public void ICollectionValuesExtendedPropertiesWork()
        {
            var baz = new string[] { "hello", "there" };
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["baz"] = baz;

            two.InheritsFrom(one);
            var twoBaz = new object[] { 2, 3, 4 }; //NOTE: Integers, not strings!
            two.ExtendProperty("baz", twoBaz);

            var ones = one.Values;
            var twos = two.Values;

            Assert.IsTrue(ones.Contains(baz));
            var tb = twos.ElementAt(0) as IEnumerable<object>;
            Assert.AreEqual("hello there 2 3 4", String.Join(" ", tb));
        }
示例#17
0
        public void InheritsFromDoesNotAddItemToChildrenOfParent()
        {
            var one = new HyperDictionary();
            var two = new HyperDictionary();
            two.InheritsFrom(one);

            var oneChildrenInfo = one.GetType().GetField("children", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var oneChildren = oneChildrenInfo.GetValue(one) as IEnumerable<HyperDictionary>;
            Assert.IsFalse(oneChildren.Contains(two));
        }
示例#18
0
        public void InheritedPropertiesWork()
        {
            var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChild(two);
            two["whatever"] = "big W";

            Assert.AreEqual("foo value", two["foo"]);
            Assert.AreEqual("bar value", two["bar"]);
            Assert.AreEqual("big W", two["whatever"]);

            Assert.IsFalse(two.HasOwnProperty("foo"));
            Assert.IsFalse(two.HasOwnProperty("bar"));
            Assert.IsFalse(two.HasOwnProperty("baz"));
            Assert.IsTrue(two.HasOwnProperty("whatever"));

            try
            {
                var whatever = one["whatever"];
                Assert.Fail("Not supposed to reach here since this object should not have this property");
            }
            catch (IndexOutOfRangeException)
            {
                //Pass!
            }
        }
示例#19
0
        public void ICollectionValuesThreeLevelPropertiesWork()
        {
            var baz = new string[] { "hello", "there" };
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            var twoPrime = new HyperDictionary("two'");
            var three = new HyperDictionary("three");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChildren(new HyperDictionary[] { two, twoPrime });
            two.ExtendProperty("baz", new object[] { 2, 3, 4 }); //NOTE: Integers, not strings!

            three.InheritsFrom(two);
            three["bar"] = "three bar value";
            three.ExtendProperty("baz", new object[] { "three-baz" });

            var ones = one.Values;
            var twos = two.Values;
            var twoPrimes = twoPrime.Values;
            var threes = three.Values;

            //Other verification (sanity)
            Assert.IsTrue(twos.Contains("foo value"));
            Assert.IsTrue(twos.Contains("bar value"));

            //Interesting assertions for this test
            Assert.IsTrue(twoPrimes.Contains("foo value"));
            Assert.IsTrue(twoPrimes.Contains("bar value"));
            Assert.IsTrue(twoPrimes.Contains(baz));

            Assert.IsTrue(threes.Contains("foo value"));
            Assert.IsTrue(threes.Contains("three bar value"));
            Assert.IsFalse(threes.Contains("bar value"));

            //Elements are in order of keys added, starting with the child and then moving up
            var ob = ones.ElementAt(2) as IEnumerable<object>;
            var tb = twos.ElementAt(0) as IEnumerable<object>;
            var tpb = twoPrimes.ElementAt(2) as IEnumerable<object>;
            var thb = threes.ElementAt(1) as IEnumerable<object>;
            Assert.AreEqual("hello there 2 3 4", String.Join(" ", tb));
            Assert.AreEqual("hello there", String.Join(" ", ob));
            Assert.AreEqual("hello there 2 3 4 three-baz", String.Join(" ", thb));
        }
示例#20
0
        public void ICollectionValuesRemovedPropertiesWork()
        {
            //var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            //one["baz"] = baz;

            two.InheritsFrom(one);
            two.RemoveProperty("bar", "two's bar value"); //You can still assign a value even though you are removing it

            var ones = one.Values;
            var twos = two.Values;

            Assert.IsTrue(ones.Contains("foo value"));
            Assert.IsTrue(ones.Contains("bar value"));
            //Assert.IsTrue(ones.Contains(baz));

            Assert.IsTrue(twos.Contains("foo value"));
            //Assert.IsTrue(twos.Contains(baz));

            Assert.IsFalse(twos.Contains("two's bar value"));
            Assert.IsFalse(twos.Contains("bar value"));

            try
            {
                var bar = two["bar"];
                Assert.Fail("Should not get this far since this object had this property removed");
            }
            catch (IndexOutOfRangeException)
            {
                //Pass!
            }
            catch (Exception)
            {
                Assert.Fail("Raised an exception that was not IndexOutOfRangeException");
            }
        }
示例#21
0
 public Pivot(HyperDictionary <TKey, TValue> data, IEnumerable <string> counters)
 {
     aggregatorFactories = counters.Select(AggregatorFactoryFactory.Create <TValue>).ToArray();
     Init(data);
 }
示例#22
0
        public void RemovedPropertiesWork()
        {
            var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            one["baz"] = baz;

            one.AddChild(two);
            two.RemoveProperty("bar");

            //Other verification (sanity)
            Assert.AreEqual("foo value", two["foo"]);
            Assert.AreSame(baz, two["baz"]);

            Assert.IsFalse(two.HasOwnProperty("foo"));
            Assert.IsFalse(two.HasOwnProperty("baz"));

            //Interesting assertions for this test
            Assert.AreEqual("bar value", one["bar"]);
            Assert.IsTrue(two.HasOwnProperty("bar"));

            try
            {
                var bar = two["bar"];
                Assert.Fail("Should not get this far since this object had this property removed");
            }
            catch (IndexOutOfRangeException)
            {
                //Pass!
            }
            catch (Exception)
            {
                Assert.Fail("Raised an exception that was not IndexOutOfRangeException");
            }
        }
示例#23
0
        public void ICollectionValuesOverriddenPropertiesWork()
        {
            //var baz = new Uri("http://blog.tonyheupel.com");
            var one = new HyperDictionary("one");
            var two = new HyperDictionary("two");
            one["foo"] = "foo value";
            one["bar"] = "bar value";
            //one["baz"] = baz;

            two.InheritsFrom(one);
            two["bar"] = "two's bar value";

            var ones = one.Values;
            var twos = two.Values;

            Assert.IsTrue(ones.Contains("foo value"));
            Assert.IsTrue(ones.Contains("bar value"));
            //Assert.IsTrue(ones.Contains(baz));

            Assert.IsTrue(twos.Contains("foo value"));
            //Assert.IsTrue(twos.Contains(baz));

            Assert.IsTrue(twos.Contains("two's bar value"));
            Assert.IsFalse(twos.Contains("bar value"));
        }