From 809f0e55350ee6f35b56540b4f64dcd7c5555c14 Mon Sep 17 00:00:00 2001 From: ValarDragon Date: Mon, 25 Jun 2018 18:25:26 -0700 Subject: [PATCH] Cherry-pick types/rat: Fix overflowing in printing This now uses the underlying golang big.rat's string function, instead of casting to num and den which are int64s. Closes #1258 --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ types/rational.go | 2 +- types/rational_test.go | 13 ++++++++++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4428f7a4c8a7..0024dcc3d437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,39 @@ # Changelog +## 0.20.0 + +*TBD* + +BREAKING CHANGES +* Change default ports from 466xx to 266xx +* AltBytes renamed to Memo, now a string, max 100 characters, costs a bit of gas +* Transactions now take a list of Messages +* Signers of a transaction now only sign over their account and sequence number +* Removed MsgChangePubKey from auth +* Removed setPubKey from account mapper + +FEATURES +* [gaiacli] You can now attach a simple text-only memo to any transaction, with the `--memo` flag +* [lcd] Queried TXs now include the tx hash to identify each tx +* [mockapp] CompleteSetup() no longer takes a testing parameter +* [governance] Implemented MVP + * Supported proposal types: just binary (pass/fail) TextProposals for now + * Proposals need deposits to be votable; deposits are burned if proposal fails + * Delegators delegate votes to validator by default but can override (for their stake) +* [tools] make get_tools installs tendermint's linter, and gometalinter +* [tools] Switch gometalinter to the stable version +* [tools] Add checking for misspellings and for incorrectly formatted files in circle CI +* [server] Default config now creates a profiler at port 6060, and increase p2p send/recv rates + +FIXES +* \#1259 - fix bug where certain tests that could have a nil pointer in defer +* \#1052 - Make all now works +* Retry on HTTP request failure in CLI tests, add option to retry tests in Makefile +* Fixed bug where chain ID wasn't passed properly in x/bank REST handler +* Fixed bug where `democli account` didn't decode the account data correctly +* \#1343 - fixed unnecessary parallelism in CI +* \#1258 - printing big.rat's can no longer overflow int64 + ## 0.19.0 *June 13, 2018* diff --git a/types/rational.go b/types/rational.go index 0709a350f492..c800c0487af2 100644 --- a/types/rational.go +++ b/types/rational.go @@ -91,7 +91,7 @@ func (r Rat) Mul(r2 Rat) Rat { return Rat{*new(big.Rat).Mul(&(r.Rat), &(r2.Ra func (r Rat) Quo(r2 Rat) Rat { return Rat{*new(big.Rat).Quo(&(r.Rat), &(r2.Rat))} } // Quo - quotient func (r Rat) Add(r2 Rat) Rat { return Rat{*new(big.Rat).Add(&(r.Rat), &(r2.Rat))} } // Add - addition func (r Rat) Sub(r2 Rat) Rat { return Rat{*new(big.Rat).Sub(&(r.Rat), &(r2.Rat))} } // Sub - subtraction -func (r Rat) String() string { return fmt.Sprintf("%v/%v", r.Num(), r.Denom()) } +func (r Rat) String() string { return r.Rat.String() } var ( zero = big.NewInt(0) diff --git a/types/rational_test.go b/types/rational_test.go index 30abb1a518bd..2483704ed5e1 100644 --- a/types/rational_test.go +++ b/types/rational_test.go @@ -100,7 +100,7 @@ func TestEqualities(t *testing.T) { } -func TestArithmatic(t *testing.T) { +func TestArithmetic(t *testing.T) { tests := []struct { r1, r2 Rat resMul, resDiv, resAdd, resSub Rat @@ -297,3 +297,14 @@ func TestRatsEqual(t *testing.T) { } } + +func TestStringOverflow(t *testing.T) { + // two random 64 bit primes + rat1 := NewRat(5164315003622678713, 4389711697696177267) + rat2 := NewRat(-3179849666053572961, 8459429845579852627) + rat3 := rat1.Add(rat2) + assert.Equal(t, + "29728537197630860939575850336935951464/37134458148982045574552091851127630409", + rat3.String(), + ) +}