メインコンテンツ

startMeasuring

クラス: matlab.perftest.TestCase
名前空間: matlab.perftest

測定境界の開始を指定

説明

startMeasuring(testcase) は測定境界の開始を指定します。このメソッドと stopMeasuring メソッドを呼び出して、測定を startMeasuring メソッドの呼び出しと stopMeasuring メソッドの呼び出しの間にあるコードのみに制限します。この境界を定義することにより、セットアップ、検証および破棄の各コードを測定から除外できます。

パフォーマンス フレームワークは Test 属性のタグが付けられた各メソッド内で startMeasuring メソッドと stopMeasuring メソッドの複数の非入れ子呼び出しを許可します。境界付きのパフォーマンス テストを作成するときには、以下の点に留意してください。

  • startMeasuring メソッドを呼び出すテスト メソッドは、同一テスト メソッドのスコープ内で stopMeasuring メソッドを呼び出さなければならない。

  • 同一テスト メソッドのスコープ内で、startMeasuring メソッドの呼び出しの後に stopMeasuring メソッドの呼び出しがなければならない。同様に、stopMeasuring メソッドの呼び出しの前に startMeasuring の呼び出しがなければならない。

  • startMeasuring メソッドと stopMeasuring メソッドを、条件に keepMeasuring メソッドを含む while ループ内で呼び出すことはできない。同様に、keepMeasuring 条件をもつ while ループを、startMeasuring の呼び出しと stopMeasuring の呼び出しの間に配置することはできない。

  • テスト メソッドに startMeasuringstopMeasuring の呼び出しが複数ある場合、パフォーマンス フレームワークは測定値を累積して合計します。

フレームワークがテスト メソッド内でサポートされない startMeasuring および stopMeasuring の使用を検出した場合、対応する MeasurementResult インスタンスを無効としてマークします。

startMeasuring(testcase,label) は測定境界の開始を明示し、label によって測定にラベルを付けます。ラベルを使った測定境界の指定は、ラベルなしでの指定と似ています。ラベルを使った startMeasuring の呼び出しでは、同一テスト メソッドのスコープ内で、同じラベルを使った stopMeasuring の呼び出しが後に続かなければなりません。テスト メソッドに同じラベルをもつ境界が複数ある場合、パフォーマンス フレームワークはラベルごとに測定値を累積し、合計を計算します。パフォーマンス フレームワークは入れ子にされた測定範囲をサポートしていません。

ラベルは山かっこで囲まれて、MeasurementResultSamples プロパティと TestActivity プロパティのテスト要素名に付加されます。

入力引数

すべて展開する

テスト ケースのインスタンス。matlab.perftest.TestCase オブジェクトとして指定します。

測定境界ラベル。有効な MATLAB 識別子として指定します。有効な MATLAB 識別子は、英数字 (AZaz09) とアンダースコアで構成される文字ベクトルまたは string スカラーであり、最初の文字は英字で、文字ベクトルの長さは namelengthmax 以下です。

すべて展開する

パフォーマンス テスト クラス fprintfTest を作成します。パフォーマンス テスト フレームワークは startMeasuring メソッドの呼び出しと stopMeasuring メソッドの呼び出しの間にあるコードを測定します。この境界は、パフォーマンス テスト フレームワークが関数 fprintf の呼び出しのみを測定するように制限します。セットアップ動作、破棄動作および検定テストを除外します。

classdef fprintfTest < matlab.perftest.TestCase
    methods(Test)
        function testPrintingToFile(testCase)
            file = tempname;
            fid = fopen(file, 'w');
            testCase.assertNotEqual(fid, -1, 'IO Problem');
            
            stringToWrite = repmat('abcdef', 1, 1000000);
            
            testCase.startMeasuring();
            fprintf(fid, '%s', stringToWrite);
            testCase.stopMeasuring();
            
            testCase.verifyEqual(fileread(file), stringToWrite);
            fclose(fid);
        end
    end
end

パフォーマンス テスト クラス fprintfTest2 を作成します。複数の境界 (startMeasuringstopMeasuring の呼び出し) を使用すると、ファイルを開き、ファイルに書き込み、ファイルを閉じるためのコードをパフォーマンス フレームワークで測定できるようになります。

classdef fprintfTest2 < matlab.perftest.TestCase
    methods(Test)
        function testPrintingToFile(testCase)
            file = tempname;
            
            testCase.startMeasuring();
            fid = fopen(file,'w');
            testCase.stopMeasuring();
            
            testCase.assertNotEqual(fid,-1,'IO Problem');
            stringToWrite = repmat('abcdef',1,1000000);
            
            testCase.startMeasuring();
            fprintf(fid,'%s',stringToWrite);
            testCase.stopMeasuring();
            
            testCase.verifyEqual(fileread(file),stringToWrite);
            
            testCase.startMeasuring();
            fclose(fid);
            testCase.stopMeasuring();
        end
    end
end

パフォーマンス テストを実行し、サンプルの要約を表示します。パフォーマンス フレームワークによる測定の結果、testPrintingToFile テストでファイルを開き、ファイルに書き込み、ファイルを閉じる処理の平均時間は約 0.02 秒でした。結果は異なる場合があります。

results = runperf('fprintfTest2');
T = sampleSummary(results)
Running fprintfTest2
........
Done fprintfTest2
__________


T =

  1×7 table

                 Name                  SampleSize      Mean      StandardDeviation      Min        Median       Max   
    _______________________________    __________    ________    _________________    ________    ________    ________

    fprintfTest2/testPrintingToFile        4         0.017003        0.0004943        0.016651    0.016814    0.017736

パフォーマンス テスト クラス examplePerfTest を作成します。最初のテストでは、乱数の配列の生成、単出力の svd 呼び出しの測定、および複数出力の svd 呼び出しの測定に対し、ラベル付きのテスト境界が設定されています。2 番目のテストでは、svd 呼び出しの前後にラベルなしの境界が設定されています。

classdef examplePerfTest < matlab.perftest.TestCase
    methods(Test)
        function testSVD1(testCase)
            testCase.startMeasuring('arrayGen')
            X = rand(1000);
            testCase.stopMeasuring('arrayGen')
            
            testCase.startMeasuring('SVD_1out')
            S = svd(X);
            testCase.stopMeasuring('SVD_1out')
            
            testCase.startMeasuring("SVD_3out")
            [U2,S2,V2] = svd(X);
            testCase.stopMeasuring("SVD_3out")
            
            testCase.verifyEqual(S,diag(S2),'RelTol',1e-14)
        end
        
        function testSVD2(testCase)
            sz = 732;
            X = rand(sz);
            
            testCase.startMeasuring()
            [U,S,V] = svd(X);
            testCase.stopMeasuring()
            
            testCase.verifyTrue(isdiag(S))
            testCase.verifyTrue(issorted(diag(S),'descend'))
            testCase.verifySize(S,[sz sz 1])
        end
    end
end

パフォーマンス テストを実行し、サンプルの要約を表示します。結果は異なる場合があります。testSVD1 のラベルは、結果のテスト要素名に山かっこ付きで付加されます。

results = runperf('examplePerfTest');
T = sampleSummary(results)
Running examplePerfTest
..........
..........
..........
..........
Done examplePerfTest
__________


T =

  4×7 table

                   Name                    SampleSize      Mean       StandardDeviation       Min        Median        Max   
    ___________________________________    __________    _________    _________________    _________    _________    ________

    examplePerfTest/testSVD1 <arrayGen>        21        0.0096508        0.0012428        0.0087596    0.0092564    0.013911
    examplePerfTest/testSVD1 <SVD_1out>        21          0.11978        0.0098172          0.10585      0.12274     0.13575
    examplePerfTest/testSVD1 <SVD_3out>        21          0.30664         0.020991          0.26882       0.3051     0.35018
    examplePerfTest/testSVD2                   11          0.13294         0.011135          0.11127      0.13557     0.15162

バージョン履歴

R2016a で導入