示例#1
0
        public void Convolution()
        {
            var a        = new long[] { 1, 2, 3, 4 };
            var b        = new long[] { 5, 6, 7, 8, 9 };
            var expected = new long[] { 5, 16, 34, 60, 70, 70, 59, 36 };

            CollectionAssert.AreEqual(expected, Dft.Convolution(a, b));
            CollectionAssert.AreEqual(expected, Dft0.Convolution(a, b));
            CollectionAssert.AreEqual(expected, Ntt.Convolution(a, b));
            CollectionAssert.AreEqual(expected, Ntt0.Convolution(a, b));
        }
示例#2
0
        public void Dft_Fft()
        {
            var n = 1 << 4;
            var a = Enumerable.Range(3, n).ToArray();
            var c = Array.ConvertAll(a, x => new Complex(x, 0));

            var t0 = Dft0.Naive(c);
            var r0 = Dft0.Naive(t0, true).ToInt();
            var t1 = Dft0.Fft(c);
            var r1 = Dft0.Fft(t1, true).ToInt();

            var dft = new Dft(n);
            var t2  = dft.Fft(c);
            var r2  = dft.Fft(t2, true).ToInt();

            CollectionAssert.AreEqual(a, r0);
            CollectionAssert.AreEqual(a, r1);
            CollectionAssert.AreEqual(a, r2);
        }