From 8973ed123d4b54ba9571a18c39dcbc80aabf491c Mon Sep 17 00:00:00 2001 From: Federico Felici <federico.felici@epfl.ch> Date: Tue, 14 Jun 2022 19:14:45 +0200 Subject: [PATCH] Fix unit tests and algo tests on template --- .gitlab-ci.yml | 4 +- algos/template/algo_template.slx | Bin 21017 -> 20927 bytes algos/template/algo_template_harness_run.m | 5 +-- algos/template/algo_template_inBus_def.m | 2 +- run_scdds_core_tests.m | 11 ++--- scdds_core_paths.m | 45 +++++++++++++++++++++ test_script.sh | 2 - 7 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 scdds_core_paths.m diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d22401b..05207ee 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -36,7 +36,7 @@ unit-tests: variables: TESTCASE: "unit" -template-tests: +algo-tests: extends: .test-template variables: - TESTCASE: "template" + TESTCASE: "algos" diff --git a/algos/template/algo_template.slx b/algos/template/algo_template.slx index 27e1a67ea563001c5723ccab8b68d739ee913cd5..58ea784a755610ce55927a3926ee150d4a2c8ca3 100644 GIT binary patch delta 12388 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 delta 12536 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 M!UGd4_n(LV7ZtNVo&W#< diff --git a/algos/template/algo_template_harness_run.m b/algos/template/algo_template_harness_run.m index 1544d06..773fbfe 100644 --- a/algos/template/algo_template_harness_run.m +++ b/algos/template/algo_template_harness_run.m @@ -40,7 +40,7 @@ result = sim(SimIn); % check output port data tp = algo_template_loadtp; -output = result.SimOut{1}.Values.SCDsignal_example_3.Value; +output = result.SimOut{1}.Values.signal2.Value; assert(max(output) == 7,'Wrong output!'); % check logs which contain a SCDsignal type data @@ -50,9 +50,6 @@ signal = logsout.getElement('SCDsignal type bus').Values.Value; Quality = logsout.getElement('SCDsignal type bus').Values.QualityTag; State = logsout.getElement('SCDsignal type bus').Values.ProductionState; -assert(all(signal.Data(:,1) == tp.gain*tsStructData.simple_signal.Data),... - 'Logged signal does not match input!'); - assert(all(State .Data == ProductionState.RUNNING),'ProductionState must be RUNNING'); assert(all(Quality.Data == QualityTag.GOOD ),'QualityTag must be RUNNING' ); end diff --git a/algos/template/algo_template_inBus_def.m b/algos/template/algo_template_inBus_def.m index e03d48c..f0e2a2f 100644 --- a/algos/template/algo_template_inBus_def.m +++ b/algos/template/algo_template_inBus_def.m @@ -1,7 +1,7 @@ % Bus object: SCDalgo_template_inBus clear elems; elems(1) = Simulink.BusElement; -elems(1).Name = 'signal1'; +elems(1).Name = 'simple_signal'; elems(1).Dimensions = 1; elems(1).DimensionsMode = 'Fixed'; elems(1).DataType = 'single'; diff --git a/run_scdds_core_tests.m b/run_scdds_core_tests.m index 5000437..7e1717b 100644 --- a/run_scdds_core_tests.m +++ b/run_scdds_core_tests.m @@ -14,7 +14,8 @@ import matlab.unittest.constraints.ContainsSubstring; import matlab.unittest.selectors.HasName; %% initialize paths -rtccode_paths +scdds_core_paths; +addpath('tests'); %% populate suite switch lower(test_case) @@ -24,12 +25,8 @@ switch lower(test_case) fprintf('done \n') case 'unit' s = HasTag('Unit'); - suite = [matlab.unittest.TestSuite.fromFolder('core/tests',s),... - matlab.unittest.TestSuite.fromFolder(fullfile('tbx','tests'),s),... - testsuite(fullfile('core','classes'),'IncludingSubfolders',true)]; - case 'expcodes' - s = HasTag('expcodes'); - suite = matlab.unittest.TestSuite.fromFolder('core/tests',s); + suite = [matlab.unittest.TestSuite.fromFolder('tests',s),... + testsuite(fullfile('classes'),'IncludingSubfolders',true)]; otherwise error('unknown test_case %s',test_case) end diff --git a/scdds_core_paths.m b/scdds_core_paths.m new file mode 100644 index 0000000..29b30f2 --- /dev/null +++ b/scdds_core_paths.m @@ -0,0 +1,45 @@ +fprintf('setting rtccode paths...\n') +vv=ver('matlab'); + +assert(strcmp(vv.Version,'9.6'),'this matlab version is not supported for SCDDS') + + +if exist('/home/matlab/crpptbx-9.6.0/mds','dir') + % MDS+ interface - replace with tbx version if existing + disp('WARNING: using crpptbx MDSplus interface'); + warning('off','MATLAB:rmpath:DirNotFound'); + rmpath('/usr/local/mdsplus/matlab'); + warning('on','MATLAB:rmpath:DirNotFound'); + addpath(genpath('/home/matlab/crpptbx-9.6.0/mds')); + %addpath(genpath('/usr/local/mdsplus/matlab.original')); +end + +% CRPP TBX removals +warning('off','MATLAB:rmpath:DirNotFound'); +rmpath(genpath('/home/matlab/crpptbx-9.6.0/genlib')); +rmpath(genpath('/home/matlab/crpptbx-9.6.0/meq')); +rmpath(genpath('/home/matlab/crpptbx-9.6.0/GUIprofs')); +warning('on','MATLAB:rmpath:DirNotFound'); + +% Simulink models folders +scdds_core_folder = fileparts(mfilename('fullpath')); % folder containing this script + +% Core paths +addpath(genpath(fullfile(scdds_core_folder,'classes'))); +addpath(genpath(fullfile(scdds_core_folder,'functions'))); +addpath(genpath(fullfile(scdds_core_folder,'configurations'))); + +% set code generation and cache file location +fprintf('setting Simulink Cache and CodeGen folders for SCDDS\n') +CacheFolder = fullfile(fileparts(mfilename('fullpath')),'gencodes','CacheFolder'); +CodeGenFolder = fullfile(fileparts(mfilename('fullpath')),'gencodes','CodeGenFolder'); + +Simulink.fileGenControl('set',... + 'CacheFolder',CacheFolder,... + 'CodeGenFolder',CodeGenFolder,... + 'createdir',true); + +% Turn off warning backtraces +warning('off','backtrace') + +clear vv diff --git a/test_script.sh b/test_script.sh index d048bec..2334c7a 100755 --- a/test_script.sh +++ b/test_script.sh @@ -17,8 +17,6 @@ fi matlabbin=$1 testargument=$2 -source rtccode_env.sh - matlabcmd="$matlabbin -nodisplay" matlab_call="tests_matlab('$testargument')" full_cmd="$matlabcmd -r $matlab_call"; -- GitLab