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 (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_2679053_1496143/tp27f833bb_0124_4665_a8eb_2b0904604875/tp94bf9958_9892_4ce8_9a7e_ca8a4c4fd7e8.c /tmp/Bdoc24b_2679053_1496143/tp27f833bb_0124_4665_a8eb_2b0904604875/tp9d4c29cb_9303_4fe9_a2ee_8d183828fbe9.c -L/mathworks/devel/bat/filer/batfs2561-0/Bdoc24b.2679053/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.
mex sldvexSFunctionHandlingSource.c /tmp/Bdoc24b_2679053_1496143/tp27f833bb_0124_4665_a8eb_2b0904604875/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc24b_2679053_1496143/tp27f833bb_0124_4665_a8eb_2b0904604875/tp73c3f69a_b059_4c13_91c9_fb9ac8a5153c.c /tmp/Bdoc24b_2679053_1496143/tp27f833bb_0124_4665_a8eb_2b0904604875/tpab484880_f7cf_4a17_8d94_230d74e2f50b.c -L/mathworks/devel/bat/filer/batfs2561-0/Bdoc24b.2679053/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);