Main Content

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 to true,

  • 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, 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 to compile the C-MEX S-Function and make it compatible with Simulink Design Verifier.

slcovmex('-sldv', ...
        '-output', 'sldvexSFunctionHandlingSFcn',...
mex C:\Users\vshukla\AppData\Local\Temp\tp37bf0258_88f4_4a94_8e49_abdccfd71796\tp3db1cfdc_3519_4db9_a100_86500770fec5.c C:\Users\vshukla\AppData\Local\Temp\tp37bf0258_88f4_4a94_8e49_abdccfd71796\tp96c556a3_4eb5_445d_b5e9_78f5c3165d25.c F:\37\vshukla.Bdoc23b.j2293581\matlab\extern\lib\win64\mingw64\libmwsl_sfcn_cov_bridge.lib -output sldvexSFunctionHandlingSFcn
Building with 'MinGW64 Compiler (C)'.
MEX completed successfully.
mex sldvexSFunctionHandlingSource.c C:\Users\vshukla\AppData\Local\Temp\tp37bf0258_88f4_4a94_8e49_abdccfd71796\sldvexSFunctionHandlingSFcn.c C:\Users\vshukla\AppData\Local\Temp\tp37bf0258_88f4_4a94_8e49_abdccfd71796\tpfb62fa97_b97f_4628_b045_d5ca69903cfb.c C:\Users\vshukla\AppData\Local\Temp\tp37bf0258_88f4_4a94_8e49_abdccfd71796\tpb533290b_6b4c_4265_a3b7_886b6c8bfeb1.c F:\37\vshukla.Bdoc23b.j2293581\matlab\extern\lib\win64\mingw64\libmwsl_sfcn_cov_bridge.lib -output sldvexSFunctionHandlingSFcn
Building with 'MinGW64 Compiler (C)'.
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 a 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.


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 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);