Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. cockroachdb "github.com/cockroachdb/apd"
  6. ericlagergren "github.com/ericlagergren/decimal"
  7. "github.com/rin01/decnum"
  8. shopspring "github.com/shopspring/decimal"
  9. "strconv"
  10. "testing"
  11. )
  12.  
  13. func BenchmarkFloat(b *testing.B) {
  14. price := 10000.0
  15. var unit float64 = 1.3492720137776864
  16. b.ResetTimer()
  17. for i := 0; i < b.N; i++ {
  18. priceMulUnit := price * unit
  19. expectedPrice := priceMulUnit / unit
  20. // always false
  21. //if (expectedPrice != price) {
  22. // b.Error("Not equal")
  23. //}
  24. priceDivUnit := price / unit
  25. expectedPrice = priceDivUnit * unit
  26. // always false
  27. //if (expectedPrice != price) {
  28. // b.Error("Not equal")
  29. //}
  30. strconv.FormatFloat(expectedPrice*unit, 'f', -1, 64)
  31. }
  32. }
  33.  
  34. func BenchmarkEricLagergren(b *testing.B) {
  35. price := &ericlagergren.Big{}
  36. price, _ = price.SetString("10000.000000000000000")
  37. unit := &ericlagergren.Big{}
  38. unit,_ = unit.SetString("1.34927201377768640000")
  39. //zero := ericlagergren.New(0, 0)
  40. b.ResetTimer()
  41. for i := 0; i < b.N; i++ {
  42. //price.Cmp(zero)
  43. //price.Cmp(price)
  44.  
  45. var priceQuoUnit *ericlagergren.Big = &ericlagergren.Big{}
  46. priceQuoUnit.Quo(price, unit)
  47. var expectedPrice *ericlagergren.Big = &ericlagergren.Big{}
  48.  
  49. var priceMulUnit ericlagergren.Big
  50. priceMulUnit.Mul(price, unit)
  51. expectedPrice.Quo(&priceMulUnit, unit)
  52. fmt.Println(expectedPrice)
  53. fmt.Println(price)
  54. if (expectedPrice.Cmp(price) != 0) {
  55. b.Error("Not equal")
  56. }
  57.  
  58. expectedPrice.Mul(priceQuoUnit, unit)
  59. fmt.Println(expectedPrice)
  60. fmt.Println(price)
  61. if (expectedPrice.Cmp(price) != 0) {
  62. b.Error("Not equal")
  63. }
  64. expectedPrice.String()
  65. }
  66. }
  67.  
  68. func BenchmarkShopSpring(b *testing.B) {
  69. price, _ := shopspring.NewFromString("10000.0")
  70. unit, _ := shopspring.NewFromString("1.3492720137776864")
  71. b.ResetTimer()
  72. for i := 0; i < b.N; i++ {
  73. //price.IsZero()
  74. //price.Cmp(price)
  75. priceDivUnit := price.Div(unit)
  76. expectedPrice := priceDivUnit.Mul(unit)
  77. if (!expectedPrice.Equal(price)) {
  78. b.Error("Not equal")
  79. }
  80. priceMulUnit := price.Mul(unit)
  81. expectedPrice = priceMulUnit.Div(unit)
  82. expectedPrice.String()
  83. if (!expectedPrice.Equal(price)) {
  84. b.Error("Not equal")
  85. }
  86.  
  87. }
  88. }
  89.  
  90. func BenchmarkCockroachdb(b *testing.B) {
  91. // *** INC precision to pass the test! ****
  92. prec := uint32(9)
  93. c := cockroachdb.BaseContext.WithPrecision(prec)
  94.  
  95. price, _, _ := cockroachdb.NewFromString("10000.0")
  96. unit, _, _ := cockroachdb.NewFromString("1.3492720137776864")
  97. b.ResetTimer()
  98.  
  99. var priceMulUnit cockroachdb.Decimal
  100. var priceQuoUnit cockroachdb.Decimal
  101. var expectedPrice cockroachdb.Decimal
  102. var result cockroachdb.Decimal
  103.  
  104. for i := 0; i < b.N; i++ {
  105. //price.IsZero()
  106. //c.Cmp(price,price, price)
  107. c.Quo(&priceQuoUnit, price, unit)
  108. c.Mul(&expectedPrice, &priceQuoUnit, unit)
  109. c.Cmp(&result, price, &expectedPrice)
  110. if (!result.IsZero()) {
  111. b.Error("Not equal")
  112. }
  113.  
  114. c.Mul(&priceMulUnit, price, unit)
  115. c.Quo(&expectedPrice, &priceMulUnit, unit)
  116. c.Cmp(&result, price, &expectedPrice)
  117. if (!result.IsZero()) {
  118. b.Error("Not equal")
  119. }
  120.  
  121. price.String()
  122. }
  123. }
  124.  
  125. func BenchmarkDecnum(b *testing.B) {
  126. price, _ := decnum.FromString("10000.0")
  127. unit, _ := decnum.FromString("1.3492720137776864")
  128. b.ResetTimer()
  129. for i := 0; i < b.N; i++ {
  130. //price.IsZero()
  131. //price.Equal(price)
  132. priceDivUnit := price.Div(unit)
  133. expectedPrice := priceDivUnit.Mul(unit)
  134. if (!price.Equal(expectedPrice)) {
  135. b.Error("Not equal")
  136. }
  137. priceMulUnit := price.Mul(unit)
  138. expectedPrice = priceMulUnit.Div(unit)
  139. expectedPrice.String()
  140. if (!price.Equal(expectedPrice)) {
  141. b.Error("Not equal")
  142. }
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement