matlab.unittest.constraints.AbsoluteTolerance class

Пакет: matlab.unittest.constraints
Суперклассы: matlab.unittest.constraints.Tolerance

Абсолютный числовой допуск

Описание

Этот числовой Tolerance оценивает величину различия между фактическими и ожидаемыми значениями. Для допуска, которому удовлетворят, abs(expVal - actVal) <= absTol должно быть верным.

Конструкция

AbsoluteTolerance(tolVals) создает абсолютный объект допуска, который оценивает величину различия между фактическими и ожидаемыми значениями.

Типы данных входных параметров к AbsoluteTolerance конструктор определяет, какие типы данных допуск поддерживает. Например, AbsoluteTolerance(10*eps) создает AbsoluteTolerance для сравнения числовых массивов с двойной точностью, в то время как AbsoluteTolerance(int8(2)) создает AbsoluteTolerance для сравнения числовых массивов типа int8. Если фактические и сравниваемые ожидаемые значения содержат больше чем один тип числовых данных, допуск только применяется к типам данных, заданным значениями, переданными в конструктора.

Чтобы задать различные значения допуска для различных типов данных, можно передать несколько значений допуска конструктору. Например, AbsoluteTolerance(10*eps, 10*eps('single'), int8(1)) создает AbsoluteTolerance объект применяет следующие абсолютные допуски:

  • 10*eps применяет абсолютный допуск 10*eps для числовых массивов с двойной точностью.

  • 10*eps('single') применяет абсолютный допуск 10*eps для числовых массивов с одинарной точностью.

  • int8(1) применяет абсолютный допуск 1 для числовых массивов типа int8.

Можно задать больше чем один допуск к конкретному типу данных путем объединения допусков с & и | операторы. Чтобы объединить два допуска, размеры значений допуска для каждого типа данных должны быть совместимыми.

Входные параметры

tolVals

Числовые допуски, заданные как список, разделенный запятыми числовых массивов. Каждый входной параметр содержит спецификацию допуска для конкретного типа данных. Каждый числовой массив может быть скаляром или выстроить тот же размер как фактические и ожидаемые значения.

Свойства

Values

Числовые допуски, заданные tolVals входной параметр

Примеры

свернуть все

Создайте контрольный пример для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance

testCase = TestCase.forInteractiveUse;

Утверждайте что различие между фактическим значением, 4.1, и ожидаемое значение, 4.5, меньше 0.5.

testCase.assertThat(4.1, IsEqualTo(4.5, ...
    'Within', AbsoluteTolerance(0.5)))
Assertion passed.

Создайте контрольный пример для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance

testCase = TestCase.forInteractiveUse;

Создайте следующие фактические и ожидаемые массивы ячеек.

act = {'abc', 123, single(106), int8([1, 2, 3])};
exp = {'abc', 122, single(105), int8([2, 4, 6])};

Протестируйте, удовлетворяют ли массивы AbsoluteTolerance ограничение в значении 2.

testCase.verifyThat(act, IsEqualTo(exp, ...
    'Within', AbsoluteTolerance(2)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>{3}
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> The tolerance was ignored. The tolerance as specified does not support comparisons of single values.
        --> Failure table:
                    Actual    Expected    Error    RelativeError
                    ______    ________    _____    _____________
                
                    106       105         1        0.00952381   
        
        Actual single:
               106
        Expected single:
               105

Actual cell:
        'abc'    [123]    [106]    [1×3 int8]
Expected cell:
        'abc'    [122]    [105]    [1×3 int8]

Тест перестал работать, потому что допуск только применяется к double тип данных.

Создайте объект допуска, который задает различные допуски к различным типам данных.

tolObj = AbsoluteTolerance(2, single(3), int8([2, 3, 5]));

Допуск 2 примененный double ценные данные. Допуск 3 применяется к single ценные данные. Допуск [2 3 5] применяется к соответствующим элементам массива int8 ценные данные.

Проверьте, что ожидаемые и фактические значения удовлетворяют AbsoluteTolerance ограничение.

testCase.verifyThat(act, IsEqualTo(exp, 'Within', tolObj))
Interactive verification passed.

Создайте контрольный пример для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Задайте приближение фактического значения для pi.

act = 3.14;

Создайте объект допуска протестировать это, различие между фактическими и ожидаемыми значениями в 0.001 и в 0.25%.

tolObj = AbsoluteTolerance(0.001) & RelativeTolerance(0.0025);

Проверьте, что фактическое значение в допуске ожидаемого значения pi.

testCase.verifyThat(act, IsEqualTo(pi, 'Within', tolObj))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> NumericComparator failed.
    --> The numeric values are not equal using "isequaln".
    --> AndTolerance failed.
        --> AbsoluteTolerance failed.
            --> The error was not within absolute tolerance.
        --> RelativeTolerance passed.
            --> The error was within relative tolerance.
        --> Failure table:
                    Actual        Expected               Error                RelativeError        AbsoluteTolerance    RelativeTolerance
                    ______    ________________    ____________________    _____________________    _________________    _________________
                
                    3.14      3.14159265358979    -0.00159265358979299    -0.000506957382897213    0.001                0.0025           
    
    Actual double:
           3.140000000000000
    Expected double:
           3.141592653589793

Фактическое значение не удовлетворяет AbsoluteTolerance ограничение.

Создайте ограничение, которому удовлетворяют, ли значения в 0.001 или 0.25%, и затем повторно протестируйте фактическое значение.

tolObj = AbsoluteTolerance(0.001) | RelativeTolerance(0.0025);
testCase.verifyThat(act, IsEqualTo(pi, 'Within', tolObj))
Verification passed.

Объедините допуски поэтому, когда вы тестируете равенство значений, абсолют (пол), над которым доминирует допуск, когда значения являются близким нулем, и относительный допуск доминирует для больших значений.

Создайте контрольный пример для интерактивного тестирования.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

Задайте две структуры, содержащие электромагнитные свойства вакуума. Одна структура, approxVacuumProps, содержит приближенные значения для проницаемости и скорости света в вакууме.

approxVacuumProps.Permeability = 1.2566e-06; % Approximate
approxVacuumProps.Permitivity = 8.854187817*10^-12;
approxVacuumProps.LightSpeed = 2.9979e+08; % Approximate

baselineVacuumProps.Permeability = 4*pi*10^-7;
baselineVacuumProps.Permitivity = 8.854187817*10^-12;
baselineVacuumProps.LightSpeed = 1/sqrt(...
    baselineVacuumProps.Permeability*baselineVacuumProps.Permitivity);

Протестируйте это, относительная разница между аппроксимированными и базовыми значениями в eps*1e11.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', RelativeTolerance(eps*1e11)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>.Permeability
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> RelativeTolerance failed.
            --> The error was not within relative tolerance.
            --> Failure table:
                          Actual            Expected                  Error                RelativeError         RelativeTolerance  
                        __________    ____________________    _____________________    _____________________    ____________________
                    
                        1.2566e-06    1.25663706143592e-06    -3.70614359173257e-11    -2.94925536216295e-05    2.22044604925031e-05
        
        Actual double:
                 1.256600000000000e-06
        Expected double:
                 1.256637061435917e-06

Actual struct:
        Permeability: 1.256600000000000e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 299790000
Expected struct:
        Permeability: 1.256637061435917e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 2.997924580105029e+08

Тест перестал работать, потому что относительная разница в проницаемостях не в допуске. Различие между этими двумя значениями мало, но числа близко к нулю, таким образом, различие относительно их размера не мало достаточно, чтобы удовлетворить допуску.

Создайте объект допуска протестировать это, абсолютная разность между аппроксимированными и базовыми значениями в 1e-4.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', AbsoluteTolerance(1e-4)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> Path to failure: <Value>.LightSpeed
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> AbsoluteTolerance failed.
            --> The error was not within absolute tolerance.
            --> Failure table:
                         Actual          Expected              Error             RelativeError        AbsoluteTolerance
                        _________    ________________    _________________    ____________________    _________________
                    
                        299790000    299792458.010503    -2458.01050287485    -8.1990404935028e-06    0.0001           
        
        Actual double:
               299790000
        Expected double:
                 2.997924580105029e+08

Actual struct:
        Permeability: 1.256600000000000e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 299790000
Expected struct:
        Permeability: 1.256637061435917e-06
         Permitivity: 8.854187816999999e-12
          LightSpeed: 2.997924580105029e+08

Тест перестал работать, потому что абсолютная разность в скорости света не в допуске. Различие между этими двумя значениями мало относительно их размера, но слишком большой, чтобы удовлетворить допуску.

Создайте логическую дизъюнкцию объектов допуска протестировать это, абсолютная разность между аппроксимированными и базовыми значениями в 1e-4 или относительная разница в eps*1e11. Тест использует этот допуск так значения проницаемости, которые являются близко к нулю, удовлетворяют абсолюту (пол) допуск, и значения скорости света, которые являются большими, удовлетворяют относительному допуску.

testCase.verifyThat(approxVacuumProps, IsEqualTo(baselineVacuumProps, ...
    'Within', RelativeTolerance(eps*1e11)| AbsoluteTolerance(1e-4)))
Verification passed.

Введенный в R2013a

Для просмотра документации необходимо авторизоваться на сайте