mirror of
https://github.com/edgecase/ruby_koans.git
synced 2026-04-15 07:23:19 -04:00
Merged src directory with existing koans.
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
= Playing Greed
|
||||
|
||||
Greed is a dice game played among 2 or more players, using 5
|
||||
Greed is a dice game played amoung 2 or more players, using 5
|
||||
six-sided dice.
|
||||
|
||||
== Playing Greed
|
||||
|
||||
Each player takes a turn consisting of one or more rolls of the dice.
|
||||
On the first roll of the game, a player rolls all five dice which are
|
||||
On the first roll of the game, a player rolls all six dice which are
|
||||
scored according to the following:
|
||||
|
||||
Three 1's => 1000 points
|
||||
@@ -37,7 +37,7 @@ final example.
|
||||
|
||||
After a player rolls and the score is calculated, the scoring dice are
|
||||
removed and the player has the option of rolling again using only the
|
||||
non-scoring dice. If all of the dice are scoring, then the player
|
||||
non-scoring dice. If there all no non-scoring dice), then the player
|
||||
may roll all 5 dice in the next roll.
|
||||
|
||||
The player may continue to roll as long as each roll scores points. If
|
||||
|
||||
@@ -40,6 +40,7 @@ class AboutArrays < EdgeCase::Koan
|
||||
assert_equal __, array[2,2]
|
||||
assert_equal __, array[2,20]
|
||||
assert_equal __, array[4,0]
|
||||
assert_equal __, array[4,100]
|
||||
assert_equal __, array[5,0]
|
||||
end
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ class AboutAsserts < EdgeCase::Koan
|
||||
|
||||
# We shall contemplate truth by testing reality, via asserts.
|
||||
def test_assert_truth
|
||||
assert false # This should be true
|
||||
assert true # This should be true
|
||||
end
|
||||
|
||||
# Enlightenment may be more easily achieved with appropriate
|
||||
@@ -19,7 +19,7 @@ class AboutAsserts < EdgeCase::Koan
|
||||
# To understand reality, we must compare our expectations against
|
||||
# reality.
|
||||
def test_assert_equality
|
||||
expected_value = 3
|
||||
expected_value = __
|
||||
actual_value = 1 + 1
|
||||
|
||||
assert expected_value == actual_value
|
||||
@@ -27,7 +27,7 @@ class AboutAsserts < EdgeCase::Koan
|
||||
|
||||
# Some ways of asserting equality are better than others.
|
||||
def test_a_better_way_of_asserting_equality
|
||||
expected_value = 3
|
||||
expected_value = __
|
||||
actual_value = 1 + 1
|
||||
|
||||
assert_equal expected_value, actual_value
|
||||
|
||||
@@ -77,7 +77,7 @@ class AboutBlocks < EdgeCase::Koan
|
||||
def test_stand_alone_blocks_can_be_passed_to_methods_expecting_blocks
|
||||
make_upper = lambda { |n| n.upcase }
|
||||
result = method_with_block_arguments(&make_upper)
|
||||
assert_equal __, result
|
||||
assert_equal __, result
|
||||
end
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
@@ -11,7 +11,7 @@ class AboutControlStatements < EdgeCase::Koan
|
||||
assert_equal __, result
|
||||
end
|
||||
|
||||
def test_if_then_statements
|
||||
def test_if_then_else_statements
|
||||
result = :default_value
|
||||
if true
|
||||
result = :true_value
|
||||
|
||||
@@ -6,10 +6,10 @@ class AboutExceptions < EdgeCase::Koan
|
||||
end
|
||||
|
||||
def test_exceptions_inherit_from_Exception
|
||||
assert MySpecialError.ancestors.include?(RuntimeError)
|
||||
assert MySpecialError.ancestors.include?(StandardError)
|
||||
assert MySpecialError.ancestors.include?(Exception)
|
||||
assert MySpecialError.ancestors.include?(Object)
|
||||
assert_equal __, MySpecialError.ancestors[1]
|
||||
assert_equal __, MySpecialError.ancestors[2]
|
||||
assert_equal __, MySpecialError.ancestors[3]
|
||||
assert_equal __, MySpecialError.ancestors[4]
|
||||
end
|
||||
|
||||
def test_rescue_clause
|
||||
@@ -40,7 +40,7 @@ class AboutExceptions < EdgeCase::Koan
|
||||
result = :exception_handled
|
||||
end
|
||||
|
||||
assert_equal __(:exception_handled), result
|
||||
assert_equal __, result
|
||||
assert_equal __, ex.message
|
||||
end
|
||||
|
||||
|
||||
@@ -35,14 +35,23 @@ class AboutHashes < EdgeCase::Koan
|
||||
hash1 = { :one => "uno", :two => "dos" }
|
||||
hash2 = { :two => "dos", :one => "uno" }
|
||||
|
||||
assert_equal hash1, hash2
|
||||
assert_equal hash1, hash2
|
||||
end
|
||||
|
||||
def test_hash_keys_and_values
|
||||
def test_hash_keys
|
||||
hash = { :one => "uno", :two => "dos" }
|
||||
assert_equal __, hash.keys.size
|
||||
assert_equal __, hash.keys.include?(:one)
|
||||
assert_equal __, hash.keys.include?(:two)
|
||||
assert_equal Array, hash.keys.class
|
||||
end
|
||||
|
||||
assert_equal __, hash.keys.sort
|
||||
assert_equal __, hash.values.sort
|
||||
def test_hash_values
|
||||
hash = { :one => "uno", :two => "dos" }
|
||||
assert_equal __, hash.keys.size
|
||||
assert_equal __, hash.values.include?("uno")
|
||||
assert_equal __, hash.values.include?("dos")
|
||||
assert_equal Array, hash.values.class
|
||||
end
|
||||
|
||||
def test_combining_hashes
|
||||
|
||||
@@ -25,7 +25,7 @@ class AboutMessagePassing < EdgeCase::Koan
|
||||
|
||||
assert mc.send("caught?")
|
||||
assert mc.send("caught" + __ ) # What do you need to add to the first string?
|
||||
assert mc.send("CAUGHT?".__ ) # What would you need to do to the string?
|
||||
assert mc.send("CAUGHT?".____ ) # What would you need to do to the string?
|
||||
end
|
||||
|
||||
def test_send_with_underscores_will_also_send_messages
|
||||
@@ -96,7 +96,7 @@ class AboutMessagePassing < EdgeCase::Koan
|
||||
|
||||
class AllMessageCatcher
|
||||
def method_missing(method_name, *args, &block)
|
||||
"Someone called #{method_name} with (#{args.join(", ")})"
|
||||
"Someone called #{method_name} with <#{args.join(", ")}>"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class AboutMethods < EdgeCase::Koan
|
||||
# (NOTE: We are Using eval below because the example code is
|
||||
# considered to be syntactically invalid).
|
||||
def test_sometimes_missing_parenthesis_are_ambiguous
|
||||
eval "assert_equal 5, my_global_method 2, 3"
|
||||
eval "assert_equal 5, my_global_method 2, 3" # ENABLE CHECK
|
||||
#
|
||||
# Ruby doesn't know if you mean:
|
||||
#
|
||||
@@ -36,12 +36,12 @@ class AboutMethods < EdgeCase::Koan
|
||||
exception = assert_raise(___) do
|
||||
my_global_method
|
||||
end
|
||||
assert_equal __, exception.message
|
||||
assert_match(/__/, exception.message)
|
||||
|
||||
exception = assert_raise(___) do
|
||||
my_global_method(1,2,3)
|
||||
end
|
||||
assert_equal __, exception.message
|
||||
assert_match(/__/, exception.message)
|
||||
end
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
@@ -2,34 +2,23 @@ require 'edgecase'
|
||||
|
||||
class AboutNil < EdgeCase::Koan
|
||||
def test_nil_is_an_object
|
||||
#
|
||||
# Hint: '!'s negate the response from what follows.
|
||||
#
|
||||
assert !nil.is_a?(Object), "Unlike NULL in other languages"
|
||||
assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages"
|
||||
end
|
||||
|
||||
def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil
|
||||
#
|
||||
# What is the Exception that is thrown when you call a method that
|
||||
# does not exist?
|
||||
#
|
||||
# Hint: launch irb and try the code in the block below.
|
||||
#
|
||||
# Don't be confused by the code below yet. It's using blocks
|
||||
# which are explained later on in about_blocks.rb. For now,
|
||||
# think about it like running nil.some_method_nil_doesnt_know_about
|
||||
# in a sandbox and catching the error class into the exception
|
||||
# variable.
|
||||
#
|
||||
exception = assert_raise(___) do
|
||||
# What happens when you call a method that doesn't exist. The
|
||||
# following begin/rescue/end code block captures the exception and
|
||||
# make some assertions about it.
|
||||
begin
|
||||
nil.some_method_nil_doesnt_know_about
|
||||
rescue Exception => ex
|
||||
# What exception has been caught?
|
||||
assert_equal __, ex.class
|
||||
|
||||
# What message was attached to the exception?
|
||||
# (HINT: replace __ with part of the error message.)
|
||||
assert_match(/__/, ex.message)
|
||||
end
|
||||
|
||||
#
|
||||
# What is the error message itself? What substring or pattern could
|
||||
# you test against in order to have a good idea what the string is?
|
||||
#
|
||||
assert_match /__/, exception.message
|
||||
end
|
||||
|
||||
def test_nil_has_a_few_methods_defined_on_it
|
||||
|
||||
@@ -15,7 +15,10 @@ require 'edgecase'
|
||||
class Proxy
|
||||
def initialize(target_object)
|
||||
@object = target_object
|
||||
# ADD MORE CODE HERE
|
||||
end
|
||||
|
||||
# WRITE CODE HERE
|
||||
end
|
||||
|
||||
# The proxy object should pass the following Koan:
|
||||
|
||||
@@ -1 +1 @@
|
||||
require 'edgecase'
|
||||
require 'edgecase'
|
||||
|
||||
@@ -14,6 +14,14 @@ def ___(value=FillMeInError)
|
||||
value
|
||||
end
|
||||
|
||||
class Object
|
||||
def ____(method=nil)
|
||||
if method
|
||||
self.send(method)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module EdgeCase
|
||||
class Sensei
|
||||
attr_reader :failure, :failed_test
|
||||
|
||||
@@ -17,6 +17,7 @@ require 'about_blocks'
|
||||
require 'about_sandwich_code'
|
||||
require 'about_scoring_project'
|
||||
require 'about_classes'
|
||||
require 'about_open_classes'
|
||||
require 'about_dice_project'
|
||||
require 'about_inheritance'
|
||||
require 'about_modules'
|
||||
|
||||
Reference in New Issue
Block a user