coder.runTest

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

Описание

пример

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

  • Сравнить поведение функции MATLAB и MEX:

    • Запустите тест в 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