public void PrefixSumTest()
        {
            long[] inputList = new long[] { 0, 3, 4, -2, 7, 3, 11, 5, -8, -9, 2, 4, -8 };
            DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree tree = new DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree(inputList);

            Assert.ThrowsException <IndexOutOfRangeException>(() => tree.PrefixSum(20));
            Assert.ThrowsException <IndexOutOfRangeException>(() => tree.PrefixSum(-5));

            Assert.ThrowsException <ArgumentNullException>(() => new DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree(new long[] { }));
            Assert.ThrowsException <ArgumentNullException>(() => new DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree(null));

            Assert.AreEqual(12, tree.PrefixSum(4));
            Assert.AreEqual(12, tree.PrefixSum(12));
            Assert.AreEqual(7, tree.PrefixSum(2));
        }
        public void SumTest()
        {
            long[] inputList = new long[] { 0, 3, 4, -2, 7, 3, 11, 5, -8, -9, 2, 4, -8 };
            DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree tree = new DSandAlgorithms.Data_Structures.FenwickTree.FenwickTree(inputList);

            Assert.AreEqual(21, tree.Sum(4, 6));
            Assert.AreEqual(12, tree.Sum(1, 12));
            Assert.AreEqual(12, tree.Sum(1, 12));
            Assert.AreEqual(7, tree.Sum(3, 9));

            Assert.ThrowsException <IndexOutOfRangeException>(() => tree.Sum(1, 20));
            Assert.ThrowsException <IndexOutOfRangeException>(() => tree.Sum(-5, 4));

            Assert.ThrowsException <ArgumentException>(() => tree.Sum(9, 3));
            Assert.ThrowsException <ArgumentException>(() => tree.Sum(9, 3));
        }