function [pr] = unitTestBenchopSLV(MTH,tol) clc disp(' ') disp('RUNNING UNIT TEST FOR BENCHOP LOCAL STOCHASTIC VOLATILITY') % File names pr(1).name = 'SABReuCallI_'; pr(2).name = 'SABReuCallII_'; pr(3).name = 'HSTeuCall_'; pr(4).name = 'HSTdnTouch_'; pr(5).name = 'QLSVeuCall_'; pr(6).name = 'QLSVdnTouch_'; pr(7).name = 'HHWeuCallI_'; pr(8).name = 'HHWeuCallII_'; % Reference values pr(1).refval = [0.221383196830866, 0.193836689413803, 0.166240814653231]; pr(2).refval = [0.052450313614407, 0.046585753491306, 0.039291470612989]; pr(3).refval = [0.908502728459621, 9.046650119220969, 28.514786399298796]; pr(4).refval = [0.834539127387590, 0.899829293208866, 0.668399975738358]; pr(5).refval = [0.527472759419533, 8.902347915743665, 29.159828965633729]; pr(6).refval = [0.933800903110254, 0.914799140676374, 0.592983062889906]; pr(7).refval = [37.52, 57.41, 78.58]; %1E-02 pr(8).refval = [35.437896876285350, 54.728065308229503, 75.397596834993621]; %% Finding existing files in the folder disp(' ') disp('Checking existance of files...') disp('**********************') disp(' ') FLAG = zeros(8,1); for i = 1:8 if exist(strcat(pr(i).name,MTH),'file') == 2 || exist(strcat(pr(i).name,MTH),'file') == 6 disp(strcat(pr(i).name,MTH, ' exists and will be tested')) disp(' ') FLAG(i) = 1; else disp(strcat(pr(i).name,MTH, ' does NOT exist')) disp(' ') FLAG(i) = 0; end if (i==2 || i==4 || i==6 || i==8) disp('----------------------') disp(' ') end end %% Testing format and error of the output disp(' ') disp('Running the existing files...') disp(' ') disp('**********************') disp(' ') ind1 = find(FLAG==1); if isempty(ind1) disp('No files to be run. Please check correctness of file names') disp(' ') end for j = 1:length(ind1) i = ind1(j); disp(strcat('Testing ',pr(i).name,MTH,'...')) Uref = pr(i).refval; % To be specified try U = feval(strcat(pr(i).name,MTH),tol); catch ME end if exist('ME','var') == 1 disp(' ') disp('!!!') disp('Failed to run') disp(ME.message) disp('!!!') disp(' ') disp('----------------------') disp(' ') clear ME else if size(U,1)==1 && size(U,2)==size(Uref,2) err = abs(Uref-U); pr(i).err = err; ERR = err; if max(err)>tol disp(' ') disp('The absolute error is larger than the chosen tolerance') disp(' ') disp('----------------------') disp(' ') else disp(' ') disp('All correct') disp(' ') disp('----------------------') disp(' ') end else disp(' ') disp('The output has incorrect format. It must be a vector 1x3') disp(' ') disp('----------------------') disp(' ') end end end disp('TESTING COMPLETED') disp(' ') %disp('TO SEE ERROR VALUES CHECK OUTPUT') disp(' ') disp('PRINTING THE OUTPUT...') disp(' ') disp(' ') for j = 1:length(ind1) i = ind1(j); disp(strcat('Function name: ',' ',pr(i).name,MTH)); disp(' ') ERR = pr(i).err disp('----------------------') disp(' ') end