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