Main Content

matlab.unittest.constraints.Tolerance クラス

名前空間: matlab.unittest.constraints

許容誤差の基本的なインターフェイス

説明

matlab.unittest.constraints.Tolerance クラスは、許容誤差のインターフェイスを提供します。許容誤差は特定のデータ型に対する近似等価性の概念を定義し、名前と値の引数 Within を使用して IsEqualTo 制約および特定の比較演算子に適用できます。

クラスには 3 つの抽象メソッドがあります。カスタム許容誤差クラスを作成するには、matlab.unittest.constraints.Tolerance からクラスを派生させ、すべての抽象メソッドを実装します。

クラスの属性

抽象型
true

クラス属性の詳細については、クラスの属性を参照してください。

メソッド

すべて展開する

すべて折りたたむ

2 つの DNA 配列のハミング距離が指定された許容誤差の範囲内であるかどうかを判別します。2 つの同じ長さの 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 クラスから派生するクラスで supportssatisfiedBy、および 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;

2 つの 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 で導入