diff --git a/unitTests/unitTestClasses/TestSimulator.m b/unitTests/unitTestClasses/TestSimulator.m new file mode 100644 index 0000000000000000000000000000000000000000..e2f9a1baa000ff994375c86dfd0b8a28b2db0e0b --- /dev/null +++ b/unitTests/unitTestClasses/TestSimulator.m @@ -0,0 +1,98 @@ +classdef TestSimulator < UnitTest + + properties + simulator struct % [-] + end + + properties (TestParameter) + verifiable = {'multipleAB', 'descent6DOF', 'ballistic', 'engineCut', 'solid','HRE1', 'HRE2', 'HRE3'} + end + + methods + function createTest(testCase, verifiable) + + + currentPath = fileparts(mfilename('fullpath')); + cd(currentPath); + + + + 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); + end + + + + + function saveTest(testCase, verifiable) + + + Time = tic; + + + % simulator + [ascent, descent, ~] = mainSimulator(testCase.simulator); + + 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'); + 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); + testCase.postp = postp; + testCase.verifyEqual(testCase.postp, testCase.refSimulator, 'AbsTol', testCase.absToll, ... + 'RelTol', testCase.relToll) + end + + end + + +end \ No newline at end of file diff --git a/unitTests/unitTestClasses/mainUnitTest.m b/unitTests/unitTestClasses/mainUnitTest.m index 9b56058c5953df8c3bc55ec3ea517fe67a1c7333..17c972d79feeee3bc73321703fa28655fc56b993 100644 --- a/unitTests/unitTestClasses/mainUnitTest.m +++ b/unitTests/unitTestClasses/mainUnitTest.m @@ -40,4 +40,11 @@ if opt.testSensitivity sensResults = run(test); end +if opt.testSimulator + test = TestSimulator(); + test.creatTest; + sensResults = run(test); +end + + toc(beginTest) \ No newline at end of file diff --git a/unitTests/unitTestClasses/saveTests.m b/unitTests/unitTestClasses/saveTests.m index 5bc9651cb3e26b004aedad651104920721aef159..e109399194a76ccceccd8914787ea1682fb5199e 100644 --- a/unitTests/unitTestClasses/saveTests.m +++ b/unitTests/unitTestClasses/saveTests.m @@ -39,6 +39,11 @@ if opt.createTestOptimization test.saveTest(); end +if opt.createTestSimulator + test = TestSimulator(); + test.saveTest +end + totTimeF = toc(totTime); fprintf('\n\n All unit tests created in: %2.2f seconds\n\n', totTimeF)