classdef similarTo < matlab.unittest.constraints.Constraint
properties (SetAccess = immutable)
expected
large_tolerance
small_tolerance
end
methods
function constraint = similarTo(expected,large_tolerance,small_tolerance)
constraint.expected = expected;
constraint.large_tolerance = large_tolerance;
constraint.small_tolerance = small_tolerance;
end
function bool = satisfiedBy(constraint,actual)
bool = constraint.customSimilarTo(actual);
end
function diag = getDiagnosticFor(constraint,actual)
import matlab.unittest.diagnostics.StringDiagnostic
if constraint.customSimilarTo(actual)
diag = StringDiagnostic('similarTo has passed.');
else
diag = StringDiagnostic(sprintf(['similarTo has failed.\n'...
'Actual string: %s, Expected string: %s\n'...
'Actual vagueNum: %d, Expected vagueNum: %d, Precision: %d\n'...
'Actual preciseNum: %d, Expected preciseNum: %d, Precision: %d'],...
actual.some_string, constraint.expected.some_string,...
actual.some_vague_number, constraint.expected.some_vague_number, constraint.large_tolerance...
actual.some_precise_number, constraint.expected.some_precise_number, constraint.small_tolerance));
end
end
end
methods (Access = private)
function bool = customSimilarTo(constraint, actual)
bool = strcmp(actual.some_string, expected.some_string)...
&& abs(actual.some_vague_number - constraint.expected.some_vague_number) < constraint.large_tolerance...
&& abs(actual.some_precise_number - constraint.expected.some_precise_number) < constraint.small_tolerance;
end
end
end