ported over rational
This commit is contained in:
+7
-5
@@ -10,8 +10,10 @@ import (
|
||||
wire "github.com/tendermint/go-wire"
|
||||
)
|
||||
|
||||
var ratCdc = RegisterWire(wire.NewCodec())
|
||||
|
||||
// add rational codec elements to provided codec
|
||||
func RationalCodec(cdc *wire.Codec) *wire.Codec {
|
||||
func RegisterWire(cdc *wire.Codec) *wire.Codec {
|
||||
cdc.RegisterInterface((*Rational)(nil), nil)
|
||||
cdc.RegisterConcrete(Rat{}, "rat", nil)
|
||||
return cdc
|
||||
@@ -55,7 +57,7 @@ var (
|
||||
)
|
||||
|
||||
// New - create a new Rat from integers
|
||||
func NewRational(Numerator int64, Denominator ...int64) Rat {
|
||||
func NewRat(Numerator int64, Denominator ...int64) Rat {
|
||||
switch len(Denominator) {
|
||||
case 0:
|
||||
return Rat{big.NewRat(Numerator, 1)}
|
||||
@@ -67,7 +69,7 @@ func NewRational(Numerator int64, Denominator ...int64) Rat {
|
||||
}
|
||||
|
||||
//NewFromDecimal - create a rational from decimal string or integer string
|
||||
func NewRationlFromDecimal(decimalStr string) (f Rat, err error) {
|
||||
func NewRatFromDecimal(decimalStr string) (f Rat, err error) {
|
||||
|
||||
// first extract any negative symbol
|
||||
neg := false
|
||||
@@ -183,7 +185,7 @@ type RatMarshal struct {
|
||||
|
||||
// MarshalJSON - custom implementation of JSON Marshal
|
||||
func (r Rat) MarshalJSON() ([]byte, error) {
|
||||
return cdc.MarshalJSON(RatMarshal{r.Num(), r.Denom()})
|
||||
return ratCdc.MarshalJSON(RatMarshal{r.Num(), r.Denom()})
|
||||
}
|
||||
|
||||
// UnmarshalJSON - custom implementation of JSON Unmarshal
|
||||
@@ -195,7 +197,7 @@ func (r *Rat) UnmarshalJSON(data []byte) (err error) {
|
||||
}()
|
||||
|
||||
ratMar := new(RatMarshal)
|
||||
if err := cdc.UnmarshalJSON(data, ratMar); err != nil {
|
||||
if err := ratCdc.UnmarshalJSON(data, ratMar); err != nil {
|
||||
return err
|
||||
}
|
||||
r.Rat = big.NewRat(ratMar.Numerator, ratMar.Denominator)
|
||||
|
||||
+124
-146
@@ -5,37 +5,33 @@ import (
|
||||
"math/big"
|
||||
"testing"
|
||||
|
||||
asrt "github.com/stretchr/testify/assert"
|
||||
rqr "github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
assert.Equal(New(1), New(1, 1))
|
||||
assert.Equal(New(100), New(100, 1))
|
||||
assert.Equal(New(-1), New(-1, 1))
|
||||
assert.Equal(New(-100), New(-100, 1))
|
||||
assert.Equal(New(0), New(0, 1))
|
||||
assert.Equal(t, NewRat(1), NewRat(1, 1))
|
||||
assert.Equal(t, NewRat(100), NewRat(100, 1))
|
||||
assert.Equal(t, NewRat(-1), NewRat(-1, 1))
|
||||
assert.Equal(t, NewRat(-100), NewRat(-100, 1))
|
||||
assert.Equal(t, NewRat(0), NewRat(0, 1))
|
||||
|
||||
// do not allow for more than 2 variables
|
||||
assert.Panics(func() { New(1, 1, 1) })
|
||||
assert.Panics(t, func() { NewRat(1, 1, 1) })
|
||||
}
|
||||
|
||||
func TestNewFromDecimal(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
tests := []struct {
|
||||
decimalStr string
|
||||
expErr bool
|
||||
exp Rat
|
||||
}{
|
||||
{"0", false, New(0)},
|
||||
{"1", false, New(1)},
|
||||
{"1.1", false, New(11, 10)},
|
||||
{"0.75", false, New(3, 4)},
|
||||
{"0.8", false, New(4, 5)},
|
||||
{"0.11111", false, New(11111, 100000)},
|
||||
{"0", false, NewRat(0)},
|
||||
{"1", false, NewRat(1)},
|
||||
{"1.1", false, NewRat(11, 10)},
|
||||
{"0.75", false, NewRat(3, 4)},
|
||||
{"0.8", false, NewRat(4, 5)},
|
||||
{"0.11111", false, NewRat(11111, 100000)},
|
||||
{".", true, Rat{}},
|
||||
{".0", true, Rat{}},
|
||||
{"1.", true, Rat{}},
|
||||
@@ -46,206 +42,192 @@ func TestNewFromDecimal(t *testing.T) {
|
||||
|
||||
for _, tc := range tests {
|
||||
|
||||
res, err := NewFromDecimal(tc.decimalStr)
|
||||
res, err := NewRatFromDecimal(tc.decimalStr)
|
||||
if tc.expErr {
|
||||
assert.NotNil(err, tc.decimalStr)
|
||||
assert.NotNil(t, err, tc.decimalStr)
|
||||
} else {
|
||||
assert.Nil(err)
|
||||
assert.True(res.Equal(tc.exp))
|
||||
assert.Nil(t, err)
|
||||
assert.True(t, res.Equal(tc.exp))
|
||||
}
|
||||
|
||||
// negative tc
|
||||
res, err = NewFromDecimal("-" + tc.decimalStr)
|
||||
res, err = NewRatFromDecimal("-" + tc.decimalStr)
|
||||
if tc.expErr {
|
||||
assert.NotNil(err, tc.decimalStr)
|
||||
assert.NotNil(t, err, tc.decimalStr)
|
||||
} else {
|
||||
assert.Nil(err)
|
||||
assert.True(res.Equal(tc.exp.Mul(New(-1))))
|
||||
assert.Nil(t, err)
|
||||
assert.True(t, res.Equal(tc.exp.Mul(NewRat(-1))))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestEqualities(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
tests := []struct {
|
||||
r1, r2 Rat
|
||||
gt, lt, eq bool
|
||||
}{
|
||||
{New(0), New(0), false, false, true},
|
||||
{New(0, 100), New(0, 10000), false, false, true},
|
||||
{New(100), New(100), false, false, true},
|
||||
{New(-100), New(-100), false, false, true},
|
||||
{New(-100, -1), New(100), false, false, true},
|
||||
{New(-1, 1), New(1, -1), false, false, true},
|
||||
{New(1, -1), New(-1, 1), false, false, true},
|
||||
{New(3, 7), New(3, 7), false, false, true},
|
||||
{NewRat(0), NewRat(0), false, false, true},
|
||||
{NewRat(0, 100), NewRat(0, 10000), false, false, true},
|
||||
{NewRat(100), NewRat(100), false, false, true},
|
||||
{NewRat(-100), NewRat(-100), false, false, true},
|
||||
{NewRat(-100, -1), NewRat(100), false, false, true},
|
||||
{NewRat(-1, 1), NewRat(1, -1), false, false, true},
|
||||
{NewRat(1, -1), NewRat(-1, 1), false, false, true},
|
||||
{NewRat(3, 7), NewRat(3, 7), false, false, true},
|
||||
|
||||
{New(0), New(3, 7), false, true, false},
|
||||
{New(0), New(100), false, true, false},
|
||||
{New(-1), New(3, 7), false, true, false},
|
||||
{New(-1), New(100), false, true, false},
|
||||
{New(1, 7), New(100), false, true, false},
|
||||
{New(1, 7), New(3, 7), false, true, false},
|
||||
{New(-3, 7), New(-1, 7), false, true, false},
|
||||
{NewRat(0), NewRat(3, 7), false, true, false},
|
||||
{NewRat(0), NewRat(100), false, true, false},
|
||||
{NewRat(-1), NewRat(3, 7), false, true, false},
|
||||
{NewRat(-1), NewRat(100), false, true, false},
|
||||
{NewRat(1, 7), NewRat(100), false, true, false},
|
||||
{NewRat(1, 7), NewRat(3, 7), false, true, false},
|
||||
{NewRat(-3, 7), NewRat(-1, 7), false, true, false},
|
||||
|
||||
{New(3, 7), New(0), true, false, false},
|
||||
{New(100), New(0), true, false, false},
|
||||
{New(3, 7), New(-1), true, false, false},
|
||||
{New(100), New(-1), true, false, false},
|
||||
{New(100), New(1, 7), true, false, false},
|
||||
{New(3, 7), New(1, 7), true, false, false},
|
||||
{New(-1, 7), New(-3, 7), true, false, false},
|
||||
{NewRat(3, 7), NewRat(0), true, false, false},
|
||||
{NewRat(100), NewRat(0), true, false, false},
|
||||
{NewRat(3, 7), NewRat(-1), true, false, false},
|
||||
{NewRat(100), NewRat(-1), true, false, false},
|
||||
{NewRat(100), NewRat(1, 7), true, false, false},
|
||||
{NewRat(3, 7), NewRat(1, 7), true, false, false},
|
||||
{NewRat(-1, 7), NewRat(-3, 7), true, false, false},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
assert.Equal(tc.gt, tc.r1.GT(tc.r2))
|
||||
assert.Equal(tc.lt, tc.r1.LT(tc.r2))
|
||||
assert.Equal(tc.eq, tc.r1.Equal(tc.r2))
|
||||
assert.Equal(t, tc.gt, tc.r1.GT(tc.r2))
|
||||
assert.Equal(t, tc.lt, tc.r1.LT(tc.r2))
|
||||
assert.Equal(t, tc.eq, tc.r1.Equal(tc.r2))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestArithmatic(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
tests := []struct {
|
||||
r1, r2 Rat
|
||||
resMul, resDiv, resAdd, resSub Rat
|
||||
}{
|
||||
// r1 r2 MUL DIV ADD SUB
|
||||
{New(0), New(0), New(0), New(0), New(0), New(0)},
|
||||
{New(1), New(0), New(0), New(0), New(1), New(1)},
|
||||
{New(0), New(1), New(0), New(0), New(1), New(-1)},
|
||||
{New(0), New(-1), New(0), New(0), New(-1), New(1)},
|
||||
{New(-1), New(0), New(0), New(0), New(-1), New(-1)},
|
||||
// r1 r2 MUL DIV ADD SUB
|
||||
{NewRat(0), NewRat(0), NewRat(0), NewRat(0), NewRat(0), NewRat(0)},
|
||||
{NewRat(1), NewRat(0), NewRat(0), NewRat(0), NewRat(1), NewRat(1)},
|
||||
{NewRat(0), NewRat(1), NewRat(0), NewRat(0), NewRat(1), NewRat(-1)},
|
||||
{NewRat(0), NewRat(-1), NewRat(0), NewRat(0), NewRat(-1), NewRat(1)},
|
||||
{NewRat(-1), NewRat(0), NewRat(0), NewRat(0), NewRat(-1), NewRat(-1)},
|
||||
|
||||
{New(1), New(1), New(1), New(1), New(2), New(0)},
|
||||
{New(-1), New(-1), New(1), New(1), New(-2), New(0)},
|
||||
{New(1), New(-1), New(-1), New(-1), New(0), New(2)},
|
||||
{New(-1), New(1), New(-1), New(-1), New(0), New(-2)},
|
||||
{NewRat(1), NewRat(1), NewRat(1), NewRat(1), NewRat(2), NewRat(0)},
|
||||
{NewRat(-1), NewRat(-1), NewRat(1), NewRat(1), NewRat(-2), NewRat(0)},
|
||||
{NewRat(1), NewRat(-1), NewRat(-1), NewRat(-1), NewRat(0), NewRat(2)},
|
||||
{NewRat(-1), NewRat(1), NewRat(-1), NewRat(-1), NewRat(0), NewRat(-2)},
|
||||
|
||||
{New(3), New(7), New(21), New(3, 7), New(10), New(-4)},
|
||||
{New(2), New(4), New(8), New(1, 2), New(6), New(-2)},
|
||||
{New(100), New(100), New(10000), New(1), New(200), New(0)},
|
||||
{NewRat(3), NewRat(7), NewRat(21), NewRat(3, 7), NewRat(10), NewRat(-4)},
|
||||
{NewRat(2), NewRat(4), NewRat(8), NewRat(1, 2), NewRat(6), NewRat(-2)},
|
||||
{NewRat(100), NewRat(100), NewRat(10000), NewRat(1), NewRat(200), NewRat(0)},
|
||||
|
||||
{New(3, 2), New(3, 2), New(9, 4), New(1), New(3), New(0)},
|
||||
{New(3, 7), New(7, 3), New(1), New(9, 49), New(58, 21), New(-40, 21)},
|
||||
{New(1, 21), New(11, 5), New(11, 105), New(5, 231), New(236, 105), New(-226, 105)},
|
||||
{New(-21), New(3, 7), New(-9), New(-49), New(-144, 7), New(-150, 7)},
|
||||
{New(100), New(1, 7), New(100, 7), New(700), New(701, 7), New(699, 7)},
|
||||
{NewRat(3, 2), NewRat(3, 2), NewRat(9, 4), NewRat(1), NewRat(3), NewRat(0)},
|
||||
{NewRat(3, 7), NewRat(7, 3), NewRat(1), NewRat(9, 49), NewRat(58, 21), NewRat(-40, 21)},
|
||||
{NewRat(1, 21), NewRat(11, 5), NewRat(11, 105), NewRat(5, 231), NewRat(236, 105), NewRat(-226, 105)},
|
||||
{NewRat(-21), NewRat(3, 7), NewRat(-9), NewRat(-49), NewRat(-144, 7), NewRat(-150, 7)},
|
||||
{NewRat(100), NewRat(1, 7), NewRat(100, 7), NewRat(700), NewRat(701, 7), NewRat(699, 7)},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
assert.True(tc.resMul.Equal(tc.r1.Mul(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(tc.resAdd.Equal(tc.r1.Add(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(tc.resSub.Equal(tc.r1.Sub(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(t, tc.resMul.Equal(tc.r1.Mul(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(t, tc.resAdd.Equal(tc.r1.Add(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(t, tc.resSub.Equal(tc.r1.Sub(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
|
||||
if tc.r2.Num() == 0 { // panic for divide by zero
|
||||
assert.Panics(func() { tc.r1.Quo(tc.r2) })
|
||||
assert.Panics(t, func() { tc.r1.Quo(tc.r2) })
|
||||
} else {
|
||||
assert.True(tc.resDiv.Equal(tc.r1.Quo(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
assert.True(t, tc.resDiv.Equal(tc.r1.Quo(tc.r2)), "r1 %v, r2 %v", tc.r1.GetRat(), tc.r2.GetRat())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestEvaluate(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
tests := []struct {
|
||||
r1 Rat
|
||||
res int64
|
||||
}{
|
||||
{New(0), 0},
|
||||
{New(1), 1},
|
||||
{New(1, 4), 0},
|
||||
{New(1, 2), 0},
|
||||
{New(3, 4), 1},
|
||||
{New(5, 6), 1},
|
||||
{New(3, 2), 2},
|
||||
{New(5, 2), 2},
|
||||
{New(6, 11), 1}, // 0.545-> 1 even though 5 is first decimal and 1 not even
|
||||
{New(17, 11), 2}, // 1.545
|
||||
{New(5, 11), 0},
|
||||
{New(16, 11), 1},
|
||||
{New(113, 12), 9},
|
||||
{NewRat(0), 0},
|
||||
{NewRat(1), 1},
|
||||
{NewRat(1, 4), 0},
|
||||
{NewRat(1, 2), 0},
|
||||
{NewRat(3, 4), 1},
|
||||
{NewRat(5, 6), 1},
|
||||
{NewRat(3, 2), 2},
|
||||
{NewRat(5, 2), 2},
|
||||
{NewRat(6, 11), 1}, // 0.545-> 1 even though 5 is first decimal and 1 not even
|
||||
{NewRat(17, 11), 2}, // 1.545
|
||||
{NewRat(5, 11), 0},
|
||||
{NewRat(16, 11), 1},
|
||||
{NewRat(113, 12), 9},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
assert.Equal(tc.res, tc.r1.Evaluate(), "%v", tc.r1)
|
||||
assert.Equal(tc.res*-1, tc.r1.Mul(New(-1)).Evaluate(), "%v", tc.r1.Mul(New(-1)))
|
||||
assert.Equal(t, tc.res, tc.r1.Evaluate(), "%v", tc.r1)
|
||||
assert.Equal(t, tc.res*-1, tc.r1.Mul(NewRat(-1)).Evaluate(), "%v", tc.r1.Mul(NewRat(-1)))
|
||||
}
|
||||
}
|
||||
|
||||
func TestRound(t *testing.T) {
|
||||
assert, require := asrt.New(t), rqr.New(t)
|
||||
|
||||
many3 := "333333333333333333333333333333333333333333333"
|
||||
many7 := "777777777777777777777777777777777777777777777"
|
||||
big3, worked := new(big.Int).SetString(many3, 10)
|
||||
require.True(worked)
|
||||
require.True(t, worked)
|
||||
big7, worked := new(big.Int).SetString(many7, 10)
|
||||
require.True(worked)
|
||||
require.True(t, worked)
|
||||
|
||||
tests := []struct {
|
||||
r1, res Rat
|
||||
precFactor int64
|
||||
}{
|
||||
{New(333, 777), New(429, 1000), 1000},
|
||||
{Rat{new(big.Rat).SetFrac(big3, big7)}, New(429, 1000), 1000},
|
||||
{Rat{new(big.Rat).SetFrac(big3, big7)}, New(4285714286, 10000000000), 10000000000},
|
||||
{New(1, 2), New(1, 2), 1000},
|
||||
{NewRat(333, 777), NewRat(429, 1000), 1000},
|
||||
{Rat{new(big.Rat).SetFrac(big3, big7)}, NewRat(429, 1000), 1000},
|
||||
{Rat{new(big.Rat).SetFrac(big3, big7)}, NewRat(4285714286, 10000000000), 10000000000},
|
||||
{NewRat(1, 2), NewRat(1, 2), 1000},
|
||||
}
|
||||
|
||||
for _, tc := range tests {
|
||||
assert.Equal(tc.res, tc.r1.Round(tc.precFactor), "%v", tc.r1)
|
||||
negR1, negRes := tc.r1.Mul(New(-1)), tc.res.Mul(New(-1))
|
||||
assert.Equal(negRes, negR1.Round(tc.precFactor), "%v", negR1)
|
||||
assert.Equal(t, tc.res, tc.r1.Round(tc.precFactor), "%v", tc.r1)
|
||||
negR1, negRes := tc.r1.Mul(NewRat(-1)), tc.res.Mul(NewRat(-1))
|
||||
assert.Equal(t, negRes, negR1.Round(tc.precFactor), "%v", negR1)
|
||||
}
|
||||
}
|
||||
|
||||
func TestZeroSerializationJSON(t *testing.T) {
|
||||
assert := asrt.New(t)
|
||||
|
||||
var r Rat
|
||||
err := json.Unmarshal([]byte("{\"numerator\":0,\"denominator\":1}"), &r)
|
||||
assert.Nil(err)
|
||||
assert.Nil(t, err)
|
||||
err = json.Unmarshal([]byte("{\"numerator\":0,\"denominator\":0}"), &r)
|
||||
assert.NotNil(err)
|
||||
assert.NotNil(t, err)
|
||||
err = json.Unmarshal([]byte("{\"numerator\":1,\"denominator\":0}"), &r)
|
||||
assert.NotNil(err)
|
||||
assert.NotNil(t, err)
|
||||
err = json.Unmarshal([]byte("{}"), &r)
|
||||
assert.NotNil(err)
|
||||
assert.NotNil(t, err)
|
||||
}
|
||||
|
||||
func TestSerializationJSON(t *testing.T) {
|
||||
assert, require := asrt.New(t), rqr.New(t)
|
||||
|
||||
r := New(1, 3)
|
||||
r := NewRat(1, 3)
|
||||
|
||||
rMarshal, err := json.Marshal(r)
|
||||
require.Nil(err)
|
||||
require.Nil(t, err)
|
||||
|
||||
var rUnmarshal Rat
|
||||
err = json.Unmarshal(rMarshal, &rUnmarshal)
|
||||
require.Nil(err)
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.True(r.Equal(rUnmarshal), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
assert.True(t, r.Equal(rUnmarshal), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
}
|
||||
|
||||
func TestSerializationGoWire(t *testing.T) {
|
||||
assert, require := asrt.New(t), rqr.New(t)
|
||||
r := NewRat(1, 3)
|
||||
|
||||
r := New(1, 3)
|
||||
|
||||
rMarshal, err := cdc.MarshalJSON(r)
|
||||
require.Nil(err)
|
||||
rMarshal, err := ratCdc.MarshalJSON(r)
|
||||
require.Nil(t, err)
|
||||
|
||||
var rUnmarshal Rat
|
||||
err = cdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(err)
|
||||
err = ratCdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.True(r.Equal(rUnmarshal), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
assert.True(t, r.Equal(rUnmarshal), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
}
|
||||
|
||||
type testEmbedStruct struct {
|
||||
@@ -255,20 +237,18 @@ type testEmbedStruct struct {
|
||||
}
|
||||
|
||||
func TestEmbeddedStructSerializationGoWire(t *testing.T) {
|
||||
assert, require := asrt.New(t), rqr.New(t)
|
||||
r := testEmbedStruct{"foo", 10, NewRat(1, 3)}
|
||||
|
||||
r := testEmbedStruct{"foo", 10, New(1, 3)}
|
||||
|
||||
rMarshal, err := cdc.MarshalJSON(r)
|
||||
require.Nil(err)
|
||||
rMarshal, err := ratCdc.MarshalJSON(r)
|
||||
require.Nil(t, err)
|
||||
|
||||
var rUnmarshal testEmbedStruct
|
||||
err = cdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(err)
|
||||
err = ratCdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.Equal(r.Field1, rUnmarshal.Field1)
|
||||
assert.Equal(r.Field2, rUnmarshal.Field2)
|
||||
assert.True(r.Field3.Equal(rUnmarshal.Field3), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
assert.Equal(t, r.Field1, rUnmarshal.Field1)
|
||||
assert.Equal(t, r.Field2, rUnmarshal.Field2)
|
||||
assert.True(t, r.Field3.Equal(rUnmarshal.Field3), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
|
||||
}
|
||||
|
||||
@@ -279,18 +259,16 @@ type testEmbedInterface struct {
|
||||
}
|
||||
|
||||
func TestEmbeddedInterfaceSerializationGoWire(t *testing.T) {
|
||||
assert, require := asrt.New(t), rqr.New(t)
|
||||
r := testEmbedInterface{"foo", 10, NewRat(1, 3)}
|
||||
|
||||
r := testEmbedInterface{"foo", 10, New(1, 3)}
|
||||
|
||||
rMarshal, err := cdc.MarshalJSON(r)
|
||||
require.Nil(err)
|
||||
rMarshal, err := ratCdc.MarshalJSON(r)
|
||||
require.Nil(t, err)
|
||||
|
||||
var rUnmarshal testEmbedInterface
|
||||
err = cdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(err)
|
||||
err = ratCdc.UnmarshalJSON(rMarshal, &rUnmarshal)
|
||||
require.Nil(t, err)
|
||||
|
||||
assert.Equal(r.Field1, rUnmarshal.Field1)
|
||||
assert.Equal(r.Field2, rUnmarshal.Field2)
|
||||
assert.True(r.Field3.Equal(rUnmarshal.Field3), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
assert.Equal(t, r.Field1, rUnmarshal.Field1)
|
||||
assert.Equal(t, r.Field2, rUnmarshal.Field2)
|
||||
assert.True(t, r.Field3.Equal(rUnmarshal.Field3), "original: %v, unmarshalled: %v", r, rUnmarshal)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user