|
- package new_user_red_package
-
- import (
- "fmt"
- "math/rand"
- "testing"
- "time"
- )
-
- func TestDistributeRedPacket(t *testing.T) {
- // 初始化随机数种子
- rand.Seed(time.Now().UnixNano())
- // 定义测试用例
- testCases := []struct {
- amount float64
- days int
- userChoices []bool // 每天用户是否选择翻倍
- }{
- {
- amount: 10.0,
- days: 5,
- userChoices: []bool{true, false, true, false, false},
- },
- {
- amount: 20.0,
- days: 7,
- userChoices: []bool{true, true, false, false, true, false, false},
- },
- }
-
- // 运行测试用例
- for _, tc := range testCases {
- runTest(tc.amount, tc.days, tc.userChoices)
- }
- }
-
- // runTest 运行测试用例
- func runTest(totalAmount float64, totalDays int, userChoices []bool) {
- fmt.Printf("\n测试: %.2f元 / %d天\n", totalAmount, totalDays)
- fmt.Printf("每日平均金额: %.2f元\n", totalAmount/float64(totalDays))
- fmt.Println("----------------------------------------")
-
- distributor := NewRedPacketDistributorForTest(totalAmount, totalDays)
- var totalDistributed float64
-
- for day := 1; day <= totalDays; day++ {
- // 获取用户选择
- userChoice := false
- if day <= len(userChoices) {
- userChoice = userChoices[day-1]
- }
-
- // 分发红包并打印结果
- packet, err := distributor.DistributeRedPacket(day, userChoice)
- if err != nil {
- println("err:::", err.Error())
- break
- }
- totalDistributed += packet.FinalAmount
- fmt.Println(formatRedPacketInfo(packet))
- }
-
- // 打印总结信息
- fmt.Println("----------------------------------------")
- fmt.Printf("总计分发: %.2f 元\n", totalDistributed)
- fmt.Printf("剩余金额: %.2f 元\n", distributor.RemainAmount)
- }
|