|
6 | 6 | package cast |
7 | 7 |
|
8 | 8 | import ( |
| 9 | + "strconv" |
9 | 10 | "testing" |
10 | 11 |
|
11 | 12 | qt "github.com/frankban/quicktest" |
@@ -42,3 +43,49 @@ func TestTrimZeroDecimal(t *testing.T) { |
42 | 43 | c.Assert(trimZeroDecimal("0.0000000000"), qt.Equals, "0") |
43 | 44 | c.Assert(trimZeroDecimal("0.00000000001"), qt.Equals, "0.00000000001") |
44 | 45 | } |
| 46 | + |
| 47 | +func TestTrimDecimal(t *testing.T) { |
| 48 | + c := qt.New(t) |
| 49 | + |
| 50 | + c.Assert(trimDecimal("10.0"), qt.Equals, "10") |
| 51 | + c.Assert(trimDecimal("10.00"), qt.Equals, "10") |
| 52 | + c.Assert(trimDecimal("10.010"), qt.Equals, "10") |
| 53 | + c.Assert(trimDecimal("0.0000000000"), qt.Equals, "0") |
| 54 | + c.Assert(trimDecimal("0.00000000001"), qt.Equals, "0") |
| 55 | +} |
| 56 | + |
| 57 | +func BenchmarkDecimal(b *testing.B) { |
| 58 | + testCases := []string{"10.0", "10.00", "10.010", "0.0000000000", "0.0000000001", "10.0000000000", "10.0000000001", "10000000000000.0000000000"} |
| 59 | + |
| 60 | + for _, testCase := range testCases { |
| 61 | + // TODO: remove after minimum Go version is >=1.22 |
| 62 | + testCase := testCase |
| 63 | + |
| 64 | + b.Run(testCase, func(b *testing.B) { |
| 65 | + b.Run("ParseFloat", func(b *testing.B) { |
| 66 | + // TODO: use b.Loop() once updated to Go 1.24 |
| 67 | + for i := 0; i < b.N; i++ { |
| 68 | + v, err := strconv.ParseFloat(testCase, 64) |
| 69 | + if err != nil { |
| 70 | + b.Fatal(err) |
| 71 | + } |
| 72 | + |
| 73 | + n := int64(v) |
| 74 | + _ = n |
| 75 | + } |
| 76 | + }) |
| 77 | + |
| 78 | + b.Run("TrimDecimal", func(b *testing.B) { |
| 79 | + // TODO: use b.Loop() once updated to Go 1.24 |
| 80 | + for i := 0; i < b.N; i++ { |
| 81 | + v, err := strconv.ParseInt(trimDecimal(testCase), 0, 0) |
| 82 | + if err != nil { |
| 83 | + b.Fatal(err) |
| 84 | + } |
| 85 | + |
| 86 | + _ = v |
| 87 | + } |
| 88 | + }) |
| 89 | + }) |
| 90 | + } |
| 91 | +} |
0 commit comments