Browse Source

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.
Benedikt Lang 11 years ago
parent
commit
2f3112b6f8
5 changed files with 47 additions and 25 deletions
  1. +4
    -4
      README.md
  2. +2
    -2
      examples/main.go
  3. +10
    -3
      semver.go
  4. +25
    -10
      semver_test.go
  5. +6
    -6
      sort_test.go

+ 4
- 4
README.md View File

@ -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


+ 2
- 2
examples/main.go View File

@ -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))


+ 10
- 3
semver.go View File

@ -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")


+ 25
- 10
semver_test.go View File

@ -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++ {


+ 6
- 6
sort_test.go View File

@ -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++ {


Loading…
Cancel
Save