exponenta event banner

Запись скриптового теста с использованием локальных функций

В этом примере показано, как записать скриптовый тест, в котором в качестве вспомогательных функций используются локальные функции. Функция примера аппроксимирует синус и косинус угла. Тест на основе сценария проверяет аппроксимацию с помощью локальных функций для проверки равенства в пределах допуска.

Создать approxSinCos Функция для тестирования

Создайте эту функцию в файле, approxSinCos.m, в текущей папке MATLAB. Эта функция принимает угол в радианах и аппроксимирует синус и косинус угла с помощью ряда Тейлора.

function [sinA,cosA] = approxSinCos(x)
% For a given angle in radians, approximate the sine and cosine of the angle
% using Taylor series.
sinA = x;
cosA = 1;
altSign = -1;
for n = 3:2:26
sinA = sinA + altSign*(x^n)/factorial(n);
cosA = cosA + altSign*(x^(n-1))/factorial(n-1);
altSign = -altSign;
end

Создать тестовый сценарий

В текущей папке MATLAB создайте новый сценарий, approxSinCosTest.m.

Примечание.Для включения функций в сценарии требуется MATLAB ® R2016b или более поздней версии.

%% Test 0rad
% Test expected values of 0
[sinApprox,cosApprox] = approxSinCos(0);
assertWithAbsTol(sinApprox,0)
assertWithRelTol(cosApprox,1)

%% Test 2pi
% Test expected values of 2pi
[sinApprox,cosApprox] = approxSinCos(2*pi);
assertWithAbsTol(sinApprox,0)
assertWithRelTol(cosApprox,1)

%% Test pi over 4 equality
% Test sine and cosine of pi/4 are equal
[sinApprox,cosApprox] = approxSinCos(pi/4);
assertWithRelTol(sinApprox,cosApprox,'sine and cosine should be equal')

%% Test matches MATLAB fcn
% Test values of 2pi/3 match MATLAB output for the sin and cos functions
x = 2*pi/3;
[sinApprox,cosApprox] = approxSinCos(x);
assertWithRelTol(sinApprox,sin(x),'sin does not match')
assertWithRelTol(cosApprox,cos(x),'cos does not match')

function assertWithAbsTol(actVal,expVal,varargin)
% Helper function to assert equality within an absolute tolerance.
% Takes two values and an optional message and compares
% them within an absolute tolerance of 1e-6.
tol = 1e-6;
tf = abs(actVal-expVal) <= tol;
assert(tf, varargin{:});
end

function assertWithRelTol(actVal,expVal,varargin)
% Helper function to assert equality within a relative tolerance.
% Takes two values and an optional message and compares
% them within a relative tolerance of 0.1%.
relTol = 0.001;
tf = abs(expVal - actVal) <= relTol.*abs(expVal);
assert(tf, varargin{:});
end

Каждый единичный тест использует assert для проверки различных выходов approxSinCos функция. Обычно при сравнении значений с плавающей запятой задается допуск для сравнения. Локальные функции assertWithAbsTol и assertWithRelTol - вспомогательные функции для вычисления того, равны ли фактические и ожидаемые значения в пределах указанного абсолютного или относительного допуска.

  • Test 0rad проверяет, находятся ли вычисленные и ожидаемые значения для угла 0 радиан в пределах абсолютного допуска 1e-6 или относительный допуск 0,1%. Обычно для сравнения значений, близких к 0, используется абсолютный допуск.

  • Test 2pi проверяет$2\pi$, равны ли вычисленные и ожидаемые значения для угла радиан в пределах абсолютного допуска 1e-6 или относительный допуск 0,1%.

  • Test pi over 4 equality проверяет$pi/4$, равны ли синус и косинус в пределах относительного допуска 0,1%.

  • Test matches MATLAB fcn проверяет$2pi/3$, равны ли вычисленные синус и косинус sin и cos функции в пределах относительного допуска 0,1%.

Выполнить тесты

Выполните команду runtests для выполнения четырех тестов в approxSinCosTest.m. runtests выполняет каждый тест по отдельности. Если один тест завершается неуспешно, MATLAB по-прежнему выполняет оставшиеся тесты. При выполнении approxSinCosTest в качестве сценария вместо использования runtestsMATLAB останавливает выполнение всего сценария, если он сталкивается с неуспешным утверждением. Кроме того, при выполнении тестов с помощью runtests функция MATLAB обеспечивает информационную диагностику тестов.

results = runtests('approxSinCosTest');
Running approxSinCosTest
....
Done approxSinCosTest
__________

Все тесты проходят.

Создайте таблицу результатов теста.

rt = table(results)
rt =

  4x6 table

                      Name                       Passed    Failed    Incomplete    Duration      Details   
    _________________________________________    ______    ______    __________    ________    ____________

    {'approxSinCosTest/Test0rad'            }    true      false       false        0.30835    {1x1 struct}
    {'approxSinCosTest/Test2pi'             }    true      false       false       0.019019    {1x1 struct}
    {'approxSinCosTest/TestPiOver4Equality' }    true      false       false       0.020224    {1x1 struct}
    {'approxSinCosTest/TestMatchesMATLABFcn'}    true      false       false       0.034992    {1x1 struct}

См. также

|

Связанные примеры

Подробнее