public void Test()
        {
            var target = new MutableIntMap<double>();
            target.DefaultValue = D;
            Assert.AreEqual(D, target.DefaultValue);
            Assert.AreEqual(D, target.Get(0));

            target.Set(new IntArrow<double>(0, 5, X));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(5));

            target.Set(new IntArrow<double>(4, 5, Y));
            Assert.AreEqual(Y, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(-1));
            Assert.AreEqual(D, target.Get(1000));

            target.Clear(new IntInterval(3, 4));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            // No change:
            target.Clear(new IntInterval(int.MinValue, -1));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            // No change:
            target.Clear(new IntInterval(6, int.MaxValue));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            Assert.AreEqual(
                new []
                {
                    new IntArrow<double>(0, 2, X),
                    new IntArrow<double>(5, 5, Y),
                },
                target.Enumerate());

            target.Clear();
            for (int i = 0; i != 10; ++i)
            {
                Assert.AreEqual(D, target.Get(i), "context #" + i);
            }
        }
        public void Test()
        {
            var target = new MutableIntMap <double>();

            target.DefaultValue = D;
            Assert.AreEqual(D, target.DefaultValue);
            Assert.AreEqual(D, target.Get(0));

            target.Set(new IntArrow <double>(0, 5, X));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(5));

            target.Set(new IntArrow <double>(4, 5, Y));
            Assert.AreEqual(Y, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(-1));
            Assert.AreEqual(D, target.Get(1000));

            target.Clear(new IntInterval(3, 4));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            // No change:
            target.Clear(new IntInterval(int.MinValue, -1));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            // No change:
            target.Clear(new IntInterval(6, int.MaxValue));
            Assert.AreEqual(X, target.Get(0));
            Assert.AreEqual(X, target.Get(1));
            Assert.AreEqual(X, target.Get(2));
            Assert.AreEqual(D, target.Get(3));
            Assert.AreEqual(D, target.Get(4));
            Assert.AreEqual(Y, target.Get(5));
            Assert.AreEqual(D, target.Get(6));

            Assert.AreEqual(
                new []
            {
                new IntArrow <double>(0, 2, X),
                new IntArrow <double>(5, 5, Y),
            },
                target.Enumerate());

            target.Clear();
            for (int i = 0; i != 10; ++i)
            {
                Assert.AreEqual(D, target.Get(i), "context #" + i);
            }
        }