exponenta event banner

coder.runTest

Выполнение теста замены вызовов функций MATLAB вызовами функций MEX

Описание

пример

coder.runTest(test,fcn) пробеги test замена вызовов fcn с вызовами скомпилированной версии fcn. test имя файла для функции MATLAB ®, сценария или модульного теста на основе класса, который вызывает функцию MATLABfcn. Скомпилированная версия fcn должен находиться в функции MEX с именем по умолчанию. Имя по умолчанию - это имя, указанное fcn за которым следует _mex.

пример

coder.runTest(test,fcns,mexfcn) заменяет вызовы указанных функций MATLAB вызовами скомпилированных версий функций. Функция MEX mexfcn должен содержать скомпилированные версии всех указанных функций MATLAB.

пример

coder.runTest(test,mexfile) заменяет вызов функции MATLAB вызовом скомпилированной версии функции, когда скомпилированная версия функции находится в mexfile. mexfile включает расширение файла для конкретной платформы. Если mexfile не содержит скомпилированную версию функции, coder.runTest выполняет исходную функцию MATLAB. Если не требуется указывать отдельные заменяемые функции MATLAB, используйте этот синтаксис.

Примеры

свернуть все

Использовать coder.runTest для запуска тестового файла. Укажите замену одной функции MATLAB скомпилированной версией. Имя функции MEX, содержащей скомпилированную версию, не указывается. Поэтому coder.runTest ищет функцию MEX с именем по умолчанию.

В локальной папке с возможностью записи создайте функцию MATLAB, myfun.

function y = myfun(u,v) %#codegen
y = u+v;
end

В той же папке создайте тестовую функцию, mytest1, что вызывает myfun.

function mytest1
c = myfun(10,20);
disp(c);
end

Выполните тестовую функцию в MATLAB.

mytest1
    30

Создание функции MEX для myfun.

codegen myfun -args {0,0}

В текущей папке, codegen генерирует функцию MEX с именем по умолчанию, myfun_mex.

Управляемый coder.runTest. Укажите, что вы хотите запустить тестовый файл mytest1. Указать замену myfun с скомпилированной версией в myfun_mex.

coder.runTest('mytest1','myfun')
    30

Результаты такие же, как при выполнении mytest1 в командной строке MATLAB.

Использовать coder.runTest для запуска тестового файла. Укажите замену двух функций вызовами скомпилированных версий. Укажите функцию MEX, содержащую скомпилированные версии функций.

В локальной папке, доступной для записи, создайте функцию MATLAB, myfun1.

function y = myfun1(u) %#codegen
y = u;
end

В той же папке создайте другую функцию MATLAB, myfun2.

function y = myfun2(u, v) %#codegen
y = u + v;
end

В той же папке создайте тестовую функцию, вызывающую myfun1 и myfun2.

function mytest2
c1 = myfun1(10);
disp(c1)
c2 = myfun2(10,20);
disp(c2)
end

Запустите тестовую функцию.

mytest2
    10

    30

Создание функции MEX для myfun1 и myfun2. Используйте -o для указания имени созданной функции MEX.

codegen -o mymex  myfun1 -args {0} myfun2 -args {0,0}

Управляемый coder.runTest. Укажите, что требуется выполнить mytest2. Укажите, что требуется заменить вызовы myfun1 и myfun2 с вызовами скомпилированных версий в функции MEX mymex.

coder.runTest('mytest2',{'myfun1','myfun2'},'mymex')
    10

    30

Результаты такие же, как при выполнении mytest2 в командной строке MATLAB.

Использовать coder.runTest для выполнения теста, который заменяет вызовы функций MATLAB в тесте вызовами скомпилированных версий. Укажите имя файла для функции MEX, содержащей скомпилированные версии функций.

В локальной папке, доступной для записи, создайте функцию MATLAB, myfun1.

function y = myfun1(u) %#codegen
y = u;
end

В той же папке создайте другую функцию MATLAB, myfun2.

function y = myfun2(u, v) %#codegen
y = u + v;
end

В той же папке создайте тестовую функцию, вызывающую myfun1 и myfun2.

function  mytest2
c1 = myfun1(10);
disp(c1)
c2 = myfun2(10,20);
disp(c2)
end

Запустите тест.

mytest2
    10

    30

Создание функции MEX для myfun1 и myfun2. Используйте -o для указания имени созданной функции MEX.

codegen -o mymex  myfun1 -args {0} myfun2 -args {0,0}

Управляемый coder.runTest. Укажите, что требуется выполнить mytest2. Укажите, что требуется заменить вызовы функций, вызываемых mytest2 с вызовами скомпилированных версий в mymex. Укажите полное имя файла MEX, включая специфичное для платформы расширение. Использовать mexext для получения расширения, специфичного для платформы.

coder.runTest('mytest2',['mymex.', mexext])
    10

    30

Результаты такие же, как при выполнении mytest2 в командной строке MATLAB.

Управляемый coder.runTest с тестом блока на основе класса.

Запишите функцию addOne, что добавляет 1 к входу.

function y = addOne(x)
%#codegen
y = x + 1;
end

Запись теста единиц измерения на основе классов, который проверяет значение, возвращаемое addOne когда вход равен 1 и когда вход равен pi.

classdef TestAddOne < matlab.unittest.TestCase
    
    methods (Test)
        
        function reallyAddsOne(testCase)
            x = 1;
            y = addOne(x);
            testCase.verifyEqual(y,2);
        end
        
        function addsFraction(testCase)
            x = pi;
            y = addOne(x);
            testCase.verifyEqual(y,x+1);
        end
    end
end

Выполните тест блока на основе класса, заменив вызовы на addOne с вызовами к addOne_mex.

coder.runTest('TestAddOne', 'addOne')
Running TestAddOne
..
Done TestAddOne
__________


testbenchResult = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.28516 seconds testing time.

Входные аргументы

свернуть все

Имя файла для функции MATLAB, скрипта или модульного теста на основе класса, который вызывает функции MATLAB, для которых требуется протестировать сгенерированный MEX. coder.runTest заменяет вызовы функций вызовами сгенерированного MEX.

Пример: 'mytest'

Имя функции MATLAB, заменяемой при выполнении теста. coder.runTest заменяет вызовы этой функции вызовами скомпилированной версии этой функции.

Пример: 'myfun'

Имена функций MATLAB, заменяемых при выполнении теста. coder.runTest заменяет вызовы этих функций вызовами скомпилированных версий этих функций.

Укажите одну функцию в качестве символьного вектора или строкового скаляра.

Пример: 'myfun'

Пример: "myfun"

Укажите несколько функций как массив ячеек символьных векторов. Перед использованием coder.runTestскомпилировать эти функции в одну функцию MEX.

Пример: {'myfun1', 'myfun2', 'myfun3'}

Имя функции MEX, созданной для одной или нескольких функций.

Создайте эту функцию MEX с помощью приложения MATLAB Coder™ или codegen функция.

Пример: 'mymex'

Имя файла и специфичное для платформы расширение файла MEX для одной или нескольких функций. Использовать mexext для получения расширения файла MEX для конкретной платформы.

Создайте этот MEX-файл с помощью приложения MATLAB Coder или codegen функция.

Пример: ['myfunmex.', mexext]

Типы данных: char

Совет

  • coder.runTest не возвращает выходные данные. Для просмотра результатов теста включите в тест код, отображающий результаты.

  • Для сравнения поведения функций MEX и MATLAB:

    • Запустите тест в MATLAB.

    • Использовать codegen для создания функции MEX.

    • Использовать coder.runTest для выполнения теста, заменяющего вызов исходной функции вызовом скомпилированной версии в функции MEX.

  • Перед использованием coder.runTest для тестирования нескольких функций скомпилируйте функции MATLAB в одну функцию MEX.

  • При использовании синтаксиса coder.runTest(test, mexfile), использовать mexext для получения расширения имени файла MEX для конкретной платформы. Например:

    coder.runTest('my_test', ['mymexfun.', mexext])

  • Если во время теста возникают ошибки, можно выполнить отладку кода с помощью информации стека вызовов.

  • Вы можете объединить генерацию MEX и тестирование за один шаг, запустив codegen с -test вариант. Например, следующий код генерирует функцию MEX для myfunction и вызывает тестовый файл myfunction_test, замена вызовов на myfunction с вызовами к myfunction_mex.

    codegen myfunction -test myfunction_test 

Представлен в R2012a