Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 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.SetString("10000.0")
  37. unit := ericlagergren.Big{}
  38. unit.SetString("1.3492720137776864")
  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. var priceQuoUnit ericlagergren.Big
  45. priceQuoUnit.Quo(&price, &unit)
  46. var expectedPrice ericlagergren.Big
  47. expectedPrice.Mul(&priceQuoUnit, &unit)
  48. fmt.Println(expectedPrice)
  49. fmt.Println(price)
  50. if (expectedPrice.Cmp(&price) != 0) {
  51. b.Error("Not equal")
  52. }
  53. var priceMulUnit ericlagergren.Big
  54. priceMulUnit.Mul(&price, &unit)
  55. expectedPrice.Quo(&priceMulUnit, &unit)
  56. fmt.Println(expectedPrice)
  57. fmt.Println(price)
  58. if (expectedPrice.Cmp(&price) != 0) {
  59. b.Error("Not equal")
  60. }
  61. expectedPrice.String()
  62. }
  63. }
  64.  
  65. func BenchmarkShopSpring(b *testing.B) {
  66. price, _ := shopspring.NewFromString("10000.0")
  67. unit, _ := shopspring.NewFromString("1.3492720137776864")
  68. b.ResetTimer()
  69. for i := 0; i < b.N; i++ {
  70. //price.IsZero()
  71. //price.Cmp(price)
  72. priceDivUnit := price.Div(unit)
  73. expectedPrice := priceDivUnit.Mul(unit)
  74. expectedPrice.String()
  75. if (!expectedPrice.Equal(price)) {
  76. b.Error("Not equal")
  77. }
  78. priceMulUnit := price.Mul(unit)
  79. expectedPrice = priceMulUnit.Div(unit)
  80. expectedPrice.String()
  81. if (!expectedPrice.Equal(price)) {
  82. b.Error("Not equal")
  83. }
  84.  
  85. }
  86. }
  87.  
  88. func BenchmarkCockroachdb(b *testing.B) {
  89. // *** INC precision to pass the test! ****
  90. prec := uint32(9)
  91. c := cockroachdb.BaseContext.WithPrecision(prec)
  92.  
  93. price, _, _ := cockroachdb.NewFromString("10000.0")
  94. unit, _, _ := cockroachdb.NewFromString("1.3492720137776864")
  95. b.ResetTimer()
  96.  
  97. var priceMulUnit cockroachdb.Decimal
  98. var priceQuoUnit cockroachdb.Decimal
  99. var expectedPrice cockroachdb.Decimal
  100. var result cockroachdb.Decimal
  101.  
  102. for i := 0; i < b.N; i++ {
  103. //price.IsZero()
  104. //c.Cmp(price,price, price)
  105. c.Quo(&priceQuoUnit, price, unit)
  106. c.Mul(&expectedPrice, &priceQuoUnit, unit)
  107. c.Cmp(&result, price, &expectedPrice)
  108. if (!result.IsZero()) {
  109. b.Error("Not equal")
  110. }
  111.  
  112. c.Mul(&priceMulUnit, price, unit)
  113. c.Quo(&expectedPrice, &priceMulUnit, unit)
  114. c.Cmp(&result, price, &expectedPrice)
  115. if (!result.IsZero()) {
  116. b.Error("Not equal")
  117. }
  118.  
  119. price.String()
  120. }
  121. }
  122.  
  123. func BenchmarkDecnum(b *testing.B) {
  124. price, _ := decnum.FromString("10000.0")
  125. unit, _ := decnum.FromString("1.3492720137776864")
  126. b.ResetTimer()
  127. for i := 0; i < b.N; i++ {
  128. //price.IsZero()
  129. //price.Equal(price)
  130. priceDivUnit := price.Div(unit)
  131. expectedPrice := priceDivUnit.Mul(unit)
  132. expectedPrice.String()
  133. if (!price.Equal(expectedPrice)) {
  134. b.Error("Not equal")
  135. }
  136. priceMulUnit := price.Mul(unit)
  137. expectedPrice = priceMulUnit.Div(unit)
  138. expectedPrice.String()
  139. if (!price.Equal(expectedPrice)) {
  140. b.Error("Not equal")
  141. }
  142. }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement