-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhand_test.exs
91 lines (76 loc) · 2.21 KB
/
hand_test.exs
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
defmodule Dojo.HandTest do
use ExUnit.Case, async: true
alias Dojo.Hand
alias Dojo.Card
doctest Dojo.Hand
test "evaluates a straight flush" do
cards = [
%Card{rank: 9, suit: :hearts},
%Card{rank: 10, suit: :hearts},
%Card{rank: 11, suit: :hearts},
%Card{rank: 12, suit: :hearts},
%Card{rank: 13, suit: :hearts}
]
assert Hand.score(cards) == :straight_flush
end
test "evaluates flush of hearts" do
cards = [
%Card{rank: 3, suit: :hearts},
%Card{rank: 9, suit: :hearts},
%Card{rank: 4, suit: :hearts},
%Card{rank: 8, suit: :hearts},
%Card{rank: 14, suit: :hearts}
]
assert Hand.score(cards) == :flush
end
test "evaluates flush of spades" do
cards = [
%Card{rank: 2, suit: :spades},
%Card{rank: 6, suit: :spades},
%Card{rank: 5, suit: :spades},
%Card{rank: 13, suit: :spades},
%Card{rank: 7, suit: :spades}
]
assert Hand.score(cards) == :flush
end
test "does not evaluate flush for mismatching suits" do
cards = [
%Card{rank: 10, suit: :diamonds},
%Card{rank: 11, suit: :diamonds},
%Card{rank: 12, suit: :diamonds},
%Card{rank: 13, suit: :clubs},
%Card{rank: 14, suit: :clubs}
]
assert Hand.score(cards) != :flush
end
test "evaluates high card" do
cards = [
%Card{rank: 2, suit: :spades},
%Card{rank: 3, suit: :hearts},
%Card{rank: 5, suit: :diamonds},
%Card{rank: 7, suit: :spades},
%Card{rank: 11, suit: :spades}
]
assert Hand.score(cards) == :high_card
end
test "evaluates royal flush of diamonds" do
cards = [
%Card{rank: 10, suit: :diamonds},
%Card{rank: 11, suit: :diamonds},
%Card{rank: 12, suit: :diamonds},
%Card{rank: 13, suit: :diamonds},
%Card{rank: 14, suit: :diamonds}
]
assert Hand.score(cards) == :royal_flush
end
test "does not evaluate royal flush for mismatching suits" do
cards = [
%Card{rank: 10, suit: :diamonds},
%Card{rank: 11, suit: :diamonds},
%Card{rank: 12, suit: :diamonds},
%Card{rank: 13, suit: :clubs},
%Card{rank: 14, suit: :clubs}
]
assert Hand.score(cards) != :royal_flush
end
end