From 89d5a94084204999c2850762b1c1fafda1c349fc Mon Sep 17 00:00:00 2001 From: joeybloggs Date: Mon, 18 Jul 2016 09:06:08 -0400 Subject: [PATCH] final touches + README updates fresh test of old vs new benchmarks ```go benchmark old ns/op new ns/op delta BenchmarkFieldSuccess-8 155 118 -23.87% BenchmarkFieldFailure-8 777 758 -2.45% BenchmarkFieldDiveSuccess-8 2813 2471 -12.16% BenchmarkFieldDiveFailure-8 3544 3172 -10.50% BenchmarkFieldCustomTypeSuccess-8 328 300 -8.54% BenchmarkFieldCustomTypeFailure-8 748 775 +3.61% BenchmarkFieldOrTagSuccess-8 1169 1122 -4.02% BenchmarkFieldOrTagFailure-8 1205 1167 -3.15% BenchmarkStructLevelValidationSuccess-8 670 548 -18.21% BenchmarkStructLevelValidationFailure-8 1380 558 -59.57% BenchmarkStructSimpleCustomTypeSuccess-8 889 623 -29.92% BenchmarkStructSimpleCustomTypeFailure-8 1536 1381 -10.09% BenchmarkStructPartialSuccess-8 1194 1036 -13.23% BenchmarkStructPartialFailure-8 1869 1734 -7.22% BenchmarkStructExceptSuccess-8 949 888 -6.43% BenchmarkStructExceptFailure-8 1181 1036 -12.28% BenchmarkStructSimpleCrossFieldSuccess-8 948 773 -18.46% BenchmarkStructSimpleCrossFieldFailure-8 1708 1487 -12.94% BenchmarkStructSimpleCrossStructCrossFieldSuccess-8 1608 1261 -21.58% BenchmarkStructSimpleCrossStructCrossFieldFailure-8 2320 2055 -11.42% BenchmarkStructSimpleSuccess-8 833 519 -37.70% BenchmarkStructSimpleFailure-8 1612 1429 -11.35% BenchmarkStructSimpleSuccessParallel-8 239 146 -38.91% BenchmarkStructSimpleFailureParallel-8 664 551 -17.02% BenchmarkStructComplexSuccess-8 5025 3269 -34.95% BenchmarkStructComplexFailure-8 10166 8436 -17.02% BenchmarkStructComplexSuccessParallel-8 1591 1024 -35.64% BenchmarkStructComplexFailureParallel-8 4306 3536 -17.88% benchmark old allocs new allocs delta BenchmarkFieldSuccess-8 0 0 +0.00% BenchmarkFieldFailure-8 4 4 +0.00% BenchmarkFieldDiveSuccess-8 27 28 +3.70% BenchmarkFieldDiveFailure-8 31 32 +3.23% BenchmarkFieldCustomTypeSuccess-8 2 2 +0.00% BenchmarkFieldCustomTypeFailure-8 4 4 +0.00% BenchmarkFieldOrTagSuccess-8 1 1 +0.00% BenchmarkFieldOrTagFailure-8 6 6 +0.00% BenchmarkStructLevelValidationSuccess-8 6 5 -16.67% BenchmarkStructLevelValidationFailure-8 11 5 -54.55% BenchmarkStructSimpleCustomTypeSuccess-8 5 3 -40.00% BenchmarkStructSimpleCustomTypeFailure-8 11 9 -18.18% BenchmarkStructPartialSuccess-8 10 9 -10.00% BenchmarkStructPartialFailure-8 15 14 -6.67% BenchmarkStructExceptSuccess-8 7 7 +0.00% BenchmarkStructExceptFailure-8 10 9 -10.00% BenchmarkStructSimpleCrossFieldSuccess-8 6 4 -33.33% BenchmarkStructSimpleCrossFieldFailure-8 11 9 -18.18% BenchmarkStructSimpleCrossStructCrossFieldSuccess-8 10 7 -30.00% BenchmarkStructSimpleCrossStructCrossFieldFailure-8 15 12 -20.00% BenchmarkStructSimpleSuccess-8 3 1 -66.67% BenchmarkStructSimpleFailure-8 11 9 -18.18% BenchmarkStructSimpleSuccessParallel-8 3 1 -66.67% BenchmarkStructSimpleFailureParallel-8 11 9 -18.18% BenchmarkStructComplexSuccess-8 32 15 -53.12% BenchmarkStructComplexFailure-8 77 60 -22.08% BenchmarkStructComplexSuccessParallel-8 32 15 -53.12% BenchmarkStructComplexFailureParallel-8 77 60 -22.08% benchmark old bytes new bytes delta BenchmarkFieldSuccess-8 0 0 +0.00% BenchmarkFieldFailure-8 432 432 +0.00% BenchmarkFieldDiveSuccess-8 384 464 +20.83% BenchmarkFieldDiveFailure-8 816 896 +9.80% BenchmarkFieldCustomTypeSuccess-8 32 32 +0.00% BenchmarkFieldCustomTypeFailure-8 432 432 +0.00% BenchmarkFieldOrTagSuccess-8 4 4 +0.00% BenchmarkFieldOrTagFailure-8 448 448 +0.00% BenchmarkStructLevelValidationSuccess-8 168 160 -4.76% BenchmarkStructLevelValidationFailure-8 632 160 -74.68% BenchmarkStructSimpleCustomTypeSuccess-8 56 36 -35.71% BenchmarkStructSimpleCustomTypeFailure-8 656 640 -2.44% BenchmarkStructPartialSuccess-8 352 272 -22.73% BenchmarkStructPartialFailure-8 808 730 -9.65% BenchmarkStructExceptSuccess-8 314 250 -20.38% BenchmarkStructExceptFailure-8 352 272 -22.73% BenchmarkStructSimpleCrossFieldSuccess-8 96 80 -16.67% BenchmarkStructSimpleCrossFieldFailure-8 552 536 -2.90% BenchmarkStructSimpleCrossStructCrossFieldSuccess-8 136 112 -17.65% BenchmarkStructSimpleCrossStructCrossFieldFailure-8 600 576 -4.00% BenchmarkStructSimpleSuccess-8 24 4 -83.33% BenchmarkStructSimpleFailure-8 656 640 -2.44% BenchmarkStructSimpleSuccessParallel-8 24 4 -83.33% BenchmarkStructSimpleFailureParallel-8 656 640 -2.44% BenchmarkStructComplexSuccess-8 392 244 -37.76% BenchmarkStructComplexFailure-8 3745 3609 -3.63% BenchmarkStructComplexSuccessParallel-8 392 244 -37.76% BenchmarkStructComplexFailureParallel-8 3745 3609 -3.63% ``` --- README.md | 59 +++++++++++++++++++++++------------------------ validator_test.go | 36 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index cb2ac1a6..32e042cc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Package validator ================ [![Join the chat at https://gitter.im/bluesuncorp/validator](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/go-playground/validator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -![Project status](https://img.shields.io/badge/version-8.17.3-green.svg) +![Project status](https://img.shields.io/badge/version-8.18.0-green.svg) [![Build Status](https://semaphoreci.com/api/v1/projects/ec20115f-ef1b-4c7d-9393-cc76aba74eb4/530054/badge.svg)](https://semaphoreci.com/joeybloggs/validator) [![Coverage Status](https://coveralls.io/repos/go-playground/validator/badge.svg?branch=v8&service=github)](https://coveralls.io/github/go-playground/validator?branch=v8) [![Go Report Card](https://goreportcard.com/badge/github.com/go-playground/validator)](https://goreportcard.com/report/github.com/go-playground/validator) @@ -310,36 +310,35 @@ Benchmarks ------ ###### Run on MacBook Pro (Retina, 15-inch, Late 2013) 2.6 GHz Intel Core i7 16 GB 1600 MHz DDR3 using Go version go1.5.3 darwin/amd64 ```go -go test -cpu=4 -bench=. -benchmem=true PASS -BenchmarkFieldSuccess-4 10000000 167 ns/op 0 B/op 0 allocs/op -BenchmarkFieldFailure-4 2000000 701 ns/op 432 B/op 4 allocs/op -BenchmarkFieldDiveSuccess-4 500000 2937 ns/op 480 B/op 27 allocs/op -BenchmarkFieldDiveFailure-4 500000 3536 ns/op 912 B/op 31 allocs/op -BenchmarkFieldCustomTypeSuccess-4 5000000 341 ns/op 32 B/op 2 allocs/op -BenchmarkFieldCustomTypeFailure-4 2000000 679 ns/op 432 B/op 4 allocs/op -BenchmarkFieldOrTagSuccess-4 1000000 1157 ns/op 16 B/op 1 allocs/op -BenchmarkFieldOrTagFailure-4 1000000 1109 ns/op 464 B/op 6 allocs/op -BenchmarkStructLevelValidationSuccess-4 2000000 694 ns/op 176 B/op 6 allocs/op -BenchmarkStructLevelValidationFailure-4 1000000 1311 ns/op 640 B/op 11 allocs/op -BenchmarkStructSimpleCustomTypeSuccess-4 2000000 894 ns/op 80 B/op 5 allocs/op -BenchmarkStructSimpleCustomTypeFailure-4 1000000 1496 ns/op 688 B/op 11 allocs/op -BenchmarkStructPartialSuccess-4 1000000 1229 ns/op 384 B/op 10 allocs/op -BenchmarkStructPartialFailure-4 1000000 1838 ns/op 832 B/op 15 allocs/op -BenchmarkStructExceptSuccess-4 2000000 961 ns/op 336 B/op 7 allocs/op -BenchmarkStructExceptFailure-4 1000000 1218 ns/op 384 B/op 10 allocs/op -BenchmarkStructSimpleCrossFieldSuccess-4 2000000 954 ns/op 128 B/op 6 allocs/op -BenchmarkStructSimpleCrossFieldFailure-4 1000000 1569 ns/op 592 B/op 11 allocs/op -BenchmarkStructSimpleCrossStructCrossFieldSuccess-4 1000000 1588 ns/op 192 B/op 10 allocs/op -BenchmarkStructSimpleCrossStructCrossFieldFailure-4 1000000 2217 ns/op 656 B/op 15 allocs/op -BenchmarkStructSimpleSuccess-4 2000000 925 ns/op 48 B/op 3 allocs/op -BenchmarkStructSimpleFailure-4 1000000 1650 ns/op 688 B/op 11 allocs/op -BenchmarkStructSimpleSuccessParallel-4 5000000 261 ns/op 48 B/op 3 allocs/op -BenchmarkStructSimpleFailureParallel-4 2000000 758 ns/op 688 B/op 11 allocs/op -BenchmarkStructComplexSuccess-4 300000 5868 ns/op 544 B/op 32 allocs/op -BenchmarkStructComplexFailure-4 200000 10767 ns/op 3912 B/op 77 allocs/op -BenchmarkStructComplexSuccessParallel-4 1000000 1559 ns/op 544 B/op 32 allocs/op -BenchmarkStructComplexFailureParallel-4 500000 3747 ns/op 3912 B/op 77 allocs +BenchmarkFieldSuccess-8 20000000 118 ns/op 0 B/op 0 allocs/op +BenchmarkFieldFailure-8 2000000 758 ns/op 432 B/op 4 allocs/op +BenchmarkFieldDiveSuccess-8 500000 2471 ns/op 464 B/op 28 allocs/op +BenchmarkFieldDiveFailure-8 500000 3172 ns/op 896 B/op 32 allocs/op +BenchmarkFieldCustomTypeSuccess-8 5000000 300 ns/op 32 B/op 2 allocs/op +BenchmarkFieldCustomTypeFailure-8 2000000 775 ns/op 432 B/op 4 allocs/op +BenchmarkFieldOrTagSuccess-8 1000000 1122 ns/op 4 B/op 1 allocs/op +BenchmarkFieldOrTagFailure-8 1000000 1167 ns/op 448 B/op 6 allocs/op +BenchmarkStructLevelValidationSuccess-8 3000000 548 ns/op 160 B/op 5 allocs/op +BenchmarkStructLevelValidationFailure-8 3000000 558 ns/op 160 B/op 5 allocs/op +BenchmarkStructSimpleCustomTypeSuccess-8 2000000 623 ns/op 36 B/op 3 allocs/op +BenchmarkStructSimpleCustomTypeFailure-8 1000000 1381 ns/op 640 B/op 9 allocs/op +BenchmarkStructPartialSuccess-8 1000000 1036 ns/op 272 B/op 9 allocs/op +BenchmarkStructPartialFailure-8 1000000 1734 ns/op 730 B/op 14 allocs/op +BenchmarkStructExceptSuccess-8 2000000 888 ns/op 250 B/op 7 allocs/op +BenchmarkStructExceptFailure-8 1000000 1036 ns/op 272 B/op 9 allocs/op +BenchmarkStructSimpleCrossFieldSuccess-8 2000000 773 ns/op 80 B/op 4 allocs/op +BenchmarkStructSimpleCrossFieldFailure-8 1000000 1487 ns/op 536 B/op 9 allocs/op +BenchmarkStructSimpleCrossStructCrossFieldSuccess-8 1000000 1261 ns/op 112 B/op 7 allocs/op +BenchmarkStructSimpleCrossStructCrossFieldFailure-8 1000000 2055 ns/op 576 B/op 12 allocs/op +BenchmarkStructSimpleSuccess-8 3000000 519 ns/op 4 B/op 1 allocs/op +BenchmarkStructSimpleFailure-8 1000000 1429 ns/op 640 B/op 9 allocs/op +BenchmarkStructSimpleSuccessParallel-8 10000000 146 ns/op 4 B/op 1 allocs/op +BenchmarkStructSimpleFailureParallel-8 2000000 551 ns/op 640 B/op 9 allocs/op +BenchmarkStructComplexSuccess-8 500000 3269 ns/op 244 B/op 15 allocs/op +BenchmarkStructComplexFailure-8 200000 8436 ns/op 3609 B/op 60 allocs/op +BenchmarkStructComplexSuccessParallel-8 1000000 1024 ns/op 244 B/op 15 allocs/op +BenchmarkStructComplexFailureParallel-8 500000 3536 ns/op 3609 B/op 60 allocs/op ``` Complimentary Software diff --git a/validator_test.go b/validator_test.go index 9a9c9fe8..6af996d4 100644 --- a/validator_test.go +++ b/validator_test.go @@ -407,6 +407,42 @@ func TestAnonymous(t *testing.T) { Equal(t, err, nil) } +func TestAnonymousSameStructDifferentTags(t *testing.T) { + + v2 := New(&Config{TagName: "validate", FieldNameTag: "json"}) + + type Test struct { + A interface{} + } + + tst := &Test{ + A: struct { + A string `validate:"required"` + }{ + A: "", + }, + } + + err := v2.Struct(tst) + NotEqual(t, err, nil) + + errs := err.(ValidationErrors) + + Equal(t, len(errs), 1) + AssertError(t, errs, "Test.A.A", "A", "required") + + tst = &Test{ + A: struct { + A string `validate:"omitempty,required"` + }{ + A: "", + }, + } + + err = v2.Struct(tst) + Equal(t, err, nil) +} + func TestStructLevelReturnValidationErrors(t *testing.T) { config := &Config{ TagName: "validate",