matlabtest.constraints.ExecutionMatchesMATLAB - Test if execution matches MATLAB in generated C/C++ code equivalence tests - MATLAB (original) (raw)

Namespace: matlabtest.constraints
Superclasses: matlab.unittest.constraints.Constraint

Test if execution matches MATLAB in generated C/C++ code equivalence tests

Since R2023a

Description

The matlabtest.constraints.ExecutionMatchesMATLAB class creates a constraint to test if the execution of generated C/C++ code in an equivalence test matches the execution of the MATLAB® source code with the same inputs.

The matlabtest.constraints.ExecutionMatchesMATLAB class is a handle class.

Creation

Description

c = matlabtest.constraints.ExecutionMatchesMATLAB creates a constraint to test if the execution of generated C/C++ code in an equivalence test matches the execution of the MATLAB source code.

example

c = matlabtest.constraints.ExecutionMatchesMATLAB(___,[Name=Value](#namevaluepairarguments)) specifies options using one or more name-value arguments in addition to the input arguments in previous syntaxes.

example

Name-Value Arguments

expand all

Specify optional pairs of arguments asName1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: c = matlabtest.constraints.ExecutionMatchesMATLAB(Within=AbsoluteTolerance(0.05));

Properties

Examples

collapse all

This example shows how to generate C code from multiple MATLAB functions and test the functions for equivalence by using matlabtest.coder.MATLABCoderTester.

The function myAdd takes two numbers as inputs, adds them together, and outputs the result.

function y = myAdd(a,b) %#codegen y = a+b; end

The function mySubtract takes two numbers as inputs, subtracts them, and outputs the result.

function y = mySubtract(a,b) %#codegen y = b-a; end

This class definition file defines an equivalence test case that inherits from matlab.unittest.TestCase. The test case in the methods block defines a test case that:

  1. Imports the equivalence tester matlabtest.coder.MATLABCoderTester and the constraintmatlabtest.constraints.ExecutionMatchesMATLAB
  2. Instantiates the tester for a MEX build target for the entry-point function myAdd with the build-time inputs set to(0,0)
  3. Adds the entry-point function mySubtract with the build-time inputs set to (0,0)
  4. Builds C code from the myAdd andmySubtract functions
  5. Executes the C code for the entry-point functionmyAdd with the inputs set to(5,5)
  6. Verifies the execution of the C code against the execution of the MATLAB function myAdd

classdef tEquivalence < matlab.unittest.TestCase methods(Test) function tMyMath(testCase) import matlabtest.coder.MATLABCoderTester import matlabtest.constraints.ExecutionMatchesMATLAB

        tester = MATLABCoderTester.forMEXCoderConfiguration( ...
            "myAdd",Inputs={0,0});           
        addEntryPointFunction(tester,"mySubtract",{0,0});
         
        build(tester,testCase);

        execute(tester,testCase,Inputs={5,5}, ...
            EntryPoint="myAdd");           
        verifyThat(testCase,tester,ExecutionMatchesMATLAB)
    end
end

end

Run the tMyMath test.

runtests("tEquivalence", ... procedureName="tMyMath")

Running tMyMath .. Done tMyMath


ans = TestResult with properties:

      Name: 'tEquivalence/tMyMath'
    Passed: 1
    Failed: 0
Incomplete: 0
  Duration: 2.7680
   Details: [1×1 struct]

Totals: 1 Passed, 0 Failed, 0 Incomplete. 2.768 seconds testing time.

This example shows how to generate C code from multiple MATLAB functions with different signatures and test them for equivalence by using the equivalence tester matlabtest.coder.MATLABCoderTester.

The function myAdd takes two numbers as inputs, adds them together, and outputs the result.

function y = myAdd(a,b) %#codegen y = a+b; end

The function helloWorld displays a string of text.

function y = helloWorld y = "Hello World!"; end

This class definition file defines an equivalence test case that inherits from matlab.unittest.TestCase. The test case in the methods block defines a test case that:

  1. Imports the equivalence tester matlabtest.coder.MATLABCoderTester, the constraint matlabtest.constraints.ExecutionMatchesMATLAB, and the constraint matlab.unittest.constraints.AbsoluteTolerance
  2. Instantiates the tester for a MEX build target for the entry-point function myAdd with the build-time inputs set to(0,0)
  3. Adds the entry-point function helloWorld with no inputs.
  4. Builds C code from the myAdd andhelloWorld functions
  5. Executes the C code for the entry-point functionmyAdd with the inputs set to(5,5)
  6. Instantiates the constraintmatlabtest.constraints.ExecutionMatchesMATLAB with the absolute tolerance set to 0.05
  7. Verifies the execution of the C code against the execution of the MATLAB function myAdd with the constraint

classdef tEquivalence < matlab.unittest.TestCase methods(Test) function tMyFunctions(testCase) import matlabtest.coder.MATLABCoderTester import matlabtest.constraints.ExecutionMatchesMATLAB import matlab.unittest.constraints.AbsoluteTolerance

        tester = MATLABCoderTester.forMEXCoderConfiguration( ...
            "myAdd",Inputs={0,0});
        addEntryPointFunction(tester,"helloWorld");
         
        build(tester,testCase);           
        execute(tester,testCase,Inputs={5,5},EntryPoint="myAdd");
        c = ExecutionMatchesMATLAB(Within=AbsoluteTolerance(0.05));
        verifyThat(testCase,tester,c);
    end
end

end

Run the tMyFunctions test.

runtests("tEquivalence", ... procedureName="tMyFunctions")

Running tMyFunctions .. Done tMyFunctions


ans = TestResult with properties:

      Name: 'tEquivalence/tMyFunctions'
    Passed: 1
    Failed: 0
Incomplete: 0
  Duration: 2.7680
   Details: [1×1 struct]

Totals: 1 Passed, 0 Failed, 0 Incomplete. 2.768 seconds testing time.

Version History

Introduced in R2023a