public void TestRandomly()
        {
            const int Runs = 100;
            var       gen  = new Random();

            for (int run = 0; run < Runs; run++)
            {
                const int MaxSize = 50;

                int size = gen.Next(1, MaxSize);
                int from, to;
                if (size == 0)
                {
                    from = 0;
                    to   = -1;
                }
                else
                {
                    from = gen.Next(0, size - 1);
                    to   = gen.Next(Math.Min(from, size - 1), size - 1);
                }

                var a1 = new DenseDoubleMatrix2D(size, size);
                var p1 = a1.ViewPart(from, from, size - to, size - to);

                int intervalFrom = gen.Next(size / 2, 2 * size);
                int intervalTo   = gen.Next(intervalFrom, 2 * size);

                for (int i = 0; i < size; i++)
                {
                    for (int j = 0; j < size; j++)
                    {
                        a1[i, j] = gen.Next(intervalFrom, intervalTo);
                    }
                }

                var a2 = a1.Copy();
                var p2 = a2.ViewPart(from, from, size - to, size - to);

                const int Column = 0;
                var       s1     = Cern.Colt.Matrix.DoubleAlgorithms.Sorting.QuickSort.Sort(p1, Column);
                var       s2     = Cern.Colt.Matrix.DoubleAlgorithms.Sorting.MergeSort.Sort(p2, Column);

                var v1  = s1.ViewColumn(Column);
                var sv1 = v1.ToString();
                var v2  = s2.ViewColumn(Column);
                var sv2 = v2.ToString();

                Assert.IsTrue(v1.Equals(v2));
            }
        }
        public void TestOperations()
        {
            var a = new DenseDoubleMatrix2D(new[] { new[] { 3d, 6d }, new[] { 5d, 8d }, new[] { -2d, 9d } });
            var b = new DenseDoubleMatrix2D(new[] { new[] { -6d, 1d }, new[] { 0d, 9d }, new[] { 8d, 3d } });

            Assert.AreEqual(new DenseDoubleMatrix2D(new[] { new[] { -3d, 7d }, new[] { 5d, 17d }, new[] { 6d, 12d } }), a.Copy().Assign(b, BinaryFunctions.Plus));
            Assert.AreEqual(new DenseDoubleMatrix2D(new[] { new[] { 9d, 5d }, new[] { 5d, -1d }, new[] { -10d, 6d } }), a.Copy().Assign(b, BinaryFunctions.Minus));
            Assert.AreEqual(new DenseDoubleMatrix2D(new[] { new[] { 6d, 12d }, new[] { 10d, 16d }, new[] { -4d, 18d } }), a.Copy().Assign(UnaryFunctions.Mult(2d)));
            Assert.AreEqual(new DenseDoubleMatrix2D(new[] { new[] { 1.5d, 3d }, new[] { 2.5d, 4d }, new[] { -1d, 4.5d } }), a.Copy().Assign(UnaryFunctions.Div(2d)));
            var c =
                new DenseDoubleMatrix2D(
                    new[] { new[] { 4d, 1d, 9d }, new[] { 6d, 2d, 8d }, new[] { 7d, 3d, 5d }, new[] { 11d, 10d, 12d } });
            var d =
                new DenseDoubleMatrix2D(new[] { new[] { 2d, 9d }, new[] { 5d, 12d }, new[] { 8d, 10d } });

            Assert.AreEqual(
                new DenseDoubleMatrix2D(new[] { new[] { 85d, 138d }, new[] { 86d, 158d }, new[] { 69d, 149d }, new[] { 168d, 339d } }), Algebra.Mult(c, d));
        }