diff --git a/decimal.go b/decimal.go index f93c4f1..97ac9bd 100644 --- a/decimal.go +++ b/decimal.go @@ -125,6 +125,24 @@ func (d Decimal) Cmp(other Decimal) int { return d.fl.Cmp(other.fl) } +// Max will return the max Decimal between two Decimals +func (d Decimal) Max(other Decimal) Decimal { + if d.GTE(other) { + return d + } + + return other +} + +// Min will return the min Decimal between two Decimals +func (d Decimal) Min(other Decimal) Decimal { + if d.LTE(other) { + return d + } + + return other +} + // Float will return this Decimal as a float value. // Note that there may be some loss of precision in this operation. func (d Decimal) Float() float64 { diff --git a/decimal_test.go b/decimal_test.go index 7474db9..58f212a 100644 --- a/decimal_test.go +++ b/decimal_test.go @@ -262,3 +262,50 @@ func TestDecimal_Sql(t *testing.T) { assert.EqualValues(t, "Passed value 1.23 should be a string", err.Error()) }) } + +func TestDecimal_Max(t *testing.T) { + t.Run("a > b", func(t *testing.T) { + a := NewDecimal(2) + b := NewDecimal(1) + + assert.Equal(t, a.Max(b), a) + }) + + t.Run("a = b", func(t *testing.T) { + + a := NewDecimal(1) + b := NewDecimal(1) + + assert.Equal(t, a.Max(b), a) + }) + + t.Run("a < b", func(t *testing.T) { + a := NewDecimal(1) + b := NewDecimal(2) + + assert.Equal(t, a.Max(b), b) + }) +} + +func TestDecimal_Min(t *testing.T) { + t.Run("a > b", func(t *testing.T) { + a := NewDecimal(2) + b := NewDecimal(1) + + assert.Equal(t, a.Min(b), b) + }) + + t.Run("a = b", func(t *testing.T) { + a := NewDecimal(1) + b := NewDecimal(1) + + assert.Equal(t, a.Min(b), a) + }) + + t.Run("a < b", func(t *testing.T) { + a := NewDecimal(1) + b := NewDecimal(2) + + assert.Equal(t, a.Min(b), a) + }) +}