Main Content

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) は、コンパイルされたバージョンの関数が mexfile にある場合、MATLAB 関数の呼び出しを、コンパイルされたバージョンの関数の呼び出しで置き換えます。mexfile にはプラットフォーム固有のファイル拡張子が含まれます。mexfile にコンパイルされたバージョンの関数が含まれていない場合、coder.runTest は元の MATLAB 関数を実行します。個別の MATLAB 関数を指定して置き換えない場合、この構文を使用します。

すべて折りたたむ

coder.runTest を使用してテスト ファイルを実行します。1 つの MATLAB 関数をコンパイルされたバージョンで置き換えるように指定します。コンパイルされたバージョンを含む MEX 関数の名前は指定しません。したがって、coder.runTest は既定の名前をもつ MEX 関数を検索します。

ローカルの書き込み可能なフォルダーに、MATLAB 関数 myfun を作成します。

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

同じフォルダーに myfun を呼び出すテスト関数 mytest1 を作成します。

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

MATLAB でテスト関数を実行します。

mytest1
    30

myfun の MEX 関数を生成します。

codegen myfun -args {0,0}

codegen は既定の名前が myfun_mex の MEX 関数を現在のフォルダーに生成します。

coder.runTest を実行します。テスト ファイル mytest1 の実行を指定します。myfun_mex でのコンパイルされたバージョンで myfun を置き換えるように指定します。

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

これにより、mytest1 を MATLAB コマンド ラインで実行した場合と同じ結果が得られます。

coder.runTest を使用してテスト ファイルを実行します。コンパイルされたバージョンの呼び出しで置き換える 2 つの関数を指定します。コンパイルされた関数のバージョンが含まれる MEX 関数を指定します。

ローカルの書き込み可能なフォルダーに、MATLAB 関数 myfun1 を作成します。

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

もう一方の MATLAB 関数 myfun2 を同じフォルダーに作成します。

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

同じフォルダーに myfun1myfun2 を呼び出すテスト関数を作成します。

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

テスト関数を実行します。

mytest2
    10

    30

myfun1myfun2 の MEX 関数を生成します。-o オプションを使用して、生成された MEX 関数の名前を指定します。

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

coder.runTest を実行します。mytest2 の実行を指定します。myfun1myfun2 の呼び出しを 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

同じフォルダーに myfun1myfun2 を呼び出すテスト関数を作成します。

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

テストを実行します。

mytest2
    10

    30

myfun1myfun2 の MEX 関数を生成します。-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 を実行します。

入力に 1 を加算する関数 addOne を記述します。

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

入力が 1 のときと入力が pi のときに addOne によって返される値を検証するクラスベースのユニット テストを記述します。

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 関数、スクリプト、または生成された MEX のテスト対象となる MATLAB 関数を呼び出すクラスベースのユニット テストのファイル名。coder.runTest は、関数の呼び出しを生成された MEX の呼び出しで置き換えます。

例: 'mytest'

テスト実行時に置き換える MATLAB 関数の名前。coder.runTest はこの関数の呼び出しを、コンパイルされたバージョンの関数の呼び出しで置き換えます。

例: 'myfun'

テスト実行時に置き換える MATLAB 関数の名前。coder.runTest はこれらの関数の呼び出しを、コンパイルされたバージョンの関数の呼び出しで置き換えます。

1 つの関数を 1 つの文字ベクトルまたは string スカラーとして指定します。

例: 'myfun'

例: "myfun"

複数の関数を文字ベクトルの cell 配列として指定します。coder.runTest を使用する前に、これらの関数を単一の MEX 関数にコンパイルしておきます。

例: {'myfun1', 'myfun2', 'myfun3'}

1 つ以上の関数に対して生成される MEX 関数の名前。

MATLAB Coder™ アプリまたは関数 codegen を使用してこの MEX 関数を生成します。

例: 'mymex'

1 つ以上の関数に対する MEX ファイルのファイル名およびプラットフォーム固有の拡張子。mexext を使用してプラットフォーム固有の MEX ファイル拡張子を取得します。

MATLAB Coder アプリまたは関数 codegen を使用してこの MEX ファイルを生成します。

例: ['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])

  • テスト中にエラーが発生した場合は、呼び出しスタック情報を使用してコードをデバックできます。

  • codegen-test オプションを使用して実行することで、MEX 生成とテストを 1 つのステップに組み合わせることができます。たとえば、次のコードは myfunction の MEX 関数を生成し、myfunction への呼び出しを myfunction_mex への呼び出しに置き換えてテスト ファイル myfunction_test を呼び出します。

    codegen myfunction -test myfunction_test 

バージョン履歴

R2012a で導入