Skip to content

Instantly share code, notes, and snippets.

@nbutton23
Last active August 19, 2018 15:45
Show Gist options
  • Save nbutton23/2570d1224a8381743be640910b519bd9 to your computer and use it in GitHub Desktop.
Save nbutton23/2570d1224a8381743be640910b519bd9 to your computer and use it in GitHub Desktop.
package tags
import (
"bufio"
"io"
"strings"
)
func getTagsFromString(msg string) ([]string, error) {
r := bufio.NewReader(strings.NewReader(msg))
tags := make([]string, 0)
for {
if c, _, err := r.ReadRune(); err != nil {
if err == io.EOF {
break
} else {
return nil, err
}
} else {
stringBuilder := strings.Builder{}
if c == '[' {
for {
if c, _, err := r.ReadRune(); err != nil {
if err == io.EOF {
break
} else {
return nil, err
}
} else {
if c == ']' {
tags = append(tags, stringBuilder.String())
break
} else {
_, err = stringBuilder.WriteRune(c)
if err != nil {
return nil, err
}
}
}
}
}
}
}
return tags, nil
}
package tags
import (
"github.com/stretchr/testify/assert"
"testing"
)
func Test_getTagsFromString(t *testing.T) {
msg := "[TAG]"
tags, err := getTagsFromString(msg)
assert.NoError(t, err)
assert.Len(t, tags, 1)
assert.Equal(t, "TAG", tags[0])
msg = "[TAG] [TAG2]"
tags, err = getTagsFromString(msg)
assert.NoError(t, err)
assert.Len(t, tags, 2)
msg = "[TAG] [TAG2"
tags, err = getTagsFromString(msg)
assert.NoError(t, err)
assert.Len(t, tags, 1)
msg = "no tags"
tags, err = getTagsFromString(msg)
assert.NoError(t, err)
assert.Len(t, tags, 0)
}
func Benchmark_getTagsFromStringOneTag(b *testing.B) {
msg := "[TAG]"
for n := 0; n < b.N; n++ {
getTagsFromString(msg)
}
}
func Benchmark_getTagsFromStringTwoTags(b *testing.B) {
msg := "[TAG] [TAG2]"
for n := 0; n < b.N; n++ {
getTagsFromString(msg)
}
}
func Benchmark_getTagsFromStringThreeTag(b *testing.B) {
msg := "[TAG] [TAG2] [TAG3]"
for n := 0; n < b.N; n++ {
getTagsFromString(msg)
}
}
@nbutton23
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment