Можно ли ограничить итерации (b.N) в Go Benchmarking? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сравнить операцию, которая требует дорогостоящей подготовки, исключая использование StopTimer () и StartTimer (). В частности, я тестирую вставку n-го элемента в отсортированный список.

Пример кода:

n := 100

// Run the process b.N times
for i := 0; i < b.N; i++ {

    // Stop the timer for our expensive preparation work (inserting n-1 items)
    b.StopTimer()

    // ...

    // Insert n-1 items
    for j := 1; j < n; j++ {
        m.InsertItem(o)
    }

    // ...

    // Resume the timer
    b.StartTimer()

    // Insert the nth item
    m.InsertItem(o)

}

Проблема в том, что эвристический анализ Go ограничивает b.N в зависимости от времени, а не от общего времени. В итоге он запрашивает 5-миллиметровую (5000000) итераций для вставки 100-го порядка, и это занимает больше времени, чем разумно (я хочу сравнить до 10-миллионной позиции).

Есть ли способ указать максимальное значение b.N для конкретного теста в инструменте тестирования Go? Я не нашел ничего в документах сам.

1 Ответ

0 голосов
/ 15 ноября 2018
Флаг

-benchtime может использоваться для указания времени, в течение которого вы хотите запустить тест ( источник ). Хотя я этого не пробовал, лучше использовать время, меньшее 1 секунды.

go test -bench=. -benchtime=10s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...