Created
January 23, 2010 19:06
-
-
Save zaach/284748 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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