matlab.unittest.constraints.Tolerance 类
包: matlab.unittest.constraints
容差的接口
描述
matlab.unittest.constraints.Tolerance
类提供容差的接口。容差这个概念定义的是给定数据类型的近似相等,可应用于 IsEqualTo
约束以及某些使用 Within
名称-值参数的比较器。
该类有三个抽象方法。要创建自定义容差类,请从 matlab.unittest.constraints.Tolerance
中派生您的类并实现所有抽象方法。
方法
公共方法
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 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)