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 }