stopMeasuring

Класс: matlab.perftest. TestCase
Пакет: matlab.perftest

Определяйте конец контура измерения

Синтаксис

stopMeasuring(testcase)
stopMeasuring(testcase,label)

Описание

пример

stopMeasuring(testcase) определяет конец контура измерения. Вызовите этот метод и метод startMeasuring, чтобы ограничить измерения кодом между вызовами метода stopMeasuring и startMeasuring. Определение этого контура позволяет вам исключать настройку, верификацию и код отключения от измерения.

Среда производительности разрешает нескольким, невложенным вызовам startMeasuring и методов stopMeasuring в рамках каждого метода, который помечен с атрибутом Test. Когда создание ограничило тесты производительности, помните о следующем:

  • Метод тестирования, который вызывает метод startMeasuring, должен вызвать метод stopMeasuring в пределах того же метода тестирования.

  • Вызов метода startMeasuring должен иметь последующий вызов метода stopMeasuring в пределах того же метода тестирования. Точно так же вызов метода stopMeasuring должен иметь предыдущий вызов startMeasuring.

  • Вы не можете вызвать startMeasuring и методы stopMeasuring в цикле while, который имеет метод keepMeasuring в условии. Точно так же у вас не может быть цикла while, который имеет условие keepMeasuring между вызовами startMeasuring и stopMeasuring.

  • Если метод тестирования имеет множественные вызовы startMeasuring и stopMeasuring, то среда производительности накапливает и суммирует измерения.

Если среда сталкивается с неподдерживаемым использованием startMeasuring и stopMeasuring в методе тестирования, это отмечает соответствующий недопустимый экземпляр MeasurementResult.

пример

stopMeasuring(testcase,label) определяет конец контура измерения и маркирует измерение label. Определение контура измерения с меткой подобно определению того без метки. Вызов stopMeasuring с меткой должен иметь предыдущий вызов startMeasuring с той же меткой в пределах того же метода тестирования. Если метод тестирования имеет несколько контуров с той же меткой, то среда производительности накапливает измерения меткой и вычисляет сумму. Среда производительности не поддерживает вложенные контуры измерения.

Метка добавлена в угловых скобках к тестовому имени элемента в свойствах Samples и TestActivity MeasurementResult.

Входные параметры

развернуть все

Экземпляр теста, заданного как matlab.perftest.TestCase Объект TestCase.

Метка контура измерения, заданная как допустимый идентификатор MATLAB. Допустимый идентификатор MATLAB является вектором символа или скаляром строки буквенно-цифрового индикатора (AZ, az, 09) и символы нижнего подчеркивания, такие, что первый символ является буквой, и длина вектора символа меньше чем или равна namelengthmax.

Примеры

развернуть все

Создайте класс теста производительности, fprintfTest. Среда тестирования производительности измеряет код между вызовами методов stopMeasuring и startMeasuring. Этот контур ограничивает среду тестирования производительности измерением только вызова функции 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. Несколько контуров (вызовы startMeasuring и stopMeasuring) позволяют среде производительности измерить код, который открывает файл, пишет в файл и закрывает файл.

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.021089    0.00075099           0.020583    0.020784    0.022207

Создайте класс теста производительности, examplePerfTest. Первый тест маркировал тестовые контуры для генерации массива случайных чисел, измерение вызова svd с единственным выводом и измерением вызова svd с несколькими выходными параметрами. Второй тест имеет немаркированный контур вокруг вызова 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

Была ли эта тема полезной?