From c221af586ff7960f3d0296501fece39d1eef9c60 Mon Sep 17 00:00:00 2001 From: bbrodriges Date: Thu, 8 Dec 2016 22:01:28 +0300 Subject: [PATCH] partial benchmarks implementations --- benchmarks_test.go | 127 +++++++++++++++++++++++++++++++++++++++++++++ is_test.go | 30 ----------- 2 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 benchmarks_test.go diff --git a/benchmarks_test.go b/benchmarks_test.go new file mode 100644 index 0000000..50a04da --- /dev/null +++ b/benchmarks_test.go @@ -0,0 +1,127 @@ +package is + +import ( + "path/filepath" + "reflect" + "runtime" + "testing" +) + +type benchmarkCase struct { + function func(string) bool + caseName string + param string +} + +var ( + benchmarkFuncs = []benchmarkCase{ + // Alpha + benchmarkCase{Alpha, "Empty", ""}, + benchmarkCase{Alpha, "Space", " "}, + benchmarkCase{Alpha, "False", "abc!!!"}, + benchmarkCase{Alpha, "True", "abc"}, + //UTFLetter + benchmarkCase{UTFLetter, "Empty", ""}, + benchmarkCase{UTFLetter, "Space", " "}, + benchmarkCase{UTFLetter, "False", "\u0026"}, //UTF-8(ASCII): & + benchmarkCase{UTFLetter, "True", "abc"}, + // Alphanumeric + benchmarkCase{Alphanumeric, "Empty", ""}, + benchmarkCase{Alphanumeric, "Space", " "}, + benchmarkCase{Alphanumeric, "False", "\u0026"}, //UTF-8(ASCII): & + benchmarkCase{Alphanumeric, "True", "abc123"}, + // UTFLetterNumeric + benchmarkCase{UTFLetterNumeric, "Empty", ""}, + benchmarkCase{UTFLetterNumeric, "Space", " "}, + benchmarkCase{UTFLetterNumeric, "False", "abc!!!"}, + benchmarkCase{UTFLetterNumeric, "True", "abc1"}, + // Numeric + benchmarkCase{Numeric, "Empty", ""}, + benchmarkCase{Numeric, "Space", " "}, + benchmarkCase{Numeric, "False", "abc!!!"}, + benchmarkCase{Numeric, "True", "0123"}, + // UTFNumeric + benchmarkCase{UTFNumeric, "Empty", ""}, + benchmarkCase{UTFNumeric, "Space", " "}, + benchmarkCase{UTFNumeric, "False", "abc!!!"}, + benchmarkCase{UTFNumeric, "True", "\u0030"}, //UTF-8(ASCII): 0 + // UTFDigit + benchmarkCase{UTFDigit, "Empty", ""}, + benchmarkCase{UTFDigit, "Space", " "}, + benchmarkCase{UTFDigit, "False", "abc!!!"}, + benchmarkCase{UTFDigit, "True", "\u0030"}, //UTF-8(ASCII): 0 + // LowerCase + benchmarkCase{LowerCase, "Empty", ""}, + benchmarkCase{LowerCase, "Space", " "}, + benchmarkCase{LowerCase, "False", "ABC"}, + benchmarkCase{LowerCase, "True", "abc"}, + // UpperCase + benchmarkCase{UpperCase, "Empty", ""}, + benchmarkCase{UpperCase, "Space", " "}, + benchmarkCase{UpperCase, "False", "abc"}, + benchmarkCase{UpperCase, "True", "ABC"}, + // Int + benchmarkCase{Int, "Empty", ""}, + benchmarkCase{Int, "Space", " "}, + benchmarkCase{Int, "False", "abc"}, + benchmarkCase{Int, "True", "000"}, + // Email + benchmarkCase{Email, "Empty", ""}, + benchmarkCase{Email, "Space", " "}, + benchmarkCase{Email, "False", "@invalid.com"}, + benchmarkCase{Email, "True", "foo@bar.com"}, + // URL + benchmarkCase{URL, "Empty", ""}, + benchmarkCase{URL, "Space", " "}, + benchmarkCase{URL, "False", "./rel/test/dir"}, + benchmarkCase{URL, "True", "http://foobar.org/"}, + // RequestURL + benchmarkCase{RequestURL, "Empty", ""}, + benchmarkCase{RequestURL, "Space", " "}, + benchmarkCase{RequestURL, "False", "invalid."}, + benchmarkCase{RequestURL, "True", "http://foobar.org/"}, + // RequestURI + benchmarkCase{RequestURI, "Empty", ""}, + benchmarkCase{RequestURI, "Space", " "}, + benchmarkCase{RequestURI, "False", "invalid."}, + benchmarkCase{RequestURI, "True", "http://foobar.org/"}, + // Float + benchmarkCase{Float, "Empty", ""}, + benchmarkCase{Float, "Space", " "}, + benchmarkCase{Float, "False", "+1f"}, + benchmarkCase{Float, "True", "123.123"}, + // Hexadecimal + benchmarkCase{Hexadecimal, "Empty", ""}, + benchmarkCase{Hexadecimal, "Space", " "}, + benchmarkCase{Hexadecimal, "False", ".."}, + benchmarkCase{Hexadecimal, "True", "deadBEEF"}, + // Hexcolor + benchmarkCase{Hexcolor, "Empty", ""}, + benchmarkCase{Hexcolor, "Space", " "}, + benchmarkCase{Hexcolor, "False", "#ff12FG"}, + benchmarkCase{Hexcolor, "True", "#f00"}, + // RGBcolor + benchmarkCase{RGBcolor, "Empty", ""}, + benchmarkCase{RGBcolor, "Space", " "}, + benchmarkCase{RGBcolor, "False", "rgba(0,31,255)"}, + benchmarkCase{RGBcolor, "True", "rgb(0,31,255)"}, + } +) + +func getFuncName(f interface{}) string { + n := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name() + return filepath.Base(n) +} + +func Benchmark(b *testing.B) { + for _, bencCase := range benchmarkFuncs { + name := getFuncName(bencCase.function) + "." + bencCase.caseName + b.Run(name, func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bencCase.function(bencCase.param) + } + }) + } +} diff --git a/is_test.go b/is_test.go index 4d5d910..cfc71e5 100644 --- a/is_test.go +++ b/is_test.go @@ -557,36 +557,6 @@ func TestEmail(t *testing.T) { } } -func BenchmarkEmail(b *testing.B) { - var tests = []struct { - param string - expected bool - }{ - {``, false}, - {`foo@bar.com`, true}, - {`x@x.x`, true}, - {`foo@bar.com.au`, true}, - {`foo+bar@bar.com`, true}, - {`foo@bar.coffee`, true}, - {`foo@bar.中文网`, true}, - {`invalidemail@`, false}, - {`invalid.com`, false}, - {`@invalid.com`, false}, - {`test|123@m端ller.com`, true}, - {`hans@m端ller.com`, true}, - {`hans.m端ller@test.com`, true}, - {`NathAn.daVIeS@DomaIn.cOM`, true}, - {`NATHAN.DAVIES@DOMAIN.CO.UK`, true}, - {`very.(),:;<>[]".VERY."very@\ "very".unusual@strange.example.com`, true}, - } - - for i := 0; i < 1000000; i++ { - for _, test := range tests { - Email(test.param) - } - } -} - func ExampleEmail() { fmt.Println(Email("jhon@example.com")) fmt.Println(Email("invalid.com"))