summaryrefslogtreecommitdiff
path: root/round_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'round_test.go')
-rw-r--r--round_test.go35
1 files changed, 30 insertions, 5 deletions
diff --git a/round_test.go b/round_test.go
index 13a9051..6033156 100644
--- a/round_test.go
+++ b/round_test.go
@@ -2,10 +2,11 @@ package float
import (
"fmt"
+ "math"
"testing"
)
-func TestRound(t *testing.T) {
+func TestRound2(t *testing.T) {
testCases := []struct {
in, out float64
}{
@@ -24,15 +25,39 @@ func TestRound(t *testing.T) {
}
for _, tc := range testCases {
t.Run(fmt.Sprint(tc.in), func(t *testing.T) {
- if r := Round(tc.in, 2); r != tc.out {
+ if r := RoundN(tc.in, 2); r != tc.out {
t.Errorf("got %v, want %v", r, tc.out)
}
})
}
}
-func BenchmarkRound(b *testing.B) {
- for i := 0; i < b.N; i++ {
- Round(0.333, 2)
+func TestRound(t *testing.T) {
+ negZero := math.Copysign(0, -1)
+ testCases := []struct {
+ in, out float64
+ }{
+ {-0.49999999999999994, negZero}, // -0.5+epsilon
+ {-0.5, -1},
+ {-0.5000000000000001, -1}, // -0.5-epsilon
+ {0, 0},
+ {0.49999999999999994, 0}, // 0.5-epsilon
+ {0.5, 1},
+ {0.5000000000000001, 1}, // 0.5+epsilon
+ {1.390671161567e-309, 0}, // denormal
+ {2.2517998136852485e+15, 2.251799813685249e+15}, // 1 bit fraction
+ {4.503599627370497e+15, 4.503599627370497e+15}, // large integer
+ {math.Inf(-1), math.Inf(-1)},
+ {math.Inf(1), math.Inf(1)},
+ {math.NaN(), math.NaN()},
+ {negZero, negZero},
+ }
+ for _, tc := range testCases {
+ t.Run(fmt.Sprint(tc.in, tc.out), func(t *testing.T) {
+ r := Round(tc.in)
+ if math.Float64bits(r) != math.Float64bits(tc.out) {
+ t.Errorf("got %v, want %v", r, tc.out)
+ }
+ })
}
}