Configuring S-Function for Test Case Generation
This example shows how to compile an S-Function to be compatible with Simulink® Design Verifier™ for test case generation. Simulink Design Verifier supports S-Functions that are:
Generated with the Legacy Code Tool, with
def.Options.supportCoverageAndDesignVerifier
set totrue
,Generated with the SFunctionBuilder, with Enable support for Design Verifier selected on the Build Info tab of the SFunctionBuilder dialog box, or
Compiled with the function
slcovmex
(Simulink Coverage), with the option-sldv
passed.
Compile S-Function to be Compatible with Simulink Design Verifier
The handwritten S-Function is found in the file sldvexSFunctionHandlingSFcn.c, and the user source code for the lookup table is found in the file sldvexSFunctionHandlingSource.c. Call the function slcovmex
(Simulink Coverage) to compile the C-MEX S-Function and make it compatible with Simulink Design Verifier.
slcovmex('-sldv', ... '-output', 'sldvexSFunctionHandlingSFcn',... 'sldvexSFunctionHandlingSource.c','sldvexSFunctionHandlingSFcn.c');
mex /tmp/Bdoc24b_2725827_9201/tp6f63bec1_4914_4151_8f0e_74173ffebb93/tp9ba48d83_7af8_4638_89ae_f09a3bde671f.c /tmp/Bdoc24b_2725827_9201/tp6f63bec1_4914_4151_8f0e_74173ffebb93/tp76371ca1_a523_440e_92b6_d1dc5bbee073.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc24b.2725827/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully. mex sldvexSFunctionHandlingSource.c /tmp/Bdoc24b_2725827_9201/tp6f63bec1_4914_4151_8f0e_74173ffebb93/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc24b_2725827_9201/tp6f63bec1_4914_4151_8f0e_74173ffebb93/tpfbd37740_7696_4d34_bf0c_b42f8d0a4a50.c /tmp/Bdoc24b_2725827_9201/tp6f63bec1_4914_4151_8f0e_74173ffebb93/tpb6834856_39f7_4832_a6f4_b4550bc7d7a7.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc24b.2725827/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully.
Create Test Suite
The example model sldvexSFunctionHandlingExample example contains the handwritten S-Function, which implements a lookup table algorithm. The S-Function block returns the interpolated value at the first output port and returns the status of the interpolation at the second output port. The second output port returns the value -1
if a lower saturation occurs, 1
if upper saturation occurs, and 0
otherwise. Open the sldvexSFunctionHandlingExample model and configure the analysis options by turning on S-Function support for test generation. On running the analysis, Simulink Design Verifier returns a test suite that satisfies all coverage objectives.
open_system('sldvexSFunctionHandlingExample');
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'ConditionDecision'; opts.SaveHarnessModel = 'off'; opts.SaveReport = 'off'; opts.SFcnSupport = 'on'; [status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts, true);
Verifying Complete Coverage
The sldvruntest
function verifies that the test suite achieves complete model coverage. The cvhtml
(Simulink Coverage) function produces a coverage report that indicates 100% Condition and Decision coverage is achieved with the generated test vectors.
[~, finalCov] = sldvruntest('sldvexSFunctionHandlingExample', fileNames.DataFile, [], true); cvhtml('Final Coverage', finalCov);
Clean Up
To complete the demo, close all models.
close_system('sldvexSFunctionHandlingExample', 0);