% This script tests functor.m for correctness functor = @(x) myfft(x); fprintf('Test 1: Gaussian ...'); sample = exp(-linspace(-4,4,256).^2); assert(all(abs(functor(sample) - fft(sample))<1e-10)); fprintf('\tpassed\n'); fprintf('Test 1.1: Gaussian with a different Matlab dimension ...'); sample = exp(-linspace(-4,4,256).^2)'; assert(all(abs(functor(sample) - fft(sample))<1e-10)); fprintf('\tpassed\n'); fprintf('Test 1.2: Gaussian complex ...'); sample = 1i*exp(-linspace(-4,4,256).^2); assert(all(abs(functor(sample) - fft(sample))<1e-10)); fprintf('\tpassed\n'); fprintf('Test 2: sawtooth ...'); sample = linspace(-1,1,256); assert(all(abs(functor(sample) - fft(sample))<1e-10)); fprintf('\tpassed\n'); fprintf('Test 3: sin and sin2 ...'); sample = sin(linspace(-pi,pi,256)); assert(all(abs(functor(sample) - fft(sample))<1e-10)); sample = sin(2*linspace(-pi,pi,256)); assert(all(abs(functor(sample) - fft(sample))<1e-10)); fprintf('\tpassed\n'); Ns = 10:25; times = zeros(length(Ns),1); FFTtimes = zeros(length(Ns),1); % Time complexity test for k=Ns fprintf('\tEvaluating step %d \n', k); sample = exp(-linspace(-4,4,2^k).^2)'; % functor time tic; functor(sample); times(k-Ns(1)+1) = toc; % fft time tic; fft(sample); FFTtimes(k-Ns(1)+1) = toc; end Ns = 2.^Ns % output to external file fout = fopen("output/complexTimeFFT.out", 'w'); fprintf(fout, "N T FFT\n") for k = 1:length(Ns) fprintf(fout, "%g %g %g\n", Ns(k), times(k), FFTtimes(k)) end fclose(fout); % show graph figure grid on xlabel('N') ylabel('Elapsed time') loglog(Ns, times, Ns, FFTtimes) fprintf('All tests passed!\n');