dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

poker_test.go (6079B)


      1 package poker
      2 
      3 import (
      4 	"dkforest/pkg/database"
      5 	"dkforest/pkg/utils/rwmtx"
      6 	"github.com/stretchr/testify/assert"
      7 	"testing"
      8 )
      9 
     10 func n(v uint64) rwmtx.RWMtxUInt64[database.PokerChip] {
     11 	return rwmtx.RWMtxUInt64[database.PokerChip]{rwmtx.New(database.PokerChip(v))}
     12 }
     13 
     14 func Test_sortGameResults(t *testing.T) {
     15 	p1 := &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p1"}, gameBet: 10}
     16 	p2 := &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p2"}, gameBet: 20}
     17 	p3 := &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p3"}, gameBet: 30}
     18 	p4 := &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p4"}, gameBet: 100}
     19 	arr := []gameResult{
     20 		{1, []*PokerPlayer{p2, p4, p1, p3}},
     21 	}
     22 	sortGameResults(arr)
     23 	assert.Equal(t, database.Username("p1"), arr[0].players[0].username)
     24 	assert.Equal(t, database.Username("p2"), arr[0].players[1].username)
     25 	assert.Equal(t, database.Username("p3"), arr[0].players[2].username)
     26 	assert.Equal(t, database.Username("p4"), arr[0].players[3].username)
     27 }
     28 
     29 func Test_processPot(t *testing.T) {
     30 	var p1, p2, p3, p4 *PokerPlayer
     31 	var arr []gameResult
     32 	var res []PlayerGain
     33 
     34 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p1"}, gameBet: 100, allInMaxGain: 400}
     35 	p2 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p2"}, gameBet: 200, allInMaxGain: 700}
     36 	p3 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p3"}, gameBet: 300, allInMaxGain: 900}
     37 	p4 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p4"}, gameBet: 400}
     38 	arr = []gameResult{
     39 		{1, []*PokerPlayer{p2, p4, p1, p3}},
     40 	}
     41 	sortGameResults(arr)
     42 	res, _ = processPot(arr, 1000, 20, false, 4)
     43 	assert.Equal(t, database.PokerChip(250), res[0].Gain)
     44 	assert.Equal(t, database.PokerChip(250), res[1].Gain)
     45 	assert.Equal(t, database.PokerChip(250), res[2].Gain)
     46 	assert.Equal(t, database.PokerChip(250), res[3].Gain)
     47 
     48 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p1"}, gameBet: 10, allInMaxGain: 40}
     49 	p2 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p2"}, gameBet: 20, allInMaxGain: 70}
     50 	p3 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p3"}, gameBet: 300, allInMaxGain: 630}
     51 	p4 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p4"}, gameBet: 400}
     52 	arr = []gameResult{
     53 		{1, []*PokerPlayer{p2, p4, p1, p3}},
     54 	}
     55 	sortGameResults(arr)
     56 	res, _ = processPot(arr, 1000, 20, false, 4)
     57 	assert.Equal(t, database.PokerChip(40), res[0].Gain)
     58 	assert.Equal(t, database.PokerChip(70), res[1].Gain)
     59 	assert.Equal(t, database.PokerChip(445), res[2].Gain)
     60 	assert.Equal(t, database.PokerChip(445), res[3].Gain)
     61 
     62 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p1"}, gameBet: 500}
     63 	p2 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p2"}, gameBet: 500, allInMaxGain: 1000}
     64 	arr = []gameResult{
     65 		{1, []*PokerPlayer{p2}},
     66 		{2, []*PokerPlayer{p1}},
     67 	}
     68 	sortGameResults(arr)
     69 	res, _ = processPot(arr, 1000, 20, false, 2)
     70 	assert.Equal(t, 1, len(res))
     71 	assert.Equal(t, database.Username("p2"), res[0].Player.username)
     72 	assert.Equal(t, database.PokerChip(1000), res[0].Gain)
     73 
     74 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p1"}, gameBet: 5}
     75 	p2 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p2"}, gameBet: 5}
     76 	p3 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p3"}, gameBet: 5}
     77 	p4 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p4"}, gameBet: 5}
     78 	//p5 = &PokerPlayer{Cash: 1, GameBet: 3, Folded: true, Username: "p5"}
     79 	arr = []gameResult{
     80 		{1, []*PokerPlayer{p1, p2, p3}},
     81 		{2, []*PokerPlayer{p4}},
     82 	}
     83 	sortGameResults(arr)
     84 	res, _ = processPot(arr, 23, 20, false, 4)
     85 	assert.Equal(t, 3, len(res))
     86 	assert.Equal(t, database.PokerChip(8), res[0].Gain)
     87 	assert.Equal(t, database.PokerChip(8), res[1].Gain)
     88 	assert.Equal(t, database.PokerChip(7), res[2].Gain)
     89 
     90 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p1"}, gameBet: 900, allInMaxGain: 1560}
     91 	p2 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(0), username: "p2"}, gameBet: 640, allInMaxGain: 1300}
     92 	arr = []gameResult{
     93 		{1, []*PokerPlayer{p2}},
     94 		{2, []*PokerPlayer{p1}},
     95 	}
     96 	sortGameResults(arr)
     97 	res, _ = processPot(arr, 1560, 20, false, 2)
     98 	assert.Equal(t, 2, len(res))
     99 	assert.Equal(t, database.PokerChip(1300), res[0].Gain)
    100 	assert.Equal(t, database.PokerChip(260), res[1].Gain)
    101 
    102 	p1 = &PokerPlayer{seatedPlayer: &seatedPlayer{cash: n(1), username: "p1"}, gameBet: 500}
    103 	arr = []gameResult{
    104 		{2, []*PokerPlayer{p1}},
    105 	}
    106 	sortGameResults(arr)
    107 	res, _ = processPot(arr, 1000, 20, false, 2)
    108 	assert.Equal(t, 1, len(res))
    109 	assert.Equal(t, database.Username("p1"), res[0].Player.username)
    110 	assert.Equal(t, database.PokerChip(1000), res[0].Gain)
    111 	assert.Equal(t, "Only player alive", res[0].HandStr)
    112 }
    113 
    114 func Test_isRoundSettled(t *testing.T) {
    115 	type args struct {
    116 		players []*PokerPlayer
    117 	}
    118 	tests := []struct {
    119 		name string
    120 		args args
    121 		want bool
    122 	}{
    123 		{"1", args{players: []*PokerPlayer{
    124 			{bet: n(10), seatedPlayer: &seatedPlayer{cash: n(0)}},
    125 			{bet: n(20), seatedPlayer: &seatedPlayer{cash: n(0)}},
    126 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}},
    127 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}}}}, true},
    128 		{"2", args{players: []*PokerPlayer{
    129 			{bet: n(100), seatedPlayer: &seatedPlayer{cash: n(0)}},
    130 			{bet: n(20), seatedPlayer: &seatedPlayer{cash: n(0)}},
    131 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}},
    132 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}}}}, false},
    133 		{"3", args{players: []*PokerPlayer{
    134 			{bet: n(10), seatedPlayer: &seatedPlayer{cash: n(0)}},
    135 			{bet: n(200), seatedPlayer: &seatedPlayer{cash: n(0)}},
    136 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}},
    137 			{bet: n(30), seatedPlayer: &seatedPlayer{cash: n(1)}}}}, false},
    138 		// TODO: Add test cases.
    139 	}
    140 	for _, tt := range tests {
    141 		t.Run(tt.name, func(t *testing.T) {
    142 			assert.Equalf(t, tt.want, isRoundSettled(tt.args.players), "isRoundSettled(%v)", tt.args.players)
    143 		})
    144 	}
    145 }