Main Content

matlab.unittest.constraints.Tolerance 클래스

네임스페이스: matlab.unittest.constraints

허용오차에 대한 기본 인터페이스

설명

matlab.unittest.constraints.Tolerance 클래스는 허용오차에 대한 인터페이스를 제공합니다. 허용오차는 주어진 데이터형에 대한 대략적인 동일성 개념을 정의하고 Within 이름-값 인수를 사용하는 특정 비교 연산자뿐 아니라 IsEqualTo 제약 조건에도 적용할 수 있습니다.

이 클래스에는 세 가지 추상 메서드가 있습니다. 사용자 지정 허용오차 클래스를 생성하려면 matlab.unittest.constraints.Tolerance에서 클래스를 파생하고 모든 추상 메서드를 구현하십시오.

클래스 특성

Abstract
true

클래스 특성에 대한 자세한 내용은 클래스 특성 항목을 참조하십시오.

메서드

모두 확장

예제

모두 축소

두 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

해밍 거리 1 내에서 DNA 염기 서열이 동일한지 확인합니다. 테스트가 실패하고 테스트 프레임워크는 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

해밍 거리 2 내에서 DNA 염기 서열이 동일한지 확인합니다. 테스트가 통과합니다.

testCase.verifyThat(sampleA,IsEqualTo(sampleB,"Within",HammingDistance(2)))
Verification passed.

버전 내역

R2013a에 개발됨