package semver import ( "testing" ) /* Constraint creation benchmarks */ func benchNewConstraint(c string, b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { _, _ = NewConstraint(c) } } func BenchmarkNewConstraintUnary(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint("=2.0", b) } func BenchmarkNewConstraintTilde(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint("~2.0.0", b) } func BenchmarkNewConstraintCaret(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint("^2.0.0", b) } func BenchmarkNewConstraintWildcard(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint("1.x", b) } func BenchmarkNewConstraintRange(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint(">=2.1.x, <3.1.0", b) } func BenchmarkNewConstraintUnion(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewConstraint("~2.0.0 || =3.1.0", b) } /* Check benchmarks */ func benchCheckVersion(c, v string, b *testing.B) { b.ReportAllocs() b.ResetTimer() version, _ := NewVersion(v) constraint, _ := NewConstraint(c) for i := 0; i < b.N; i++ { constraint.Check(version) } } func BenchmarkCheckVersionUnary(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion("=2.0", "2.0.0", b) } func BenchmarkCheckVersionTilde(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion("~2.0.0", "2.0.5", b) } func BenchmarkCheckVersionCaret(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion("^2.0.0", "2.1.0", b) } func BenchmarkCheckVersionWildcard(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion("1.x", "1.4.0", b) } func BenchmarkCheckVersionRange(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion(">=2.1.x, <3.1.0", "2.4.5", b) } func BenchmarkCheckVersionUnion(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchCheckVersion("~2.0.0 || =3.1.0", "3.1.0", b) } func benchValidateVersion(c, v string, b *testing.B) { b.ReportAllocs() b.ResetTimer() version, _ := NewVersion(v) constraint, _ := NewConstraint(c) for i := 0; i < b.N; i++ { constraint.Validate(version) } } /* Validate benchmarks, including fails */ func BenchmarkValidateVersionUnary(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("=2.0", "2.0.0", b) } func BenchmarkValidateVersionUnaryFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("=2.0", "2.0.1", b) } func BenchmarkValidateVersionTilde(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("~2.0.0", "2.0.5", b) } func BenchmarkValidateVersionTildeFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("~2.0.0", "1.0.5", b) } func BenchmarkValidateVersionCaret(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("^2.0.0", "2.1.0", b) } func BenchmarkValidateVersionCaretFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("^2.0.0", "4.1.0", b) } func BenchmarkValidateVersionWildcard(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("1.x", "1.4.0", b) } func BenchmarkValidateVersionWildcardFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("1.x", "2.4.0", b) } func BenchmarkValidateVersionRange(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion(">=2.1.x, <3.1.0", "2.4.5", b) } func BenchmarkValidateVersionRangeFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion(">=2.1.x, <3.1.0", "1.4.5", b) } func BenchmarkValidateVersionUnion(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("~2.0.0 || =3.1.0", "3.1.0", b) } func BenchmarkValidateVersionUnionFail(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchValidateVersion("~2.0.0 || =3.1.0", "3.1.1", b) } /* Version creation benchmarks */ func benchNewVersion(v string, b *testing.B) { for i := 0; i < b.N; i++ { _, _ = NewVersion(v) } } func benchStrictNewVersion(v string, b *testing.B) { for i := 0; i < b.N; i++ { _, _ = StrictNewVersion(v) } } func BenchmarkNewVersionSimple(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewVersion("1.0.0", b) } func BenchmarkCoerceNewVersionSimple(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchStrictNewVersion("1.0.0", b) } func BenchmarkNewVersionPre(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewVersion("1.0.0-alpha", b) } func BenchmarkStrictNewVersionPre(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchStrictNewVersion("1.0.0-alpha", b) } func BenchmarkNewVersionMeta(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewVersion("1.0.0+metadata", b) } func BenchmarkStrictNewVersionMeta(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchStrictNewVersion("1.0.0+metadata", b) } func BenchmarkNewVersionMetaDash(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchNewVersion("1.0.0-alpha.1+meta.data", b) } func BenchmarkStrictNewVersionMetaDash(b *testing.B) { b.ReportAllocs() b.ResetTimer() benchStrictNewVersion("1.0.0-alpha.1+meta.data", b) }