From 2f3112b6f8f18f9df8743cc75ed51da08094ef6a Mon Sep 17 00:00:00 2001 From: Benedikt Lang Date: Sun, 5 Apr 2015 15:04:57 +0200 Subject: [PATCH] New() and Make() Introduce Make() which is an alias for Parse() and returns a version as value. New() changed to return a pointer. Breaking changes: Change New() to Make() to fix pointer vs value problem. --- README.md | 8 ++++---- examples/main.go | 4 ++-- semver.go | 13 ++++++++++--- semver_test.go | 35 +++++++++++++++++++++++++---------- sort_test.go | 12 ++++++------ 5 files changed, 47 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index d9c2f98..5171c5c 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ Note: Always vendor your dependencies or fix on a specific version tag. ```go import github.com/blang/semver -v1, err := semver.New("1.0.0-beta") -v2, err := semver.New("2.0.0-beta") +v1, err := semver.Make("1.0.0-beta") +v2, err := semver.Make("2.0.0-beta") v1.Compare(v2) ``` @@ -53,7 +53,7 @@ Have a look at full examples in [examples/main.go](examples/main.go) ```go import github.com/blang/semver -v, err := semver.New("0.0.1-alpha.preview+123.github") +v, err := semver.Make("0.0.1-alpha.preview+123.github") fmt.Printf("Major: %d\n", v.Major) fmt.Printf("Minor: %d\n", v.Minor) fmt.Printf("Patch: %d\n", v.Patch) @@ -76,7 +76,7 @@ if len(v.Build) > 0 { } } -v001, err := semver.New("0.0.1") +v001, err := semver.Make("0.0.1") // Compare using helpers: v.GT(v2), v.LT, v.GTE, v.LTE v001.GT(v) == true v.LT(v001) == true diff --git a/examples/main.go b/examples/main.go index 617d72a..f36c983 100644 --- a/examples/main.go +++ b/examples/main.go @@ -32,8 +32,8 @@ func main() { } } - // New == Parse - v001, err := semver.New("0.0.1") + // Make == Parse (Value), New for Pointer + v001, err := semver.Make("0.0.1") fmt.Println("\nUse Version.Compare for comparisons (-1, 0, 1):") fmt.Printf("%q is greater than %q: Compare == %d\n", v001, v, v001.Compare(v)) diff --git a/semver.go b/semver.go index 7afe611..c82fe66 100644 --- a/semver.go +++ b/semver.go @@ -191,12 +191,19 @@ func (v Version) Validate() error { return nil } -// Alias for Parse, parses version string and returns a validated Version or error -func New(s string) (Version, error) { +// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error +func New(s string) (vp *Version, err error) { + v, err := Parse(s) + vp = &v + return +} + +// Make is an alias for Parse, parses version string and returns a validated Version or error +func Make(s string) (Version, error) { return Parse(s) } -// Parses version string and returns a validated Version or error +// Parse parses version string and returns a validated Version or error func Parse(s string) (Version, error) { if len(s) == 0 { return Version{}, errors.New("Version string empty") diff --git a/semver_test.go b/semver_test.go index a6312b8..e56ebce 100644 --- a/semver_test.go +++ b/semver_test.go @@ -272,6 +272,21 @@ func TestNewHelper(t *testing.T) { if err != nil { t.Fatalf("Unexpected error %q", err) } + + // New returns pointer + if v == nil { + t.Fatal("Version is nil") + } + if v.Compare(Version{1, 2, 3, nil, nil}) != 0 { + t.Fatal("Unexpected comparison problem") + } +} + +func TestMakeHelper(t *testing.T) { + v, err := Make("1.2.3") + if err != nil { + t.Fatalf("Unexpected error %q", err) + } if v.Compare(Version{1, 2, 3, nil, nil}) != 0 { t.Fatal("Unexpected comparison problem") } @@ -282,7 +297,7 @@ func BenchmarkParseSimple(b *testing.B) { b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { - New(VERSION) + Parse(VERSION) } } @@ -291,7 +306,7 @@ func BenchmarkParseComplex(b *testing.B) { b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { - New(VERSION) + Parse(VERSION) } } @@ -300,13 +315,13 @@ func BenchmarkParseAverage(b *testing.B) { b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { - New(formatTests[n%l].result) + Parse(formatTests[n%l].result) } } func BenchmarkStringSimple(b *testing.B) { const VERSION = "0.0.1" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -316,7 +331,7 @@ func BenchmarkStringSimple(b *testing.B) { func BenchmarkStringLarger(b *testing.B) { const VERSION = "11.15.2012" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -326,7 +341,7 @@ func BenchmarkStringLarger(b *testing.B) { func BenchmarkStringComplex(b *testing.B) { const VERSION = "0.0.1-alpha.preview+123.456" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -345,7 +360,7 @@ func BenchmarkStringAverage(b *testing.B) { func BenchmarkValidateSimple(b *testing.B) { const VERSION = "0.0.1" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -355,7 +370,7 @@ func BenchmarkValidateSimple(b *testing.B) { func BenchmarkValidateComplex(b *testing.B) { const VERSION = "0.0.1-alpha.preview+123.456" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -374,7 +389,7 @@ func BenchmarkValidateAverage(b *testing.B) { func BenchmarkCompareSimple(b *testing.B) { const VERSION = "0.0.1" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { @@ -384,7 +399,7 @@ func BenchmarkCompareSimple(b *testing.B) { func BenchmarkCompareComplex(b *testing.B) { const VERSION = "0.0.1-alpha.preview+123.456" - v, _ := New(VERSION) + v, _ := Parse(VERSION) b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { diff --git a/sort_test.go b/sort_test.go index 209a6ef..6889397 100644 --- a/sort_test.go +++ b/sort_test.go @@ -6,9 +6,9 @@ import ( ) func TestSort(t *testing.T) { - v100, _ := New("1.0.0") - v010, _ := New("0.1.0") - v001, _ := New("0.0.1") + v100, _ := Parse("1.0.0") + v010, _ := Parse("0.1.0") + v001, _ := Parse("0.0.1") versions := []Version{v010, v100, v001} Sort(versions) @@ -19,9 +19,9 @@ func TestSort(t *testing.T) { } func BenchmarkSort(b *testing.B) { - v100, _ := New("1.0.0") - v010, _ := New("0.1.0") - v001, _ := New("0.0.1") + v100, _ := Parse("1.0.0") + v010, _ := Parse("0.1.0") + v001, _ := Parse("0.0.1") b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ {