From 1df4689907bee389b8f95f82b9e38383c5ea586c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Renard?= Date: Mon, 11 Nov 2019 07:38:34 +0100 Subject: [PATCH] Add Min & Max support --- decimal.go | 18 ++++++++++++++++++ decimal_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) 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) + }) +}