Метод testing.B.Loop

Метод testing.B.Loop управляет выполнением бенчмарка в цикле. Он используется для организации итеративного тестирования производительности в пакете testing. В отличие от стандартного подхода с полем b.N, метод Loop предоставляет более гибкий контроль над процессом бенчмаркинга.

Синтаксис

gob.Loop()

Метод Loop не принимает параметров и возвращает булево значение. Он должен использоваться внутри цикла for для управления итерациями бенчмарка.

Пример

Давайте рассмотрим базовый пример использования метода Loop для простого бенчмарка:

gopackage main

import (
  "fmt"
  "testing"
)

func BenchmarkLoopExample(b *testing.B) {
  sum := 0
  for b.Loop() {
    for i := 0; i < 10; i++ {
      sum += i
    }
  }
  fmt.Println("Sum:", sum)
}

Пример

Теперь рассмотрим пример с более сложной логикой внутри цикла:

gopackage main

import (
  "fmt"
  "testing"
)

func BenchmarkLoopComplex(b *testing.B) {
  data := []int{1, 2, 3, 4, 5}
  result := 0
  
  for b.Loop() {
    for _, v := range data {
      result += v * v
    }
  }
  fmt.Println("Result:", result)
}

В этом примере метод Loop управляет повторным выполнением вычислений над слайсом данных, что позволяет измерить производительность операций возведения в квадрат.

Пример

Метод Loop также может использоваться для ресурсоемких операций:

gopackage main

import (
  "fmt"
  "strings"
  "testing"
)

func BenchmarkLoopStringConcat(b *testing.B) {
  parts := []string{"a", "b", "c", "d", "e"}
  var builder strings.Builder
  
  for b.Loop() {
    builder.Reset()
    for _, p := range parts {
      builder.WriteString(p)
    }
  }
  fmt.Println("Concatenated:", builder.String())
}

В данном примере метод Loop обеспечивает многократное выполнение конкатенации строк, что позволяет оценить производительность работы с strings.Builder.

Смотрите также

  • поле testing.B.N,
    которое определяет количество итераций бенчмарка
  • метод testing.B.Run,
    который запускает вложенные бенчмарки
  • метод testing.B.ResetTimer,
    который сбрасывает таймер бенчмарка
  • метод testing.B.ReportAllocs,
    который включает отчет об аллокациях памяти