-
Notifications
You must be signed in to change notification settings - Fork 0
/
time_test.go
62 lines (52 loc) · 1.49 KB
/
time_test.go
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
package time
import (
"fmt"
"testing"
"time"
)
type Money float64
type UserTransactions struct {
HourRate Money
Transactions []Money
}
type MoneyInTime struct {
Money Money
Time string
}
func TestUserPayment(t *testing.T) {
userTxs := UserTransactions{
HourRate: 30,
Transactions: []Money{10, 20, 60, -60, 100, -200},
}
userTransactions := userTransactionsInTime(userTxs)
userBalance := userBalance(userTxs)
fmt.Println("user hour rate is: ", userTxs.HourRate)
fmt.Printf("user transactions: %+v\n", userTransactions)
fmt.Printf("user balance: %+v\n", userBalance)
}
func userTransactionsInTime(txs UserTransactions) []MoneyInTime {
var transactionsInTime []MoneyInTime
for i := 0; i < len(txs.Transactions); i++ {
rateInHours := txs.Transactions[i] / txs.HourRate
duration := time.Duration(rateInHours * 3600 * 1e9)
transactionsInTime = append(transactionsInTime, MoneyInTime{
Money: txs.Transactions[i],
Time: duration.String(),
})
}
return transactionsInTime
}
func userBalance(txs UserTransactions) MoneyInTime {
var total MoneyInTime
userTransactionsWithTime := userTransactionsInTime(txs)
for i := 0; i < len(userTransactionsWithTime); i++ {
currentDuration, _ := time.ParseDuration(total.Time)
newDuration, _ := time.ParseDuration(userTransactionsWithTime[i].Time)
durationResult := currentDuration + newDuration
total = MoneyInTime{
Money: total.Money + userTransactionsWithTime[i].Money,
Time: durationResult.String(),
}
}
return total
}