startMeasuring

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

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

Описание

пример

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

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

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

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

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

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

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

пример

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

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

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

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

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

Метка контура измерения, заданная как допустимый идентификатор MATLAB. Допустимый идентификатор MATLAB является вектором символов или скаляром строки буквенно-цифрового индикатора (AZAZ, 0–9) и символы нижнего подчеркивания, такие, что первый символ является буквой и длиной вектора символов, меньше чем или равны 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. Несколько контуров (вызывает к 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.017003        0.0004943        0.016651    0.016814    0.017736

Создайте класс теста производительности, 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