diff --git a/unitTests/unitTestClasses/TestSimulator.m b/unitTests/unitTestClasses/TestSimulator.m index a7cc0b2551e72a7d0b6149559fa2c8667050442a..0c97974b3fab3421c966bf25c568e48df9728be7 100644 --- a/unitTests/unitTestClasses/TestSimulator.m +++ b/unitTests/unitTestClasses/TestSimulator.m @@ -5,56 +5,51 @@ classdef TestSimulator < UnitTest end properties (TestParameter) - verifiable = {'multipleAB', 'descent6DOF', 'ballistic', 'engineCut', 'solid','HRE1', 'HRE2', 'HRE3'} + generalParams = {'multipleAB', 'descent6DOF', 'ballistic', 'engineCut', 'solid','HRE1', 'HRE2', 'HRE3'} end methods + + function values = setVerifiable(externalValues) + + % Function to allow user to change, if wanted, the parameters with + % which the test is run, so as to allow test running for certain + % conditions only + + if isempty(externalValues) + values = testCase.generalParams; + fprintf('\t testing with general params\n'); + else + values = externalValues; + end + + end + + end + + + methods (Test) function createTest(testCase, verifiable) - currentPath = fileparts(mfilename('fullpath')); addpath(currentPath); + + fileName = sprintf("referenceState_%s.mat", verifiable); + filePath = fullfile('data', 'testSimulator', verifiable, fileName); - - - if strcmp(verifiable, 'solid') - testCase.mission = Mission(pyxis); %marco help - testCase.rocket = Rocket(mission); - testCase.environment = Environment(mission); - else - if strcmp(verifiable, 'HRE1') - testCase.rocket.airbrakes.extension = 0; - testCase.rocket.updateAll - else - if strcmp(verifiable, 'HRE2') - testCase.rocket.airbrakes.extension = 0.5; - testCase.rocket.updateAll - else - if strcmp(verifiable, 'HRE3') - testCase.rocket.airbrakes.extension = 1; - testCase.rocket.updateAll - else - if strcmp(verifiable, 'engineCut') - settings.timeEngineCut = (0.75) * settings.tb; % [s] Moment in time in wich the engine will be cut off - settings = settingsEngineCut(settings); %%HELP MAUCO - end - - end - end - end - end - - [~, ~, testCase.simulator] = mainSimulator(testCase.rocket, testCase.wind, testCase.environment); - - - % Construct the file path dynamically based on the test parameter - filePath = sprintf("data\\testSimulator\\%s\\referenceState_%s.mat", verifiable, verifiable); % Load the reference file - ref = load(filePath); - - fieldName = ['referenceState_' verifiable]; - testCase.refSimulator = ref.(fieldName); + testCase.rocket = load(filePath, 'rocket'); + testCase.motor = load(filePath, 'motor'); + testCase.environment = load(filePath, 'environment'); + testCase.wind = load(filePath, 'wind'); + + % fieldName = ['referenceState_' verifiable]; + testCase.refSimulator = load(filePath, 'stateA', 'stateF'); + testCase.simulatorSettings = load(filePath, 'simulatorSettings'); + + % Construct the file path dynamically based on the test parameter + end @@ -62,34 +57,50 @@ classdef TestSimulator < UnitTest function saveTest(testCase, verifiable) - - Time = tic; + verifiable = testCase.setVerifiable(verifiable); + Time = tic; + mission = Mission(true); + rocket = Rocket(Mission); + motor = Motor(mission); + environment = Environment(mission, motor); + wind = Wind(mission); + % simulator - [ascent, descent, ~] = mainSimulator(testCase.simulator); + [ascent, descent, simulatorSettings] = mainSimulator(rocket,motor, environment, wind); stateA = ascent(end, :); % state at end of ascent stateF = descent(end, :); % final state, at touchdown stateF = [stateF zeros(1, 7)]; % to avoid problems in checkErrorSimulator % saving final state - filePath = sprintf("data\\testSimulator\\%s\\referenceState_%s.mat", verifiable, verifiable); - save(filePath,'stateA','stateF'); + fileName = sprintf("referenceState_%s.mat", verifiable); + filePath = fullfile('data', 'testSimulator', verifiable, fileName); + save(filePath,'stateA','stateF', 'simulatorSettings',... + 'mission', 'rocket',... + 'environment', 'wind', 'motor'); + Time = toc(Time); fprintf('\t %s test created in: %2.2f seconds\n',verifiable, Time) end - end + - methods (Test) - function mainSimulator(testCase) - addpath(genpath('../../simulator')) - [postp.ascent, postp.descent, ~] = mainSimulator(testCase.simulator); + + function mainSimulator(testCase, verifiable) + + verifiable = testCase.setVerifiable(verifiable); + testCase.createTest(verifiable); + + mainSimPath = fullfile('..', 'simulator'); + addpath(mainSimPath); + [postp.ascent, postp.descent, ~] = mainSimulator(testCase.simulatorSettings); testCase.postp = postp; testCase.verifyEqual(testCase.postp, testCase.refSimulator, 'AbsTol', testCase.absToll, ... 'RelTol', testCase.relToll) + end end