Reformat code base and update decimal copy docs (#249)

This commit is contained in:
Mateusz Woś 2021-10-12 12:11:39 +02:00 committed by GitHub
parent 3259e0a2de
commit 283b007e5f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 33 deletions

View file

@ -414,6 +414,15 @@ func NewFromFloatWithExponent(value float64, exp int32) Decimal {
} }
} }
// Copy returns a copy of decimal with the same value and exponent, but a different pointer to value.
func (d Decimal) Copy() Decimal {
d.ensureInitialized()
return Decimal{
value: &(*d.value),
exp: d.exp,
}
}
// rescale returns a rescaled version of the decimal. Returned // rescale returns a rescaled version of the decimal. Returned
// decimal may be less precise if the given exponent is bigger // decimal may be less precise if the given exponent is bigger
// than the initial exponent of the Decimal. // than the initial exponent of the Decimal.
@ -1762,7 +1771,7 @@ func (d Decimal) Sin() Decimal {
sign = !sign sign = !sign
j -= 4 j -= 4
} }
z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic z := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic
zz := z.Mul(z) zz := z.Mul(z)
if j == 1 || j == 2 { if j == 1 || j == 2 {
@ -1893,14 +1902,3 @@ func (d Decimal) Tan() Decimal {
} }
return y return y
} }
// Copy makes instance of d with same value and different pointer.
func (d Decimal) Copy() Decimal {
d.ensureInitialized()
return Decimal{
value: &(*d.value),
exp: d.exp,
}
}

View file

@ -556,6 +556,22 @@ func TestNewFromBigIntWithExponent(t *testing.T) {
} }
} }
func TestCopy(t *testing.T) {
origin := New(1, 0)
cpy := origin.Copy()
if cpy.Cmp(origin) != 0 {
t.Error("expecting copy and origin to be equals, but they are not")
}
//change value
cpy = cpy.Add(New(1, 0))
if cpy.Cmp(origin) == 0 {
t.Error("expecting copy and origin to have different values, but they are equal")
}
}
func TestJSON(t *testing.T) { func TestJSON(t *testing.T) {
for _, x := range testTable { for _, x := range testTable {
s := x.short s := x.short
@ -2803,7 +2819,7 @@ func TestDecimal_Coefficient(t *testing.T) {
func TestDecimal_CoefficientInt64(t *testing.T) { func TestDecimal_CoefficientInt64(t *testing.T) {
type Inp struct { type Inp struct {
Dec string Dec string
Coefficient int64 Coefficient int64
} }
@ -3300,21 +3316,3 @@ func ExampleNewFromFloat() {
//0.123123123123123 //0.123123123123123
//-10000000000000 //-10000000000000
} }
//For Copy
func TestCopy(t *testing.T) {
origin := New(1, 0)
cpy := origin.Copy()
if cpy.Cmp(origin) != 0 {
t.Error("copy and origin not equal")
}
//change value
cpy = cpy.Add(New(1, 0))
if cpy.Cmp(origin) == 0 {
t.Error("copy and origin are equal but expected not")
}
}