Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- cockroachdb "github.com/cockroachdb/apd"
- ericlagergren "github.com/ericlagergren/decimal"
- "github.com/rin01/decnum"
- shopspring "github.com/shopspring/decimal"
- "strconv"
- "testing"
- )
- func BenchmarkFloat(b *testing.B) {
- price := 10000.0
- var unit float64 = 1.3492720137776864
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- priceMulUnit := price * unit
- expectedPrice := priceMulUnit / unit
- // always false
- //if (expectedPrice != price) {
- // b.Error("Not equal")
- //}
- priceDivUnit := price / unit
- expectedPrice = priceDivUnit * unit
- // always false
- //if (expectedPrice != price) {
- // b.Error("Not equal")
- //}
- strconv.FormatFloat(expectedPrice*unit, 'f', -1, 64)
- }
- }
- func BenchmarkEricLagergren(b *testing.B) {
- price := &ericlagergren.Big{}
- price, _ = price.SetString("10000.000000000000000")
- unit := &ericlagergren.Big{}
- unit,_ = unit.SetString("1.34927201377768640000")
- //zero := ericlagergren.New(0, 0)
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- //price.Cmp(zero)
- //price.Cmp(price)
- var priceQuoUnit *ericlagergren.Big = &ericlagergren.Big{}
- priceQuoUnit.Quo(price, unit)
- var expectedPrice *ericlagergren.Big = &ericlagergren.Big{}
- var priceMulUnit ericlagergren.Big
- priceMulUnit.Mul(price, unit)
- expectedPrice.Quo(&priceMulUnit, unit)
- fmt.Println(expectedPrice)
- fmt.Println(price)
- if (expectedPrice.Cmp(price) != 0) {
- b.Error("Not equal")
- }
- expectedPrice.Mul(priceQuoUnit, unit)
- fmt.Println(expectedPrice)
- fmt.Println(price)
- if (expectedPrice.Cmp(price) != 0) {
- b.Error("Not equal")
- }
- expectedPrice.String()
- }
- }
- func BenchmarkShopSpring(b *testing.B) {
- price, _ := shopspring.NewFromString("10000.0")
- unit, _ := shopspring.NewFromString("1.3492720137776864")
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- //price.IsZero()
- //price.Cmp(price)
- priceDivUnit := price.Div(unit)
- expectedPrice := priceDivUnit.Mul(unit)
- if (!expectedPrice.Equal(price)) {
- b.Error("Not equal")
- }
- priceMulUnit := price.Mul(unit)
- expectedPrice = priceMulUnit.Div(unit)
- expectedPrice.String()
- if (!expectedPrice.Equal(price)) {
- b.Error("Not equal")
- }
- }
- }
- func BenchmarkCockroachdb(b *testing.B) {
- // *** INC precision to pass the test! ****
- prec := uint32(9)
- c := cockroachdb.BaseContext.WithPrecision(prec)
- price, _, _ := cockroachdb.NewFromString("10000.0")
- unit, _, _ := cockroachdb.NewFromString("1.3492720137776864")
- b.ResetTimer()
- var priceMulUnit cockroachdb.Decimal
- var priceQuoUnit cockroachdb.Decimal
- var expectedPrice cockroachdb.Decimal
- var result cockroachdb.Decimal
- for i := 0; i < b.N; i++ {
- //price.IsZero()
- //c.Cmp(price,price, price)
- c.Quo(&priceQuoUnit, price, unit)
- c.Mul(&expectedPrice, &priceQuoUnit, unit)
- c.Cmp(&result, price, &expectedPrice)
- if (!result.IsZero()) {
- b.Error("Not equal")
- }
- c.Mul(&priceMulUnit, price, unit)
- c.Quo(&expectedPrice, &priceMulUnit, unit)
- c.Cmp(&result, price, &expectedPrice)
- if (!result.IsZero()) {
- b.Error("Not equal")
- }
- price.String()
- }
- }
- func BenchmarkDecnum(b *testing.B) {
- price, _ := decnum.FromString("10000.0")
- unit, _ := decnum.FromString("1.3492720137776864")
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- //price.IsZero()
- //price.Equal(price)
- priceDivUnit := price.Div(unit)
- expectedPrice := priceDivUnit.Mul(unit)
- if (!price.Equal(expectedPrice)) {
- b.Error("Not equal")
- }
- priceMulUnit := price.Mul(unit)
- expectedPrice = priceMulUnit.Div(unit)
- expectedPrice.String()
- if (!price.Equal(expectedPrice)) {
- b.Error("Not equal")
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement