forked from QuantumNous/new-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquota_math_test.go
More file actions
126 lines (110 loc) · 4.46 KB
/
Copy pathquota_math_test.go
File metadata and controls
126 lines (110 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package common
import (
"math"
"testing"
"github.com/shopspring/decimal"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// 2000 quota per call * n=18446744073686646784 overflows int64; the constant
// below reproduces that oversized product for the saturation checks.
const overflowingProduct = 2000 * 1.8446744073686647e19
// TestQuotaFromFloat guards the billing invariant that oversized quota
// products (e.g. price multiplied by a huge user-supplied count) saturate
// instead of wrapping into a negative charge (credit). QuotaFromFloat
// truncates toward zero.
func TestQuotaFromFloat(t *testing.T) {
assert.Equal(t, 42, QuotaFromFloat(42.4))
assert.Equal(t, 42, QuotaFromFloat(42.9))
assert.Equal(t, -42, QuotaFromFloat(-42.9))
assert.Equal(t, MaxQuota, QuotaFromFloat(overflowingProduct))
assert.Equal(t, MinQuota, QuotaFromFloat(-overflowingProduct))
assert.Equal(t, MaxQuota, QuotaFromFloat(math.Inf(1)))
assert.Equal(t, MinQuota, QuotaFromFloat(math.Inf(-1)))
assert.Equal(t, 0, QuotaFromFloat(math.NaN()))
}
// TestQuotaRound checks half-away-from-zero rounding with the same
// saturation policy.
func TestQuotaRound(t *testing.T) {
assert.Equal(t, 42, QuotaRound(41.5))
assert.Equal(t, 43, QuotaRound(42.5))
assert.Equal(t, -43, QuotaRound(-42.5))
assert.Equal(t, MaxQuota, QuotaRound(overflowingProduct))
assert.Equal(t, MinQuota, QuotaRound(-overflowingProduct))
assert.Equal(t, 0, QuotaRound(math.NaN()))
}
// TestQuotaFromDecimal checks the decimal entry point rounds and saturates
// consistently with the float variants.
func TestQuotaFromDecimal(t *testing.T) {
assert.Equal(t, 43, QuotaFromDecimal(decimal.NewFromFloat(42.5)))
assert.Equal(t, 42, QuotaFromDecimal(decimal.NewFromFloat(41.7)))
assert.Equal(t, MaxQuota, QuotaFromDecimal(decimal.NewFromInt(2000).Mul(decimal.NewFromFloat(1.8446744073686647e19))))
assert.Equal(t, MinQuota, QuotaFromDecimal(decimal.NewFromInt(-2000).Mul(decimal.NewFromFloat(1.8446744073686647e19))))
}
// TestQuotaFromFloatChecked verifies the clamp descriptor is nil in range and
// carries the correct kind/clamped value on saturation, so billing callers can
// audit the event.
func TestQuotaFromFloatChecked(t *testing.T) {
quota, clamp := QuotaFromFloatChecked(42.9)
assert.Equal(t, 42, quota)
assert.Nil(t, clamp)
quota, clamp = QuotaFromFloatChecked(overflowingProduct)
assert.Equal(t, MaxQuota, quota)
if assert.NotNil(t, clamp) {
assert.Equal(t, "QuotaFromFloat", clamp.Op)
assert.Equal(t, QuotaClampOverflow, clamp.Kind)
assert.Equal(t, MaxQuota, clamp.Clamped)
}
quota, clamp = QuotaFromFloatChecked(-overflowingProduct)
assert.Equal(t, MinQuota, quota)
if assert.NotNil(t, clamp) {
assert.Equal(t, QuotaClampUnderflow, clamp.Kind)
assert.Equal(t, MinQuota, clamp.Clamped)
}
quota, clamp = QuotaFromFloatChecked(math.NaN())
assert.Equal(t, 0, quota)
if assert.NotNil(t, clamp) {
assert.Equal(t, QuotaClampNaN, clamp.Kind)
assert.Equal(t, 0, clamp.Clamped)
}
}
func TestQuotaFromFloatStrictReturnsTypedClampError(t *testing.T) {
quota, err := QuotaFromFloatStrict(42.9)
require.NoError(t, err)
assert.Equal(t, 42, quota)
quota, err = QuotaFromFloatStrict(overflowingProduct)
assert.Zero(t, quota)
var clamp *QuotaClamp
require.ErrorAs(t, err, &clamp)
assert.Equal(t, QuotaClampOverflow, clamp.Kind)
assert.Equal(t, MaxQuota, clamp.Clamped)
assert.ErrorContains(t, err, "QuotaFromFloat")
assert.ErrorContains(t, err, "overflow")
assert.ErrorContains(t, err, "original=")
assert.ErrorContains(t, err, "clamped=2147483647")
}
// TestQuotaRoundChecked verifies the rounding entry point reports clamps the
// same way.
func TestQuotaRoundChecked(t *testing.T) {
quota, clamp := QuotaRoundChecked(42.5)
assert.Equal(t, 43, quota)
assert.Nil(t, clamp)
quota, clamp = QuotaRoundChecked(overflowingProduct)
assert.Equal(t, MaxQuota, quota)
if assert.NotNil(t, clamp) {
assert.Equal(t, "QuotaRound", clamp.Op)
assert.Equal(t, QuotaClampOverflow, clamp.Kind)
}
}
// TestQuotaFromDecimalChecked verifies the decimal entry point reports clamps.
func TestQuotaFromDecimalChecked(t *testing.T) {
quota, clamp := QuotaFromDecimalChecked(decimal.NewFromFloat(41.7))
assert.Equal(t, 42, quota)
assert.Nil(t, clamp)
quota, clamp = QuotaFromDecimalChecked(decimal.NewFromInt(2000).Mul(decimal.NewFromFloat(1.8446744073686647e19)))
assert.Equal(t, MaxQuota, quota)
if assert.NotNil(t, clamp) {
assert.Equal(t, "QuotaFromDecimal", clamp.Op)
assert.Equal(t, QuotaClampOverflow, clamp.Kind)
}
}