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)); }
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); }