Move CurrencyToString to size
This commit is contained in:
parent
08b21acff1
commit
82a41a198e
@ -76,63 +76,6 @@ func WindonizePath(path string) string {
|
|||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
// The different number of units
|
|
||||||
var (
|
|
||||||
Douglas = BigPow(10, 42)
|
|
||||||
Einstein = BigPow(10, 21)
|
|
||||||
Ether = BigPow(10, 18)
|
|
||||||
Finney = BigPow(10, 15)
|
|
||||||
Szabo = BigPow(10, 12)
|
|
||||||
Shannon = BigPow(10, 9)
|
|
||||||
Babbage = BigPow(10, 6)
|
|
||||||
Ada = BigPow(10, 3)
|
|
||||||
Wei = big.NewInt(1)
|
|
||||||
)
|
|
||||||
|
|
||||||
//
|
|
||||||
// Currency to string
|
|
||||||
// Returns a string representing a human readable format
|
|
||||||
func CurrencyToString(num *big.Int) string {
|
|
||||||
var (
|
|
||||||
fin *big.Int = num
|
|
||||||
denom string = "Wei"
|
|
||||||
)
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case num.Cmp(Douglas) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Douglas)
|
|
||||||
denom = "Douglas"
|
|
||||||
case num.Cmp(Einstein) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Einstein)
|
|
||||||
denom = "Einstein"
|
|
||||||
case num.Cmp(Ether) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Ether)
|
|
||||||
denom = "Ether"
|
|
||||||
case num.Cmp(Finney) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Finney)
|
|
||||||
denom = "Finney"
|
|
||||||
case num.Cmp(Szabo) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Szabo)
|
|
||||||
denom = "Szabo"
|
|
||||||
case num.Cmp(Shannon) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Shannon)
|
|
||||||
denom = "Shannon"
|
|
||||||
case num.Cmp(Babbage) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Babbage)
|
|
||||||
denom = "Babbage"
|
|
||||||
case num.Cmp(Ada) >= 0:
|
|
||||||
fin = new(big.Int).Div(num, Ada)
|
|
||||||
denom = "Ada"
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO add comment clarifying expected behavior
|
|
||||||
if len(fin.String()) > 5 {
|
|
||||||
return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Sprintf("%v %s", fin, denom)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Common big integers often used
|
// Common big integers often used
|
||||||
var (
|
var (
|
||||||
Big1 = big.NewInt(1)
|
Big1 = big.NewInt(1)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math/big"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
checker "gopkg.in/check.v1"
|
checker "gopkg.in/check.v1"
|
||||||
@ -34,35 +33,3 @@ func (s *CommonSuite) TestWindonziePath(c *checker.C) {
|
|||||||
c.Assert(ressep, checker.Not(checker.Equals), "/")
|
c.Assert(ressep, checker.Not(checker.Equals), "/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *CommonSuite) TestCommon(c *checker.C) {
|
|
||||||
douglas := CurrencyToString(BigPow(10, 43))
|
|
||||||
einstein := CurrencyToString(BigPow(10, 22))
|
|
||||||
ether := CurrencyToString(BigPow(10, 19))
|
|
||||||
finney := CurrencyToString(BigPow(10, 16))
|
|
||||||
szabo := CurrencyToString(BigPow(10, 13))
|
|
||||||
shannon := CurrencyToString(BigPow(10, 10))
|
|
||||||
babbage := CurrencyToString(BigPow(10, 7))
|
|
||||||
ada := CurrencyToString(BigPow(10, 4))
|
|
||||||
wei := CurrencyToString(big.NewInt(10))
|
|
||||||
|
|
||||||
c.Assert(douglas, checker.Equals, "10 Douglas")
|
|
||||||
c.Assert(einstein, checker.Equals, "10 Einstein")
|
|
||||||
c.Assert(ether, checker.Equals, "10 Ether")
|
|
||||||
c.Assert(finney, checker.Equals, "10 Finney")
|
|
||||||
c.Assert(szabo, checker.Equals, "10 Szabo")
|
|
||||||
c.Assert(shannon, checker.Equals, "10 Shannon")
|
|
||||||
c.Assert(babbage, checker.Equals, "10 Babbage")
|
|
||||||
c.Assert(ada, checker.Equals, "10 Ada")
|
|
||||||
c.Assert(wei, checker.Equals, "10 Wei")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *CommonSuite) TestLarge(c *checker.C) {
|
|
||||||
douglaslarge := CurrencyToString(BigPow(100000000, 43))
|
|
||||||
adalarge := CurrencyToString(BigPow(100000000, 4))
|
|
||||||
weilarge := CurrencyToString(big.NewInt(100000000))
|
|
||||||
|
|
||||||
c.Assert(douglaslarge, checker.Equals, "10000E298 Douglas")
|
|
||||||
c.Assert(adalarge, checker.Equals, "10000E7 Einstein")
|
|
||||||
c.Assert(weilarge, checker.Equals, "100 Babbage")
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/big"
|
||||||
|
)
|
||||||
|
|
||||||
type StorageSize float64
|
type StorageSize float64
|
||||||
|
|
||||||
@ -13,3 +16,60 @@ func (self StorageSize) String() string {
|
|||||||
return fmt.Sprintf("%.2f B", self)
|
return fmt.Sprintf("%.2f B", self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The different number of units
|
||||||
|
var (
|
||||||
|
Douglas = BigPow(10, 42)
|
||||||
|
Einstein = BigPow(10, 21)
|
||||||
|
Ether = BigPow(10, 18)
|
||||||
|
Finney = BigPow(10, 15)
|
||||||
|
Szabo = BigPow(10, 12)
|
||||||
|
Shannon = BigPow(10, 9)
|
||||||
|
Babbage = BigPow(10, 6)
|
||||||
|
Ada = BigPow(10, 3)
|
||||||
|
Wei = big.NewInt(1)
|
||||||
|
)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Currency to string
|
||||||
|
// Returns a string representing a human readable format
|
||||||
|
func CurrencyToString(num *big.Int) string {
|
||||||
|
var (
|
||||||
|
fin *big.Int = num
|
||||||
|
denom string = "Wei"
|
||||||
|
)
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case num.Cmp(Douglas) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Douglas)
|
||||||
|
denom = "Douglas"
|
||||||
|
case num.Cmp(Einstein) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Einstein)
|
||||||
|
denom = "Einstein"
|
||||||
|
case num.Cmp(Ether) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Ether)
|
||||||
|
denom = "Ether"
|
||||||
|
case num.Cmp(Finney) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Finney)
|
||||||
|
denom = "Finney"
|
||||||
|
case num.Cmp(Szabo) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Szabo)
|
||||||
|
denom = "Szabo"
|
||||||
|
case num.Cmp(Shannon) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Shannon)
|
||||||
|
denom = "Shannon"
|
||||||
|
case num.Cmp(Babbage) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Babbage)
|
||||||
|
denom = "Babbage"
|
||||||
|
case num.Cmp(Ada) >= 0:
|
||||||
|
fin = new(big.Int).Div(num, Ada)
|
||||||
|
denom = "Ada"
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO add comment clarifying expected behavior
|
||||||
|
if len(fin.String()) > 5 {
|
||||||
|
return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("%v %s", fin, denom)
|
||||||
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/big"
|
||||||
|
|
||||||
checker "gopkg.in/check.v1"
|
checker "gopkg.in/check.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,3 +23,35 @@ func (s *SizeSuite) TestStorageSizeString(c *checker.C) {
|
|||||||
c.Assert(StorageSize(data2).String(), checker.Equals, exp2)
|
c.Assert(StorageSize(data2).String(), checker.Equals, exp2)
|
||||||
c.Assert(StorageSize(data3).String(), checker.Equals, exp3)
|
c.Assert(StorageSize(data3).String(), checker.Equals, exp3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *CommonSuite) TestCommon(c *checker.C) {
|
||||||
|
douglas := CurrencyToString(BigPow(10, 43))
|
||||||
|
einstein := CurrencyToString(BigPow(10, 22))
|
||||||
|
ether := CurrencyToString(BigPow(10, 19))
|
||||||
|
finney := CurrencyToString(BigPow(10, 16))
|
||||||
|
szabo := CurrencyToString(BigPow(10, 13))
|
||||||
|
shannon := CurrencyToString(BigPow(10, 10))
|
||||||
|
babbage := CurrencyToString(BigPow(10, 7))
|
||||||
|
ada := CurrencyToString(BigPow(10, 4))
|
||||||
|
wei := CurrencyToString(big.NewInt(10))
|
||||||
|
|
||||||
|
c.Assert(douglas, checker.Equals, "10 Douglas")
|
||||||
|
c.Assert(einstein, checker.Equals, "10 Einstein")
|
||||||
|
c.Assert(ether, checker.Equals, "10 Ether")
|
||||||
|
c.Assert(finney, checker.Equals, "10 Finney")
|
||||||
|
c.Assert(szabo, checker.Equals, "10 Szabo")
|
||||||
|
c.Assert(shannon, checker.Equals, "10 Shannon")
|
||||||
|
c.Assert(babbage, checker.Equals, "10 Babbage")
|
||||||
|
c.Assert(ada, checker.Equals, "10 Ada")
|
||||||
|
c.Assert(wei, checker.Equals, "10 Wei")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *CommonSuite) TestLarge(c *checker.C) {
|
||||||
|
douglaslarge := CurrencyToString(BigPow(100000000, 43))
|
||||||
|
adalarge := CurrencyToString(BigPow(100000000, 4))
|
||||||
|
weilarge := CurrencyToString(big.NewInt(100000000))
|
||||||
|
|
||||||
|
c.Assert(douglaslarge, checker.Equals, "10000E298 Douglas")
|
||||||
|
c.Assert(adalarge, checker.Equals, "10000E7 Einstein")
|
||||||
|
c.Assert(weilarge, checker.Equals, "100 Babbage")
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user