Skip to content

Instantly share code, notes, and snippets.

@PyYoshi
Forked from matope/string_join_benchmark.go
Last active April 25, 2016 12:55
Show Gist options
  • Select an option

  • Save PyYoshi/d5bcd496ade6ec3b4b6c to your computer and use it in GitHub Desktop.

Select an option

Save PyYoshi/d5bcd496ade6ec3b4b6c to your computer and use it in GitHub Desktop.

Revisions

  1. PyYoshi revised this gist Jul 30, 2015. 3 changed files with 17 additions and 0 deletions.
    4 changes: 4 additions & 0 deletions run.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,4 @@
    #!/bin/bash

    go version
    go test -benchmem -bench .
    3 changes: 3 additions & 0 deletions string_join.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    package main

    func main() {}
    10 changes: 10 additions & 0 deletions string_join_benchmark.go → string_join_test.go
    Original file line number Diff line number Diff line change
    @@ -32,6 +32,16 @@ func BenchmarkAppendOperator_(b *testing.B) {
    }
    }

    func BenchmarkAppendOperatorF(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 string
    for _, v := range m {
    m2 += v + ","
    }
    m2 += ","
    }
    }

    func BenchmarkHardCoding_____(b *testing.B) {
    for i := 0; i < b.N; i++ {
    _ = m[0] + "," + m[1] + "," + m[2] + "," + m[3] + "," + m[4] + "," + m[5] + "," + m[6]
  2. @matope matope renamed this gist Oct 18, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. @matope matope created this gist Oct 18, 2014.
    94 changes: 94 additions & 0 deletions main_test.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    package main

    import (
    "bytes"
    "strings"
    "testing"
    )

    var m = [...]string{
    "AAAAAAAAA",
    "AAAAAAAAA",
    "AAAAAAAAA",
    "AAAAAAAAA",
    "AAAAAAAAA",
    "AAAAAAAAA",
    "AAAAAAAAA",
    }

    func BenchmarkStringsJoin____(b *testing.B) {
    for i := 0; i < b.N; i++ {
    _ = strings.Join(m[:], ",") + ","
    }
    }

    func BenchmarkAppendOperator_(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 string
    for _, v := range m {
    m2 += m2 + "," + v
    }
    m2 += ","
    }
    }

    func BenchmarkHardCoding_____(b *testing.B) {
    for i := 0; i < b.N; i++ {
    _ = m[0] + "," + m[1] + "," + m[2] + "," + m[3] + "," + m[4] + "," + m[5] + "," + m[6]
    }
    }

    func BenchmarkByteArray______(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 []byte
    for _, v := range m {
    m2 = append(m2, v...)
    m2 = append(m2, ',')
    }
    _ = string(m2)
    }
    }

    func BenchmarkCapByteArray___(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 = make([]byte, 0, 100)
    for _, v := range m {
    m2 = append(m2, v...)
    m2 = append(m2, ',')
    }
    _ = string(m2)
    }
    }

    func BenchmarkBytesBuffer____(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 bytes.Buffer
    for _, v := range m {
    m2.Write([]byte(v))
    m2.Write([]byte{','})
    }
    _ = m2.String()
    }
    }

    func BenchmarkCapBytesBuffer_(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 = bytes.NewBuffer(make([]byte, 0, 100))
    for _, v := range m {
    m2.Write([]byte(v))
    m2.Write([]byte{','})
    }
    _ = m2.String()
    }
    }

    func BenchmarkCapBytesBuffer2(b *testing.B) {
    for i := 0; i < b.N; i++ {
    var m2 = bytes.NewBuffer(make([]byte, 0, 100))
    for _, v := range m {
    m2.WriteString(v)
    m2.WriteString(",")
    }
    _ = m2.String()
    }
    }