Commit 18563f8a authored by Robert Griesemer's avatar Robert Griesemer

math/big: clean up *Int encoding tests

- more uniform naming
- test sign more deliberately
- remove superfluous test (JSON encoder always uses the JSON marshaler if present)

Change-Id: I37b1e367c01fc8bae1e06adbdb72dd366c08d5ce
Reviewed-on: https://go-review.googlesource.com/15110Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
parent 38c5fd5c
...@@ -59,6 +59,10 @@ func (z *Int) UnmarshalText(text []byte) error { ...@@ -59,6 +59,10 @@ func (z *Int) UnmarshalText(text []byte) error {
return nil return nil
} }
// The JSON marshallers are only here for API backward compatibility
// (programs that explicitly look for these two methods). JSON works
// fine with the TextMarshaler only.
// MarshalJSON implements the json.Marshaler interface. // MarshalJSON implements the json.Marshaler interface.
func (x *Int) MarshalJSON() ([]byte, error) { func (x *Int) MarshalJSON() ([]byte, error) {
return x.MarshalText() return x.MarshalText()
......
...@@ -13,16 +13,11 @@ import ( ...@@ -13,16 +13,11 @@ import (
) )
var encodingTests = []string{ var encodingTests = []string{
"-539345864568634858364538753846587364875430589374589",
"-678645873",
"-100",
"-2",
"-1",
"0", "0",
"1", "1",
"2", "2",
"10", "10",
"42", "1000",
"1234567890", "1234567890",
"298472983472983471903246121093472394872319615612417471234712061", "298472983472983471903246121093472394872319615612417471234712061",
} }
...@@ -32,9 +27,11 @@ func TestIntGobEncoding(t *testing.T) { ...@@ -32,9 +27,11 @@ func TestIntGobEncoding(t *testing.T) {
enc := gob.NewEncoder(&medium) enc := gob.NewEncoder(&medium)
dec := gob.NewDecoder(&medium) dec := gob.NewDecoder(&medium)
for _, test := range encodingTests { for _, test := range encodingTests {
for _, sign := range []string{"", "+", "-"} {
x := sign + test
medium.Reset() // empty buffer for each test case (in case of failures) medium.Reset() // empty buffer for each test case (in case of failures)
var tx Int var tx Int
tx.SetString(test, 10) tx.SetString(x, 10)
if err := enc.Encode(&tx); err != nil { if err := enc.Encode(&tx); err != nil {
t.Errorf("encoding of %s failed: %s", &tx, err) t.Errorf("encoding of %s failed: %s", &tx, err)
continue continue
...@@ -48,6 +45,7 @@ func TestIntGobEncoding(t *testing.T) { ...@@ -48,6 +45,7 @@ func TestIntGobEncoding(t *testing.T) {
t.Errorf("transmission of %s failed: got %s want %s", &tx, &rx, &tx) t.Errorf("transmission of %s failed: got %s want %s", &tx, &rx, &tx)
} }
} }
}
} }
// Sending a nil Int pointer (inside a slice) on a round trip through gob should yield a zero. // Sending a nil Int pointer (inside a slice) on a round trip through gob should yield a zero.
...@@ -78,8 +76,10 @@ func TestGobEncodingNilIntInSlice(t *testing.T) { ...@@ -78,8 +76,10 @@ func TestGobEncodingNilIntInSlice(t *testing.T) {
func TestIntJSONEncoding(t *testing.T) { func TestIntJSONEncoding(t *testing.T) {
for _, test := range encodingTests { for _, test := range encodingTests {
for _, sign := range []string{"", "+", "-"} {
x := sign + test
var tx Int var tx Int
tx.SetString(test, 10) tx.SetString(x, 10)
b, err := json.Marshal(&tx) b, err := json.Marshal(&tx)
if err != nil { if err != nil {
t.Errorf("marshaling of %s failed: %s", &tx, err) t.Errorf("marshaling of %s failed: %s", &tx, err)
...@@ -94,44 +94,15 @@ func TestIntJSONEncoding(t *testing.T) { ...@@ -94,44 +94,15 @@ func TestIntJSONEncoding(t *testing.T) {
t.Errorf("JSON encoding of %s failed: got %s want %s", &tx, &rx, &tx) t.Errorf("JSON encoding of %s failed: got %s want %s", &tx, &rx, &tx)
} }
} }
}
var intVals = []string{
"-141592653589793238462643383279502884197169399375105820974944592307816406286",
"-1415926535897932384626433832795028841971",
"-141592653589793",
"-1",
"0",
"1",
"141592653589793",
"1415926535897932384626433832795028841971",
"141592653589793238462643383279502884197169399375105820974944592307816406286",
}
func TestIntJSONEncodingTextMarshaller(t *testing.T) {
for _, num := range intVals {
var tx Int
tx.SetString(num, 0)
b, err := json.Marshal(&tx)
if err != nil {
t.Errorf("marshaling of %s failed: %s", &tx, err)
continue
}
var rx Int
if err := json.Unmarshal(b, &rx); err != nil {
t.Errorf("unmarshaling of %s failed: %s", &tx, err)
continue
}
if rx.Cmp(&tx) != 0 {
t.Errorf("JSON encoding of %s failed: got %s want %s", &tx, &rx, &tx)
}
} }
} }
func TestIntXMLEncodingTextMarshaller(t *testing.T) { func TestIntXMLEncoding(t *testing.T) {
for _, num := range intVals { for _, test := range encodingTests {
for _, sign := range []string{"", "+", "-"} {
x := sign + test
var tx Int var tx Int
tx.SetString(num, 0) tx.SetString(x, 0)
b, err := xml.Marshal(&tx) b, err := xml.Marshal(&tx)
if err != nil { if err != nil {
t.Errorf("marshaling of %s failed: %s", &tx, err) t.Errorf("marshaling of %s failed: %s", &tx, err)
...@@ -146,4 +117,5 @@ func TestIntXMLEncodingTextMarshaller(t *testing.T) { ...@@ -146,4 +117,5 @@ func TestIntXMLEncodingTextMarshaller(t *testing.T) {
t.Errorf("XML encoding of %s failed: got %s want %s", &tx, &rx, &tx) t.Errorf("XML encoding of %s failed: got %s want %s", &tx, &rx, &tx)
} }
} }
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment