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.
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.
Name-Value Arguments
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
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:
- Imports the equivalence tester matlabtest.coder.MATLABCoderTester and the constraintmatlabtest.constraints.ExecutionMatchesMATLAB
- Instantiates the tester for a MEX build target for the entry-point function
myAdd
with the build-time inputs set to(0,0)
- Adds the entry-point function
mySubtract
with the build-time inputs set to(0,0)
- Builds C code from the
myAdd
andmySubtract
functions - Executes the C code for the entry-point function
myAdd
with the inputs set to(5,5)
- 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:
- Imports the equivalence tester matlabtest.coder.MATLABCoderTester, the constraint matlabtest.constraints.ExecutionMatchesMATLAB, and the constraint matlab.unittest.constraints.AbsoluteTolerance
- Instantiates the tester for a MEX build target for the entry-point function
myAdd
with the build-time inputs set to(0,0)
- Adds the entry-point function
helloWorld
with no inputs. - Builds C code from the
myAdd
andhelloWorld
functions - Executes the C code for the entry-point function
myAdd
with the inputs set to(5,5)
- Instantiates the constraint
matlabtest.constraints.ExecutionMatchesMATLAB
with the absolute tolerance set to0.05
- 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