aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/tdewolff/parse/util_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tdewolff/parse/util_test.go')
-rw-r--r--vendor/github.com/tdewolff/parse/util_test.go176
1 files changed, 176 insertions, 0 deletions
diff --git a/vendor/github.com/tdewolff/parse/util_test.go b/vendor/github.com/tdewolff/parse/util_test.go
new file mode 100644
index 0000000..c08c124
--- /dev/null
+++ b/vendor/github.com/tdewolff/parse/util_test.go
@@ -0,0 +1,176 @@
+package parse // import "github.com/tdewolff/parse"
+
+import (
+ "bytes"
+ "math/rand"
+ "regexp"
+ "testing"
+
+ "github.com/tdewolff/test"
+)
+
+func helperRand(n, m int, chars []byte) [][]byte {
+ r := make([][]byte, n)
+ for i := range r {
+ for j := 0; j < m; j++ {
+ r[i] = append(r[i], chars[rand.Intn(len(chars))])
+ }
+ }
+ return r
+}
+
+////////////////////////////////////////////////////////////////
+
+var wsSlices [][]byte
+
+func init() {
+ wsSlices = helperRand(100, 20, []byte("abcdefg \n\r\f\t"))
+}
+
+func TestCopy(t *testing.T) {
+ foo := []byte("abc")
+ bar := Copy(foo)
+ foo[0] = 'b'
+ test.String(t, string(foo), "bbc")
+ test.String(t, string(bar), "abc")
+}
+
+func TestToLower(t *testing.T) {
+ foo := []byte("Abc")
+ bar := ToLower(foo)
+ bar[1] = 'B'
+ test.String(t, string(foo), "aBc")
+ test.String(t, string(bar), "aBc")
+}
+
+func TestEqualFold(t *testing.T) {
+ test.That(t, EqualFold([]byte("Abc"), []byte("abc")))
+ test.That(t, !EqualFold([]byte("Abcd"), []byte("abc")))
+ test.That(t, !EqualFold([]byte("Bbc"), []byte("abc")))
+}
+
+func TestWhitespace(t *testing.T) {
+ test.That(t, IsAllWhitespace([]byte("\t \r\n\f")))
+ test.That(t, !IsAllWhitespace([]byte("\t \r\n\fx")))
+}
+
+func TestReplaceMultipleWhitespace(t *testing.T) {
+ wsRegexp := regexp.MustCompile("[ \t\f]+")
+ wsNewlinesRegexp := regexp.MustCompile("[ ]*[\r\n][ \r\n]*")
+ for _, e := range wsSlices {
+ reference := wsRegexp.ReplaceAll(e, []byte(" "))
+ reference = wsNewlinesRegexp.ReplaceAll(reference, []byte("\n"))
+ test.Bytes(t, ReplaceMultipleWhitespace(e), reference, "must remove all multiple whitespace but keep newlines")
+ }
+}
+
+func TestTrim(t *testing.T) {
+ test.Bytes(t, TrimWhitespace([]byte("a")), []byte("a"))
+ test.Bytes(t, TrimWhitespace([]byte(" a")), []byte("a"))
+ test.Bytes(t, TrimWhitespace([]byte("a ")), []byte("a"))
+ test.Bytes(t, TrimWhitespace([]byte(" ")), []byte(""))
+}
+
+////////////////////////////////////////////////////////////////
+
+func BenchmarkBytesTrim(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ bytes.TrimSpace(e)
+ }
+ }
+}
+
+func BenchmarkTrim(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ TrimWhitespace(e)
+ }
+ }
+}
+
+func BenchmarkReplace(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ ReplaceMultipleWhitespace(e)
+ }
+ }
+}
+
+func BenchmarkWhitespaceTable(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if IsWhitespace(c) {
+ n++
+ }
+ }
+ }
+ }
+}
+
+func BenchmarkWhitespaceIf1(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if c == ' ' {
+ n++
+ }
+ }
+ }
+ }
+}
+
+func BenchmarkWhitespaceIf2(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if c == ' ' || c == '\n' {
+ n++
+ }
+ }
+ }
+ }
+}
+
+func BenchmarkWhitespaceIf3(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if c == ' ' || c == '\n' || c == '\r' {
+ n++
+ }
+ }
+ }
+ }
+}
+
+func BenchmarkWhitespaceIf4(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if c == ' ' || c == '\n' || c == '\r' || c == '\t' {
+ n++
+ }
+ }
+ }
+ }
+}
+
+func BenchmarkWhitespaceIf5(b *testing.B) {
+ n := 0
+ for i := 0; i < b.N; i++ {
+ for _, e := range wsSlices {
+ for _, c := range e {
+ if c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\f' {
+ n++
+ }
+ }
+ }
+ }
+}