diff --git a/tests/Test.m b/tests/Test.m index 5021898fd986bc796805d081894b8e2d67158bcb..bc1634e515d2efb3b5a9dfa2b884dd0c9686e983 100644 --- a/tests/Test.m +++ b/tests/Test.m @@ -6,6 +6,8 @@ classdef Test < Config a double b double c double + rows double % Number of rows for random matrix + cols double % Number of columns for random matrix end properties(SetAccess = protected) @@ -14,6 +16,8 @@ classdef Test < Config properties(Dependent) e + randomMatrix + randomVect end properties(Access = protected) @@ -22,15 +26,25 @@ classdef Test < Config end methods - function obj = Test(a, b, c, d) + function obj = Test(a, b, c, d, rows, cols) obj.a = a; obj.b = b; obj.c = c; obj.d = d; + obj.rows = rows; % Set rows + obj.cols = cols; % Set cols end function e = get.e(obj) e = obj.c*ones(10000, 10000); end + + function randomMatrix = get.randomMatrix(obj) + randomMatrix = obj.a * randn(obj.rows, obj.cols); + end + + function randomVect = get.randomVect(obj) + randomVect = obj.randomMatrix(1,:); + end end -end \ No newline at end of file +end diff --git a/tests/TestOverride.m b/tests/old/TestOverride.m similarity index 100% rename from tests/TestOverride.m rename to tests/old/TestOverride.m diff --git a/tests/argValidation.m b/tests/old/argValidation.m similarity index 100% rename from tests/argValidation.m rename to tests/old/argValidation.m diff --git a/tests/ascent.m b/tests/old/ascent.m similarity index 100% rename from tests/ascent.m rename to tests/old/ascent.m diff --git a/tests/matlab.mat b/tests/old/matlab.mat similarity index 100% rename from tests/matlab.mat rename to tests/old/matlab.mat diff --git a/tests/speedBenchmark2.m b/tests/old/speedBenchmark2.m similarity index 100% rename from tests/speedBenchmark2.m rename to tests/old/speedBenchmark2.m diff --git a/tests/old/speedBenchmark_old.m b/tests/old/speedBenchmark_old.m new file mode 100644 index 0000000000000000000000000000000000000000..33aff89cadbe7aa7b41728228515cde90f660091 --- /dev/null +++ b/tests/old/speedBenchmark_old.m @@ -0,0 +1,107 @@ +function speed = speedBenchmark_old(len) + %=======READ========= + testClass = Test(1, 2, 3, 4); + testStruct = struct; + + testStruct.a = 1; + testStruct.b = 2; + testStruct.c = 3; + + arr1 = zeros(1, len); + arr2 = zeros(1, len); + + fields = fieldnames(testClass); + + tic + for i = 1:len + arr1(i) = testStruct.(fields{mod(i,3) + 1}); + end + speed.readTime.struct = toc; + + tic + for i = 1:len + arr2(i) = testClass.(fields{mod(i,3) + 1}); + end + speed.readTime.class = toc; + + %=======ASSIGNMENT========= + ms = Mission(true); + cl = Motor(ms); + st = struct(cl); % converting class to a struct. calling of a warning + + len_xcg = length(st.xCg); + a = zeros(1, len_xcg); + b = zeros(1, len_xcg); + c = zeros(1, len_xcg); + d = zeros(1, len_xcg); + + tic + a = cl.xCg; + speed.assignment.std.class = toc; + + tic + c = st.xCg; + speed.assignment.std.struct = toc; + + tic + for i = 1:len_xcg + b(i) = cl.xCg(i); + end + speed.assignment.elementWise.class = toc; + + tic + for i = 1:len_xcg + d(i) = st.xCg(i); + end + speed.assignment.elementWise.struct = toc; + + %=======SCALAR PRODUCT======= + rng; + v1 = randi(1000,len,1); v2 = randi(1000,len,1); + testClass.a = v1; testStruct.a = v1; + testClass.b = v2; testStruct.b = v2; + + tic + scalarProductStruct = dot(testStruct.a,testStruct.b); + speed.scalarProduct.struct = toc; + + tic + scalarProductClass = dot(testClass.a,testClass.b); + speed.scalarProduct.class = toc; + + %=======SUM======= + tic + sumStruct = testStruct.a + testStruct.b; + speed.sum.struct = toc; + + tic + sumClass = testClass.a + testClass.b; + speed.sum.class = toc; + + %=======CROSS PRODUCT======== (MATRICES) + matrix1 = randi([0, 1000], [3,len]); + matrix2 = randi([0, 1000], [3,len]); + + testClass.a = matrix1; testStruct.a = matrix1; + testClass.b = matrix2; testStruct.b = matrix2; + + tic + crossProductStruct = cross(testStruct.a,testStruct.b); + speed.crossProduct.struct = toc; + + tic + crossProductClass = cross(testClass.a,testClass.b); + speed.crossProduct.class = toc; + + %========EIGENVALUES PROBLEM======== (MATRICES) + matrix1 = randi([0, 1000], [len,len]); + testClass.a = matrix1; testStruct.a = matrix1; + + tic + eigStruct = eig(testStruct.a); + speed.eigen.struct = toc; + + tic + eigClass = eig(testClass.a); + speed.eigen.class = toc; +end diff --git a/tests/speedBenchmark_script.m b/tests/old/speedBenchmark_script.m similarity index 100% rename from tests/speedBenchmark_script.m rename to tests/old/speedBenchmark_script.m diff --git a/tests/testAccess.m b/tests/old/testAccess.m similarity index 100% rename from tests/testAccess.m rename to tests/old/testAccess.m diff --git a/tests/operations/assignmentSpeed.m b/tests/operations/assignmentSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..aab9504fc9af31993bc106b4bf116d8ea19c1204 --- /dev/null +++ b/tests/operations/assignmentSpeed.m @@ -0,0 +1,31 @@ +function assignmentTime = assignmentSpeed(len) + % ms = Mission(true); + % cl = Motor(ms); + cl = Test(1,2,3,4, len, len); + st = struct(cl); % converting class to a struct. calling of a warning + + a = zeros(1, len); + b = zeros(1, len); + c = zeros(1, len); + d = zeros(1, len); + + tic + a = cl.randomVect; + assignmentTime.std.class = toc; + + tic + c = st.randomVect; + assignmentTime.std.struct = toc; + + tic + for i = 1:len + b(i) = cl.randomVect(i); + end + assignmentTime.elementWise.class = toc; + + tic + for i = 1:len + d(i) = st.randomVect(i); + end + assignmentTime.elementWise.struct = toc; +end \ No newline at end of file diff --git a/tests/operations/crossProductSpeed.m b/tests/operations/crossProductSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..354e507ca1e3b87b3fce9d03dfc1e65a3bbeffe4 --- /dev/null +++ b/tests/operations/crossProductSpeed.m @@ -0,0 +1,15 @@ +function crossProductTime = crossProductSpeed(len) + matrix1 = randi([0, 1000], [3,len]); + matrix2 = randi([0, 1000], [3,len]); + + testClass.a = matrix1; testStruct.a = matrix1; + testClass.b = matrix2; testStruct.b = matrix2; + + tic + crossProductStruct = cross(testStruct.a,testStruct.b); + crossProductTime.struct = toc; + + tic + crossProductClass = cross(testClass.a,testClass.b); + crossProductTime.class = toc; +end \ No newline at end of file diff --git a/tests/operations/eigenSpeed.m b/tests/operations/eigenSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..6a35022c920d6003a7eb8ae7b6bab87c3a98e70a --- /dev/null +++ b/tests/operations/eigenSpeed.m @@ -0,0 +1,13 @@ +function eigen = eigenSpeed(dim) +%========EIGENVALUES PROBLEM======== (MATRICES) + A = randn(dim,dim); + testClass.a = A; testStruct.a = A; + + tic + eigStruct = eig(testStruct.a); + eigen.struct = toc; + + tic + eigClass = eig(testClass.a); + eigen.class = toc; +end \ No newline at end of file diff --git a/tests/operations/readSpeed.m b/tests/operations/readSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..71d00cca2670623bc26bd35cb2381159616b3f90 --- /dev/null +++ b/tests/operations/readSpeed.m @@ -0,0 +1,25 @@ +function readTime = readSpeed(len) + testClass = Test(1, 2, 3, 4, len, len); + testStruct = struct; + + testStruct.a = 1; + testStruct.b = 2; + testStruct.c = 3; + + arr1 = zeros(1, len); + arr2 = zeros(1, len); + + fields = fieldnames(testClass); + + tic + for i = 1:len + arr1(i) = testStruct.(fields{mod(i,3) + 1}); + end + readTime.struct = toc; + + tic + for i = 1:len + arr2(i) = testClass.(fields{mod(i,3) + 1}); + end + readTime.class = toc; +end \ No newline at end of file diff --git a/tests/operations/scalarProductSpeed.m b/tests/operations/scalarProductSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..de93d58a35870e5c7832d182ddddfe2568929401 --- /dev/null +++ b/tests/operations/scalarProductSpeed.m @@ -0,0 +1,14 @@ +function scalarProductTime = scalarProductSpeed(len) + rng; + v1 = randi(1000,len,1); v2 = randi(1000,len,1); + testClass.a = v1; testStruct.a = v1; + testClass.b = v2; testStruct.b = v2; + + tic + scalarProductStruct = dot(testStruct.a,testStruct.b); + scalarProductTime.struct = toc; + + tic + scalarProductClass = dot(testClass.a,testClass.b); + scalarProductTime.class = toc; +end \ No newline at end of file diff --git a/tests/operations/sumSpeed.m b/tests/operations/sumSpeed.m new file mode 100644 index 0000000000000000000000000000000000000000..d136fe5aaab769f7d5e7adea6fa9e06976b616fb --- /dev/null +++ b/tests/operations/sumSpeed.m @@ -0,0 +1,13 @@ +function sumTime = sumSpeed(len) + rng; + v1 = randi(1000,len,1); v2 = randi(1000,len,1); + testClass.a = v1; testStruct.a = v1; + testClass.b = v2; testStruct.b = v2; + tic + sumStruct = testStruct.a + testStruct.b; + sumTime.struct = toc; + + tic + sumClass = testClass.a + testClass.b; + sumTime.class = toc; +end \ No newline at end of file diff --git a/tests/speedBenchmark.m b/tests/speedBenchmark.m index 27d7a13f5b28c7a2532477014eb3b2a3b5e61164..5364c7a348bbc609b38d677649c00ea36ac0f350 100644 --- a/tests/speedBenchmark.m +++ b/tests/speedBenchmark.m @@ -1,108 +1,60 @@ -function speed = speedBenchmark(len) - %=======READ========= - testClass = Test(1, 2, 3, 4); - testStruct = struct; - - testStruct.a = 1; - testStruct.b = 2; - testStruct.c = 3; - - arr1 = zeros(1, len); - arr2 = zeros(1, len); - - fields = fieldnames(testClass); - - tic - for i = 1:len - arr1(i) = testStruct.(fields{mod(i,3) + 1}); - end - speed.readTime.struct = toc; - - tic - for i = 1:len - arr2(i) = testClass.(fields{mod(i,3) + 1}); - end - speed.readTime.class = toc; - - ms = Mission(true); - - %=======ASSIGNMENT========= - cl = Motor(ms); - st = struct(cl); % converting class to a struct. calling of a warning - - len_xcg = length(st.xCg); - a = zeros(1, len_xcg); - b = zeros(1, len_xcg); - c = zeros(1, len_xcg); - d = zeros(1, len_xcg); - - tic - a = cl.xCg; - speed.assignment.std.class = toc; - - tic - c = st.xCg; - speed.assignment.std.struct = toc; - - tic - for i = 1:len_xcg - b(i) = cl.xCg(i); - end - speed.assignment.elementWise.class = toc; - - tic - for i = 1:len_xcg - d(i) = st.xCg(i); - end - speed.assignment.elementWise.struct = toc; - - %=======SCALAR PRODUCT======= - rng; - v1 = randi(1000,len,1); v2 = randi(1000,len,1); - testClass.a = v1; testStruct.a = v1; - testClass.b = v2; testStruct.b = v2; - - tic - scalarProductStruct = dot(testStruct.a,testStruct.b); - speed.scalarProduct.struct = toc; - - tic - scalarProductClass = dot(testClass.a,testClass.b); - speed.scalarProduct.class = toc; - - %=======SUM======= - tic - sumStruct = testStruct.a + testStruct.b; - speed.sum.struct = toc; - - tic - sumClass = testClass.a + testClass.b; - speed.sum.class = toc; - - %=======CROSS PRODUCT======== (MATRICES) - matrix1 = randi([0, 1000], [3,len]); - matrix2 = randi([0, 1000], [3,len]); - - testClass.a = matrix1; testStruct.a = matrix1; - testClass.b = matrix2; testStruct.b = matrix2; - - tic - crossProductStruct = cross(testStruct.a,testStruct.b); - speed.crossProduct.struct = toc; - - tic - crossProductClass = cross(testClass.a,testClass.b); - speed.crossProduct.class = toc; - - %========EIGENVALUES PROBLEM======== (MATRICES) - matrix1 = randi([0, 1000], [len,len]); - testClass.a = matrix1; testStruct.a = matrix1; - - tic - eigStruct = eig(testStruct.a); - speed.eigen.struct = toc; +%% +clc; close all; clear all; +warning off +% call of a warning because converting class to a struct in function + +% TODO: determinant, inverse matrix, traspose, \ +% TOFIX: eigen, assignment + +%% Functions +vct = 10^2:1000:10^5; + +%%% Reading time +readTime = []; +for i = 1:length(vct) + head = readSpeed(vct(i)); + readTime = [readTime head]; %#ok<*AGROW> +end +clear head + +%% Assignment time +% assignmentTime = []; +% for i = 1:length(vct) +% head = assignmentSpeed(vct(i)); +% assignmentTime = [assignmentTime head]; %#ok<*AGROW> +% end +% clear head +%% +%%% Scalar product time +scalarProductTime = []; +for i = 1:length(vct) + head = scalarProductSpeed(vct(i)); + scalarProductTime = [scalarProductTime head]; %#ok<*AGROW> +end +clear head + +%%% Eigen +% dim = 2:1:10; +% +% eigenTime = []; +% for i = 1:length(vct) +% head = eigenSpeed(vct(i)); +% eigenTime = [eigenTime head]; %#ok<*AGROW> +% end +% clear head + +%%% Sum time +sumTime = []; +for i = 1:length(vct) + head = sumSpeed(vct(i)); + sumTime = [sumTime head]; %#ok<*AGROW> +end +clear head - tic - eigClass = eig(testClass.a); - speed.eigen.class = toc; +%%% Cross product time +crossProductTime = []; +for i = 1:length(vct) + head = crossProductSpeed(vct(i)); + crossProductTime = [crossProductTime head]; %#ok<*AGROW> end +clear head diff --git a/tests/speedBenchmarkPlot.m b/tests/speedBenchmarkPlot.m index 7cadfd5a736697deb8e655c3810d204192b23552..8f0c91ab180da1271c068dcdc9fc6f72366a4a67 100644 --- a/tests/speedBenchmarkPlot.m +++ b/tests/speedBenchmarkPlot.m @@ -1,16 +1,5 @@ -%% -clc; close all; clear all; -warning off -% call of a warning because converting class to a struct in function - -%% function -vct = 10^2:1000:10^5; -speed = []; -for i = 1:length(vct) - head = speedBenchmark(vct(i)); - speed = [speed head]; %#ok<*AGROW> -end -clear head +% Calling speedBenchmark script +speedBenchmark; %% Plots plt.stdBlue = [0 0.447 0.741]; @@ -19,8 +8,8 @@ plt.stdRed = [0.8500 0.3250 0.0980]; % Reading time figure for i = 1:length(vct) - semilogx(vct(i), speed(i).readTime.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).readTime.class, '.', 'Color', plt.stdRed) + semilogx(vct(i), readTime(i).struct, '.' ,'Color', plt.stdBlue) + semilogx(vct(i), readTime(i).class, '.', 'Color', plt.stdRed) hold on end plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); @@ -31,41 +20,41 @@ ylabel('Speed [s]') legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) grid on -% Assignment time standard -figure -for i = 1:length(vct) - semilogx(vct(i), speed(i).assignment.std.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).assignment.std.class, '.', 'Color', plt.stdRed) - hold on -end -plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); -plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); -title('Assignment time standard'); -xlabel('Number of elements') -ylabel('Speed [s]') -legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) -grid on +%% Assignment time standard +% figure +% for i = 1:length(vct) +% semilogx(vct(i), speed(i).assignment.std.struct, '.' ,'Color', plt.stdBlue) +% semilogx(vct(i), speed(i).assignment.std.class, '.', 'Color', plt.stdRed) +% hold on +% end +% plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); +% plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); +% title('Assignment time standard'); +% xlabel('Number of elements') +% ylabel('Speed [s]') +% legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) +% grid on +% +% % Assignment time element wise +% figure +% for i = 1:length(vct) +% semilogx(vct(i), speed(i).assignment.elementWise.struct, '.' ,'Color', plt.stdBlue) +% semilogx(vct(i), speed(i).assignment.elementWise.class, '.', 'Color', plt.stdRed) +% hold on +% end +% plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); +% plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); +% title('Assignment time element wise'); +% xlabel('Number of elements') +% ylabel('Speed [s]') +% legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) +% grid on -% Assignment time element wise +%% Scalar product figure for i = 1:length(vct) - semilogx(vct(i), speed(i).assignment.elementWise.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).assignment.elementWise.class, '.', 'Color', plt.stdRed) - hold on -end -plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); -plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); -title('Assignment time element wise'); -xlabel('Number of elements') -ylabel('Speed [s]') -legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) -grid on - -% Scalar product -figure -for i = 1:length(vct) - semilogx(vct(i), speed(i).scalarProduct.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).scalarProduct.class, '.', 'Color', plt.stdRed) + semilogx(vct(i), scalarProductTime(i).struct, '.' ,'Color', plt.stdBlue) + semilogx(vct(i), scalarProductTime(i).class, '.', 'Color', plt.stdRed) hold on end plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); @@ -76,11 +65,11 @@ ylabel('Speed [s]') legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) grid on -% Sum +%% Sum figure for i = 1:length(vct) - semilogx(vct(i), speed(i).sum.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).sum.class, '.', 'Color', plt.stdRed) + semilogx(vct(i), sumTime(i).struct, '.' ,'Color', plt.stdBlue) + semilogx(vct(i), sumTime(i).class, '.', 'Color', plt.stdRed) hold on end plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); @@ -91,11 +80,11 @@ ylabel('Speed [s]') legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) grid on -% Cross product time (matrices) +%% Cross product time (matrices) figure for i = 1:length(vct) - semilogx(vct(i), speed(i).crossProduct.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).crossProduct.class, '.', 'Color', plt.stdRed) + semilogx(vct(i), crossProductTime(i).struct, '.' ,'Color', plt.stdBlue) + semilogx(vct(i), crossProductTime(i).class, '.', 'Color', plt.stdRed) hold on end plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); @@ -106,17 +95,17 @@ ylabel('Speed [s]') legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) grid on -% Eigenvalues problem time (matrices) -figure -for i = 1:length(vct) - semilogx(vct(i), speed(i).eigen.struct, '.' ,'Color', plt.stdBlue) - semilogx(vct(i), speed(i).eigen.class, '.', 'Color', plt.stdRed) - hold on -end -plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); -plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); -title('Eigenvalues problem time (matrices) '); -xlabel('Number of elements') -ylabel('Speed [s]') -legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) -grid on \ No newline at end of file +%% Eigenvalues problem time (matrices) +% figure +% for i = 1:length(vct) +% semilogx(vct(i), speed(i).eigen.struct, '.' ,'Color', plt.stdBlue) +% semilogx(vct(i), speed(i).eigen.class, '.', 'Color', plt.stdRed) +% hold on +% end +% plt.lgdStruct = plot(nan, nan, 'color', plt.stdBlue); +% plt.lgdClass = plot(nan, nan, 'color', plt.stdRed); +% title('Eigenvalues problem time (matrices) '); +% xlabel('Number of elements') +% ylabel('Speed [s]') +% legend([plt.lgdStruct, plt.lgdClass], {'Struct', 'Class'}) +% grid on \ No newline at end of file