cards_test.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. package algorithm
  2. import (
  3. "github.com/stretchr/testify/assert"
  4. "strings"
  5. "testing"
  6. )
  7. func TestFour(t *testing.T) {
  8. cards := Cards{0x12, 0x02, 0x22, 0xb, 0x1b, 0x7, 0x32}
  9. k, _ := De(cards.GetType())
  10. assert.Equal(t, k, FOUR)
  11. cards = Cards{0x12, 0x02, 0x22, 0x32}
  12. k, _ = De(cards.GetType())
  13. assert.Equal(t, k, FOUR)
  14. }
  15. func TestThree(t *testing.T) {
  16. cards := Cards{0x12, 0x02, 0x22, 0x3a, 0x2a, 0x1a, 0x33}
  17. k, _ := De(cards.GetType())
  18. assert.Equal(t, k, FULL_HOUSE)
  19. }
  20. func TestHighCard(t *testing.T) {
  21. //var cs Cards
  22. cards := Cards{0x1E, 0x02, 0x22, 0x3a, 0x2a, 0x1a, 0x33}
  23. k, _ := De(cards.GetType())
  24. assert.Equal(t, k, FULL_HOUSE)
  25. //assert.Equal(t, v, uint32(0xE))
  26. }
  27. func TestCards_OnePair(t *testing.T) {
  28. cards := Cards{0x12, 0x0e, 0x2e, 0x3a, 0x2a, 0x1a, 0x32}
  29. k, _ := De(cards.GetType())
  30. assert.Equal(t, k, FULL_HOUSE)
  31. }
  32. func TestCards_Straight(t *testing.T) {
  33. cards := Cards{0x12, 0x03, 0x24, 0x35, 0x26, 0x17, 0x33}
  34. k, v := De(cards.GetType())
  35. assert.Equal(t, k, STRAIGHT)
  36. assert.Equal(t, v, uint32(7))
  37. cards = Cards{0x12, 0x03, 0x24, 0x34, 0x26, 0x17, 0x37}
  38. assert.Equal(t, k, STRAIGHT)
  39. assert.Equal(t, v, uint32(7))
  40. cards = Cards{0x12, 0x03, 0x24, 0x34, 0x25, 0x17, 0x3E}
  41. k, v = De(cards.GetType())
  42. assert.Equal(t, k, STRAIGHT)
  43. assert.Equal(t, v, uint32(0x5))
  44. cards = Cards{0x12, 0x03, 0x2a, 0x3c, 0x2b, 0x1d, 0x3E}
  45. k, v = De(cards.GetType())
  46. assert.Equal(t, k, STRAIGHT)
  47. assert.Equal(t, v, uint32(0xe))
  48. }
  49. func TestCards_Flush(t *testing.T) {
  50. cards := Cards{0x32, 0x33, 0x34, 0x35, 0x26, 0x37, 0x28}
  51. k, _ := De(cards.GetType())
  52. assert.Equal(t, k, FLUSH)
  53. //assert.Equal(t, v, uint32(6))
  54. }
  55. func TestCards_TwoPair(t *testing.T) {
  56. cards := Cards{0x12, 0x22, 0x34, 0x35, 0x25, 0x38, 0x28}
  57. k, _ := De(cards.GetType())
  58. assert.Equal(t, k, TWO_PAIR)
  59. }
  60. func TestCards_RoyalFlush(t *testing.T) {
  61. cards := Cards{0x3A, 0x3B, 0x3C, 0x3E, 0x3D, 0x38, 0x28}
  62. k, _ := De(cards.GetType())
  63. assert.Equal(t, k, ROYAL_FLUSH)
  64. cards = Cards{0x3A, 0x3B, 0x3C, 0x3E, 0x2D, 0x38, 0x28}
  65. k, _ = De(cards.GetType())
  66. assert.Equal(t, k, FLUSH)
  67. }
  68. func TestCards_FLUSH1(t *testing.T) {
  69. cards1 := Cards{0x22, 0x22, 0x22, 0x25, 0x38, 0x28}
  70. cards2 := Cards{0x32, 0x32, 0x33, 0x34, 0x25, 0x36}
  71. v1 := cards1.GetType()
  72. v2 := cards2.GetType()
  73. assert.Equal(t, v1 > v2, true)
  74. cards1 = Cards{0x22, 0x22, 0x2E, 0x25, 0x38, 0x28}
  75. cards2 = Cards{0x32, 0x32, 0x33, 0x3a, 0x2a, 0x3E}
  76. assert.Equal(t, cards1.GetType() > cards2.GetType(), false)
  77. }
  78. func TestCards_FLUSH(t *testing.T) {
  79. cards1 := Cards{0x22, 0x22, 0x24, 0x25, 0x38, 0x28}
  80. cards2 := Cards{0x32, 0x32, 0x33, 0x34, 0x25, 0x36}
  81. v1 := cards1.GetType()
  82. v2 := cards2.GetType()
  83. assert.Equal(t, v1 > v2, true)
  84. }
  85. func TestCards_PK(t *testing.T) {
  86. cards1 := Cards{0x32, 0x32, 0x34, 0x35, 0x25, 0x38, 0x28}
  87. cards2 := Cards{0x32, 0x32, 0x33, 0x34, 0x25, 0x36}
  88. v1 := cards1.GetType()
  89. v2 := cards2.GetType()
  90. assert.Equal(t, v1 > v2, true)
  91. }
  92. func TestCards_StraightFlush(t *testing.T) {
  93. cards := Cards{0x32, 0x33, 0x34, 0x35, 0x36, 0x27, 0x28}
  94. k, v := De(cards.GetType())
  95. assert.Equal(t, k, uint8(9))
  96. assert.Equal(t, v, uint32(6))
  97. cards = Cards{0x32, 0x33, 0x34, 0x35, 0x3E, 0x37, 0x28}
  98. k, v = De(cards.GetType())
  99. assert.Equal(t, k, uint8(9))
  100. assert.Equal(t, v, uint32(5))
  101. cards = Cards{0x32, 0x33, 0x34, 0x35, 0x3E, 0x36, 0x28}
  102. k, v = De(cards.GetType())
  103. assert.Equal(t, k, uint8(9))
  104. assert.Equal(t, v, uint32(6))
  105. }
  106. func TestCards_FullFouse(t *testing.T) {
  107. cards := Cards{0x33, 0x33, 0x33, 0x35, 0x25, 0x35, 0x28}
  108. k, _ := De(cards.GetType())
  109. //t.Logf("%v %v %#v ",k,v,cards)
  110. assert.Equal(t, k, FULL_HOUSE)
  111. //assert.Equal(t, v, FULL_HOUSE)
  112. //t.Log(cards.String())
  113. //t.Log(cards.Hex())
  114. }
  115. func TestString2Num(t *testing.T) {
  116. array := Cards{0x33, 0x33, 0x33, 0x35, 0x25, 0x35, 0x3E, 0x1A}
  117. //for i := 0; i < N; i++ {
  118. go array.Shuffle()
  119. t.Log(array.String())
  120. //}
  121. }
  122. func TestFullFouse(t *testing.T) {
  123. var s = "A A A K K|" +
  124. "A A A Q Q|" +
  125. "A A A J J|" +
  126. "A A A T T|" +
  127. "A A A 9 9|" +
  128. "A A A 8 8|" +
  129. "A A A 7 7|" +
  130. "A A A 6 6|" +
  131. "A A A 5 5|" +
  132. "A A A 4 4|" +
  133. "A A A 3 3|" +
  134. "A A A 2 2|" +
  135. "K K K A A|" +
  136. "K K K Q Q|" +
  137. "K K K J J|" +
  138. "K K K T T|" +
  139. "K K K 9 9|" +
  140. "K K K 8 8|" +
  141. "K K K 7 7|" +
  142. "K K K 6 6|" +
  143. "K K K 5 5|" +
  144. "K K K 4 4|" +
  145. "K K K 3 3|" +
  146. "K K K 2 2|" +
  147. "Q Q Q A A|" +
  148. "Q Q Q K K|" +
  149. "Q Q Q J J|" +
  150. "Q Q Q T T|" +
  151. "Q Q Q 9 9"
  152. array := strings.Split(s, "|")
  153. var oldValue uint32
  154. for _, v := range array {
  155. cards := &Cards{}
  156. cards.SetByString(v)
  157. //t.Log(cards.String())
  158. k, value := De(cards.GetType())
  159. if oldValue == 0 {
  160. oldValue = value
  161. continue
  162. }
  163. assert.Equal(t, oldValue > value, true)
  164. assert.Equal(t, k, FULL_HOUSE)
  165. //assert.Equal(t,v,uint32(6))
  166. //t.Log(De(cards.FullFouse(cards.Counter())))
  167. }
  168. }
  169. func Test_Straight1(t *testing.T) {
  170. /* testCards := "T J Q K A|" +
  171. "9 T J Q K|" +
  172. "8 9 T J Q|" +
  173. "7 8 9 T J|" +
  174. "6 7 8 9 T|" +
  175. "5 6 7 8 9|" +
  176. "4 5 6 7 8|" +
  177. "3 4 5 6 7|" +
  178. "2 3 4 5 6|" +
  179. "A 2 3 4 5"
  180. //array := strings.Split(testCards, "|")
  181. for _, v := range array {
  182. cards := &Cards{}
  183. cards.SetByString(v)
  184. cards.Sort()
  185. t.Log(cards.String(), cards.Straight() > 0)
  186. }
  187. t.Log("--------------------------------------")
  188. for _, v := range array {
  189. cards := &Cards{}
  190. cards.SetByString(v)
  191. cards.Sort()
  192. t.Log(cards.String(), cards.StraightFlush() > 0)
  193. }*/
  194. /* t.Log("--------------------------------------")
  195. for _, v := range array {
  196. cards := &Cards{}
  197. cards.SetByString(v)
  198. cards.Sort()
  199. t.Log(cards.String(), cards.RoyalFlush())
  200. }*/
  201. }
  202. func Test_AnalyseCards(t *testing.T) {
  203. var a ColorCounter
  204. cards := []byte{0x33, 0x35, 0x25, 0x35, 0x28}
  205. a.Set(cards)
  206. t.Log(a.Get(0x33), a.Get(0x35), a.Get(0x28))
  207. }
  208. func Test_Append(t *testing.T) {
  209. cards := Cards{0x33, 0x35, 0x25, 0x35, 0x28}
  210. cards = cards.Append(Cards{0x33, 0x33}...)
  211. t.Logf("%#v ", cards.GetType())
  212. }
  213. func Test_turnToValue1(t *testing.T) {
  214. v1 := []byte{0x33, 0x35, 0x25, 0x35, 0x28}
  215. v2 := []byte{0x35, 0x35, 0x25, 0x35, 0x27}
  216. t.Logf("%#v %#v ", v1, v2)
  217. b1 := ToValue(v1)
  218. b2 := ToValue(v2)
  219. t.Log(b1, b2)
  220. }
  221. func Test_ColorCounter(t *testing.T) {
  222. v2 := []byte{0x35, 0x35, 0x25, 0x35, 0x27}
  223. var colorCounter ColorCounter
  224. colorCounter.Set(v2)
  225. t.Log(v2)
  226. }
  227. func Test_turnToValue(t *testing.T) {
  228. v := ToValue([]byte{0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E})
  229. //var v3 uint16 = v
  230. v1 := v | (10 << 24)
  231. //t.Log(v3)
  232. t.Logf("%v %v %v", v, v1>>24, v1&0xFFFFFF)
  233. t.Logf("%v ", ToValue([]byte{0x33, 0x35, 0x25, 0x35, 0x28}))
  234. }