61 lines
2.5 KiB
Matlab
61 lines
2.5 KiB
Matlab
function assertElementsAlmostEqual(varargin)
|
|
%assertElementsAlmostEqual Assert floating-point array elements almost equal.
|
|
% assertElementsAlmostEqual(A, B, tol_type, tol, floor_tol) asserts that all
|
|
% elements of floating-point arrays A and B are equal within some tolerance.
|
|
% tol_type can be 'relative' or 'absolute'. tol and floor_tol are scalar
|
|
% tolerance values.
|
|
%
|
|
% If the tolerance type is 'relative', then the tolerance test used is:
|
|
%
|
|
% all( abs(A(:) - B(:)) <= tol * max(abs(A(:)), abs(B(:))) + floor_tol )
|
|
%
|
|
% If the tolerance type is 'absolute', then the tolerance test used is:
|
|
%
|
|
% all( abs(A(:) - B(:)) <= tol )
|
|
%
|
|
% tol_type, tol, and floor_tol are all optional. The default value for
|
|
% tol_type is 'relative'. If both A and B are double, then the default value
|
|
% for tol and floor_tol is sqrt(eps). If either A or B is single, then the
|
|
% default value for tol and floor_tol is sqrt(eps('single')).
|
|
%
|
|
% If A or B is complex, then the tolerance test is applied independently to
|
|
% the real and imaginary parts.
|
|
%
|
|
% Corresponding elements in A and B that are both NaN, or are both infinite
|
|
% with the same sign, are considered to pass the tolerance test.
|
|
%
|
|
% assertElementsAlmostEqual(A, B, ..., msg) prepends the string msg to the
|
|
% output message if A and B fail the tolerance test.
|
|
|
|
% Steven L. Eddins
|
|
% Copyright 2008-2010 The MathWorks, Inc.
|
|
|
|
params = xunit.utils.parseFloatAssertInputs(varargin{:});
|
|
|
|
if ~isequal(size(params.A), size(params.B))
|
|
message = xunit.utils.comparisonMessage(params.Message, ...
|
|
'Inputs are not the same size.', ...
|
|
params.A, params.B);
|
|
throwAsCaller(MException('assertElementsAlmostEqual:sizeMismatch', ...
|
|
'%s', message));
|
|
end
|
|
|
|
if ~(isfloat(params.A) && isfloat(params.B))
|
|
message = xunit.utils.comparisonMessage(params.Message, ...
|
|
'Inputs are not both floating-point.', ...
|
|
params.A, params.B);
|
|
throwAsCaller(MException('assertElementsAlmostEqual:notFloat', ...
|
|
'%s', message));
|
|
end
|
|
|
|
if ~xunit.utils.compareFloats(params.A, params.B, 'elementwise', ...
|
|
params.ToleranceType, params.Tolerance, params.FloorTolerance)
|
|
|
|
tolerance_message = sprintf('Input elements are not all equal within %s tolerance: %g', ...
|
|
params.ToleranceType, params.Tolerance);
|
|
message = xunit.utils.comparisonMessage(params.Message, tolerance_message, ...
|
|
params.A, params.B);
|
|
|
|
throwAsCaller(MException('assertElementsAlmostEqual:tolExceeded', ...
|
|
'%s', message));
|
|
end
|