Skip to content

Instantly share code, notes, and snippets.

@zaach
Created January 23, 2010 19:06
Show Gist options
  • Save zaach/284748 to your computer and use it in GitHub Desktop.
Save zaach/284748 to your computer and use it in GitHub Desktop.
class Card
ROYALS = [:jack, :queen, :king, :ace]
def initialize(value)
@value = if value.class == Symbol then
raise RuntimeError unless ROYALS.index(value) >= 0
ROYALS.index(value) + 11
else
val = value.to_i
raise RuntimeError unless val > 1 && val < 15
val
end
end
def to_i
@value
end
def > (card)
to_i > card.to_i
end
def < (card)
to_i < card.to_i
end
def == (card)
to_i == card.to_i
end
end
class Deck
def initialize
@cards = []
52.times do
@cards << Card.new(2+rand(13))
end
end
def size
@cards.length
end
def deal(amount=1)
@cards.pop
end
def peek
@cards.last
end
def shuffle
@cards.pop
self
end
end
require 'test/unit'
require 'cards'
class CardTest < Test::Unit::TestCase
def setup
end
def test_a_five_is_greater_than_a_two
five_card = Card.new(5)
two_card = Card.new(2)
assert five_card > two_card
end
def test_a_ten_is_less_than_a_king
ten_card = Card.new(10)
king_card = Card.new(:king)
assert ten_card < king_card
end
def test_two_twos_are_equal
two_card = Card.new(2)
two_card2 = Card.new(2)
assert two_card == two_card2
end
def test_setting_rank_with_string_vs_integer_doesnt_matter
two_card = Card.new(2)
two_card2 = Card.new("2")
assert two_card == two_card2
end
def test_card_constructor_rejects_invalid_arguments
assert_raise RuntimeError do
bad_card = Card.new("SF")
end
assert_raise RuntimeError do
bad_card = Card.new(1)
end
assert_raise RuntimeError do
bad_card = Card.new(22)
end
end
def teardown
end
end
class DeckTest < Test::Unit::TestCase
def setup
end
def test_size_of_new_deck_is_52
deck = Deck.new
assert deck.size == 52
end
def test_dealing_one_reduces_size_of_deck_by_one
deck = Deck.new
deck.deal
assert deck.size == 51
end
def test_dealing_five_reduces_size_of_deck_by_five
deck = Deck.new
5.times { deck.deal }
assert deck.size == 47
end
def test_peek_shows_next_card_without_dealing_it
deck = Deck.new
assert deck.peek == deck.deal
end
def test_shuffling_changes_order_of_deck
deck = Deck.new
end
def test_shuffling_preserves_all_the_original_cards
end
def teardown
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment