Skip to content

Commit 450541a

Browse files
committed
chore: progress
1 parent 56645e3 commit 450541a

File tree

2 files changed

+724
-0
lines changed

2 files changed

+724
-0
lines changed

x/escrow/client/util/util_test.go

Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
package util
2+
3+
import (
4+
"math"
5+
"testing"
6+
7+
sdkmath "cosmossdk.io/math"
8+
)
9+
10+
func TestLeaseCalcBalanceRemain(t *testing.T) {
11+
tests := []struct {
12+
name string
13+
balance string
14+
currBlock int64
15+
settledAt int64
16+
leasePrice string
17+
expected float64
18+
}{
19+
{
20+
name: "normal case with positive balance remaining",
21+
balance: "1000.0",
22+
currBlock: 100,
23+
settledAt: 90,
24+
leasePrice: "10.0",
25+
expected: 900.0,
26+
},
27+
{
28+
name: "zero blocks elapsed",
29+
balance: "1000.0",
30+
currBlock: 100,
31+
settledAt: 100,
32+
leasePrice: "10.0",
33+
expected: 1000.0,
34+
},
35+
{
36+
name: "one block elapsed",
37+
balance: "1000.0",
38+
currBlock: 101,
39+
settledAt: 100,
40+
leasePrice: "10.0",
41+
expected: 990.0,
42+
},
43+
{
44+
name: "balance depleted exactly",
45+
balance: "100.0",
46+
currBlock: 110,
47+
settledAt: 100,
48+
leasePrice: "10.0",
49+
expected: 0.0,
50+
},
51+
{
52+
name: "balance overdrafted",
53+
balance: "50.0",
54+
currBlock: 110,
55+
settledAt: 100,
56+
leasePrice: "10.0",
57+
expected: -50.0,
58+
},
59+
{
60+
name: "zero balance",
61+
balance: "0.0",
62+
currBlock: 100,
63+
settledAt: 90,
64+
leasePrice: "10.0",
65+
expected: -100.0,
66+
},
67+
{
68+
name: "zero lease price",
69+
balance: "1000.0",
70+
currBlock: 100,
71+
settledAt: 90,
72+
leasePrice: "0.0",
73+
expected: 1000.0,
74+
},
75+
{
76+
name: "large numbers",
77+
balance: "1000000.0",
78+
currBlock: 1000000,
79+
settledAt: 999000,
80+
leasePrice: "100.0",
81+
expected: 900000.0,
82+
},
83+
{
84+
name: "fractional lease price",
85+
balance: "1000.0",
86+
currBlock: 100,
87+
settledAt: 90,
88+
leasePrice: "0.5",
89+
expected: 995.0,
90+
},
91+
{
92+
name: "fractional balance",
93+
balance: "123.456",
94+
currBlock: 105,
95+
settledAt: 100,
96+
leasePrice: "2.5",
97+
expected: 110.956,
98+
},
99+
{
100+
name: "very small lease price",
101+
balance: "100.0",
102+
currBlock: 1000,
103+
settledAt: 0,
104+
leasePrice: "0.001",
105+
expected: 99.0,
106+
},
107+
{
108+
name: "many blocks elapsed",
109+
balance: "10000.0",
110+
currBlock: 100000,
111+
settledAt: 0,
112+
leasePrice: "0.1",
113+
expected: 0.0,
114+
},
115+
}
116+
117+
for _, tt := range tests {
118+
t.Run(tt.name, func(t *testing.T) {
119+
balance := sdkmath.LegacyMustNewDecFromStr(tt.balance)
120+
leasePrice := sdkmath.LegacyMustNewDecFromStr(tt.leasePrice)
121+
122+
result := LeaseCalcBalanceRemain(balance, tt.currBlock, tt.settledAt, leasePrice)
123+
124+
if !floatEquals(result, tt.expected, 0.0001) {
125+
t.Errorf("LeaseCalcBalanceRemain() = %v, want %v", result, tt.expected)
126+
}
127+
})
128+
}
129+
}
130+
131+
func TestLeaseCalcBlocksRemain(t *testing.T) {
132+
tests := []struct {
133+
name string
134+
balance float64
135+
leasePrice string
136+
expected int64
137+
}{
138+
{
139+
name: "normal case",
140+
balance: 1000.0,
141+
leasePrice: "10.0",
142+
expected: 100,
143+
},
144+
{
145+
name: "fractional result rounds down",
146+
balance: 105.0,
147+
leasePrice: "10.0",
148+
expected: 10,
149+
},
150+
{
151+
name: "zero balance",
152+
balance: 0.0,
153+
leasePrice: "10.0",
154+
expected: 0,
155+
},
156+
{
157+
name: "small balance with large price",
158+
balance: 1.0,
159+
leasePrice: "10.0",
160+
expected: 0,
161+
},
162+
{
163+
name: "large balance",
164+
balance: 1000000.0,
165+
leasePrice: "0.1",
166+
expected: 10000000,
167+
},
168+
{
169+
name: "fractional lease price",
170+
balance: 100.0,
171+
leasePrice: "0.5",
172+
expected: 200,
173+
},
174+
{
175+
name: "exact division",
176+
balance: 250.0,
177+
leasePrice: "2.5",
178+
expected: 100,
179+
},
180+
{
181+
name: "very small lease price",
182+
balance: 100.0,
183+
leasePrice: "0.001",
184+
expected: 100000,
185+
},
186+
{
187+
name: "fractional balance and price",
188+
balance: 123.456,
189+
leasePrice: "0.789",
190+
expected: 156,
191+
},
192+
{
193+
name: "balance barely covers one block",
194+
balance: 10.1,
195+
leasePrice: "10.0",
196+
expected: 1,
197+
},
198+
{
199+
name: "balance almost covers one block",
200+
balance: 9.9,
201+
leasePrice: "10.0",
202+
expected: 0,
203+
},
204+
{
205+
name: "negative balance",
206+
balance: -100.0,
207+
leasePrice: "10.0",
208+
expected: -10,
209+
},
210+
}
211+
212+
for _, tt := range tests {
213+
t.Run(tt.name, func(t *testing.T) {
214+
leasePrice := sdkmath.LegacyMustNewDecFromStr(tt.leasePrice)
215+
216+
result := LeaseCalcBlocksRemain(tt.balance, leasePrice)
217+
218+
if result != tt.expected {
219+
t.Errorf("LeaseCalcBlocksRemain() = %v, want %v", result, tt.expected)
220+
}
221+
})
222+
}
223+
}
224+
225+
func TestLeaseCalcBalanceRemainWithExtremValues(t *testing.T) {
226+
tests := []struct {
227+
name string
228+
balance string
229+
currBlock int64
230+
settledAt int64
231+
leasePrice string
232+
validate func(t *testing.T, result float64)
233+
}{
234+
{
235+
name: "max int64 blocks",
236+
balance: "1000000000.0",
237+
currBlock: math.MaxInt64,
238+
settledAt: math.MaxInt64 - 1000,
239+
leasePrice: "1.0",
240+
validate: func(t *testing.T, result float64) {
241+
if !floatEquals(result, 999999000.0, 1.0) {
242+
t.Errorf("LeaseCalcBalanceRemain() = %v, want approximately %v", result, 999999000.0)
243+
}
244+
},
245+
},
246+
{
247+
name: "negative blocks elapsed",
248+
balance: "1000.0",
249+
currBlock: 50,
250+
settledAt: 100,
251+
leasePrice: "10.0",
252+
validate: func(t *testing.T, result float64) {
253+
if result <= 1000.0 {
254+
t.Errorf("LeaseCalcBalanceRemain() = %v, should be greater than 1000.0 when currBlock < settledAt", result)
255+
}
256+
},
257+
},
258+
}
259+
260+
for _, tt := range tests {
261+
t.Run(tt.name, func(t *testing.T) {
262+
balance := sdkmath.LegacyMustNewDecFromStr(tt.balance)
263+
leasePrice := sdkmath.LegacyMustNewDecFromStr(tt.leasePrice)
264+
265+
result := LeaseCalcBalanceRemain(balance, tt.currBlock, tt.settledAt, leasePrice)
266+
267+
tt.validate(t, result)
268+
})
269+
}
270+
}
271+
272+
func floatEquals(a, b, epsilon float64) bool {
273+
return math.Abs(a-b) < epsilon
274+
}

0 commit comments

Comments
 (0)