github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/test/performance/remove_from_slice_test.go (about)

     1  package performance
     2  
     3  import "testing"
     4  
     5  func BenchmarkRemoveLastElement(b *testing.B) {
     6  	for iteration := 0; iteration < b.N; iteration++ {
     7  		slice := []string{"A", "B", "C", "D", "E"}
     8  		i := 2
     9  
    10  		// Remove the element at index i from slice.
    11  		slice[i] = slice[len(slice)-1] // Copy last element to index i.
    12  		slice[len(slice)-1] = ""       // Erase last element (write zero value).
    13  		_ = slice[:len(slice)-1]       // Truncate slice.
    14  	}
    15  }
    16  
    17  func BenchmarkRemoveElementWithCopy(b *testing.B) {
    18  	for iteration := 0; iteration < b.N; iteration++ {
    19  		slice := []string{"A", "B", "C", "D", "E"}
    20  		i := 2
    21  
    22  		// Remove the element at index i from slice.
    23  		copy(slice[i:], slice[i+1:]) // Shift slice[i+1:] left one index.
    24  		slice[len(slice)-1] = ""     // Erase last element (write zero value).
    25  		_ = slice[:len(slice)-1]     // Truncate slice.
    26  	}
    27  }
    28  
    29  func BenchmarkSimpleRemoveElement(b *testing.B) {
    30  	for iteration := 0; iteration < b.N; iteration++ {
    31  		slice := []string{"A", "B", "C", "D", "E"}
    32  		i := 2
    33  		_ = append(slice[:i], slice[i+1:]...)
    34  	}
    35  }