Skip to content

Commit

Permalink
feat: update Compare method in semver package
Browse files Browse the repository at this point in the history
  • Loading branch information
mellonnen committed Feb 5, 2023
1 parent 83f4c1c commit 6f1cb60
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 26 deletions.
47 changes: 28 additions & 19 deletions internal/semver/semver.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,18 @@ const pattern = `^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$`

var ParseError = errors.New("provided string cannot be parsed into semver")

type Comparsion int

const (
CompareEqual Comparsion = iota
CompareOldMajor
CompareNewMajor
CompareOldMinor
CompareNewMinor
CompareOldPatch
CompareNewPatch
)

type Version struct {
major, minor, patch int
}
Expand Down Expand Up @@ -54,26 +66,23 @@ func (sv Version) String() string {
// Compare compares the semver against the provided oracle statement.
// Return -1 if the semver is less than the oracle statement, 1 if
// the oracle statement is larger than the semver and 0 if they are equal.
func (sv Version) Compare(oracle Version) int {
if sv.major < oracle.major {
return -1
}
if sv.major > oracle.major {
return 1
}
if sv.minor < oracle.minor {
return -1
}
if sv.minor > oracle.minor {
return 1
}
if sv.patch < oracle.patch {
return -1
}
if sv.patch > oracle.patch {
return 1
func (sv Version) Compare(oracle Version) Comparsion {
switch {
case sv.major < oracle.major:
return CompareOldMajor
case sv.major > oracle.major:
return CompareNewMajor
case sv.minor < oracle.minor:
return CompareOldMinor
case sv.minor > oracle.minor:
return CompareNewMinor
case sv.patch < oracle.patch:
return CompareOldPatch
case sv.patch > oracle.patch:
return CompareNewPatch
default:
return CompareEqual
}
return 0
}

func (sv Version) Major() int {
Expand Down
14 changes: 7 additions & 7 deletions internal/semver/semver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,41 +53,41 @@ func TestCompare(t *testing.T) {
t.Run("oracle larger", func(t *testing.T) {
oracle, err := semver.Parse("v2.0.0")
assert.Nil(t, err)
assert.Equal(t, -1, sv.Compare(oracle))
assert.Equal(t, semver.CompareOldMajor, sv.Compare(oracle))
})
t.Run("oracle less", func(t *testing.T) {
oracle, err := semver.Parse("v0.0.0")
assert.Nil(t, err)
assert.Equal(t, 1, sv.Compare(oracle))
assert.Equal(t, semver.CompareNewMajor, sv.Compare(oracle))
})
})
t.Run("minor", func(t *testing.T) {
t.Run("oracle larger", func(t *testing.T) {
oracle, err := semver.Parse("v1.2.0")
assert.Nil(t, err)
assert.Equal(t, -1, sv.Compare(oracle))
assert.Equal(t, semver.CompareOldMinor, sv.Compare(oracle))
})
t.Run("oracle less", func(t *testing.T) {
oracle, err := semver.Parse("v1.0.0")
assert.Nil(t, err)
assert.Equal(t, 1, sv.Compare(oracle))
assert.Equal(t, semver.CompareNewMinor, sv.Compare(oracle))
})
})
t.Run("patch", func(t *testing.T) {
t.Run("oracle larger", func(t *testing.T) {
oracle, err := semver.Parse("v1.1.2")
assert.Nil(t, err)
assert.Equal(t, -1, sv.Compare(oracle))
assert.Equal(t, semver.CompareOldPatch, sv.Compare(oracle))
})
t.Run("oracle less", func(t *testing.T) {
oracle, err := semver.Parse("v1.1.0")
assert.Nil(t, err)
assert.Equal(t, 1, sv.Compare(oracle))
assert.Equal(t, semver.CompareNewPatch, sv.Compare(oracle))
})
})
t.Run("equal", func(t *testing.T) {
oracle, err := semver.Parse("v1.1.1")
assert.Nil(t, err)
assert.Equal(t, 0, sv.Compare(oracle))
assert.Equal(t, semver.CompareEqual, sv.Compare(oracle))
})
}

0 comments on commit 6f1cb60

Please sign in to comment.