coder.runTest

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

Описание

пример

coder.runTest(test,fcn) выполняет test замена вызовов на fcn с вызовами скомпилированной версии fcn. test - имя файла для MATLAB;® функция, скрипт или основанный на классах модульный тест, который вызывает функцию MATLAB fcn. Скомпилированная версия 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