matlab.unittest.constraints.Tolerance 类
命名空间: matlab.unittest.constraints
容差的基础接口
描述
方法
supports |
确定容差是否支持预期值。此方法指定容差支持哪些数据类型。 输入参量
输出参量
|
satisfiedBy |
确定这些值是否在容差范围内。此方法提供容差定义。 输入参量
输出参量
|
getDiagnosticFor |
为正在比较的值生成诊断信息。此信息纳入基于 输入参量
输出参量
|
示例
确定两个 DNA 序列是否具有指定容差范围内的汉明距离。对于相同长度的两个 DNA 序列,汉明距离是一个序列的核苷酸(字母)与另一个序列的核苷酸(字母)之间相差的位置数。
创建 DNA 类
要表示 DNA 序列,请在当前文件夹中名为 DNA.m 的文件中创建 DNA 类。
classdef DNA properties (SetAccess=immutable) Sequence char {mustHaveValidLetters} end methods function dna = DNA(sequence) dna.Sequence = sequence; end end end function mustHaveValidLetters(sequence) validLetters = ... sequence == 'A' | ... sequence == 'C' | ... sequence == 'T' | ... sequence == 'G'; if ~all(validLetters,"all") error("Sequence contains one or more invalid letters.") end end
创建 HammingDistance 类
在当前文件夹的名为 HammingDistance.m 的文件中,通过子类化 matlab.unittest.constraints.Tolerance 来创建 HammingDistance 类。添加属性 Value,以便您可以指定允许的最大汉明距离。
从 Tolerance 类派生的类必须实现 supports、satisfiedBy 和 getDiagnosticFor 方法:
supports方法 - 指定容差必须支持DNA类的对象。satisfiedBy方法 - 指定在容差范围内的实际值和预期值必须大小相同,并且其汉明距离必须小于或等于容差值。getDiagosticFor方法 - 创建并返回一个StringDiagnostic对象,其中包含有关比较的诊断信息。
classdef HammingDistance < matlab.unittest.constraints.Tolerance properties Value end methods function tolerance = HammingDistance(value) tolerance.Value = value; end function tf = supports(~,expected) tf = isa(expected,"DNA"); end function tf = satisfiedBy(tolerance,actual,expected) if ~isSameSize(actual.Sequence,expected.Sequence) tf = false; return end tf = hammingDistance(actual.Sequence,expected.Sequence) <= ... tolerance.Value; end function diagnostic = getDiagnosticFor(tolerance,actual,expected) import matlab.automation.diagnostics.StringDiagnostic if ~isSameSize(actual.Sequence,expected.Sequence) str = "The DNA sequences have different lengths."; else str = "The DNA sequences have a Hamming distance of " ... + hammingDistance(actual.Sequence,expected.Sequence) ... + "." + newline + "The allowable distance is " ... + tolerance.Value + "."; end diagnostic = StringDiagnostic(str); end end end function tf = isSameSize(str1,str2) tf = isequal(size(str1),size(str2)); end function distance = hammingDistance(str1,str2) distance = nnz(str1 ~= str2); end
比较 DNA 序列
要使用容差来比较 DNA 序列,请首先导入必要的类,并为交互式测试创建一个测试用例。
import matlab.unittest.TestCase import matlab.unittest.constraints.IsEqualTo testCase = TestCase.forInteractiveUse;
创建两个 DNA 对象,在不指定容差的情况下比较它们。测试失败,因为对象不相等。
sampleA = DNA("ACCTGAGTA"); sampleB = DNA("ACCACAGTA"); testCase.verifyThat(sampleA,IsEqualTo(sampleB))
Verification failed.
---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> ObjectComparator failed.
--> The objects are not equal using "isequaln".
Actual Value:
DNA with properties:
Sequence: 'ACCTGAGTA'
Expected Value:
DNA with properties:
Sequence: 'ACCACAGTA'
------------------
Stack Information:
------------------
In C:\work\CreateCustomToleranceExample.m (CreateCustomToleranceExample) at 45
验证 DNA 序列在汉明距离 1 的范围内相等。测试失败,测试框架显示由 getDiagnosticFor 方法产生的附加诊断信息。
testCase.verifyThat(sampleA,IsEqualTo(sampleB,"Within",HammingDistance(1)))
Verification failed.
---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> ObjectComparator failed.
--> The objects are not equal using "isequaln".
--> The DNA sequences have a Hamming distance of 2.
The allowable distance is 1.
Actual Value:
DNA with properties:
Sequence: 'ACCTGAGTA'
Expected Value:
DNA with properties:
Sequence: 'ACCACAGTA'
------------------
Stack Information:
------------------
In C:\work\CreateCustomToleranceExample.m (CreateCustomToleranceExample) at 51
验证 DNA 序列在汉明距离 2 的范围内相等。测试通过。
testCase.verifyThat(sampleA,IsEqualTo(sampleB,"Within",HammingDistance(2)))
Verification passed.
版本历史记录
在 R2013a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)