Asserts on hash.keys or hash.values can not be relied on as the order is random (I had an expected values of [:two, :one] when I got to that test).
64 lines
1.5 KiB
Ruby
64 lines
1.5 KiB
Ruby
require 'edgecase'
|
|
|
|
class AboutHashes < EdgeCase::Koan
|
|
def test_creating_hashes
|
|
empty_hash = Hash.new
|
|
assert_equal Hash, empty_hash.class
|
|
assert_equal({}, empty_hash)
|
|
assert_equal __, empty_hash.size
|
|
end
|
|
|
|
def test_hash_literals
|
|
hash = { :one => "uno", :two => "dos" }
|
|
assert_equal __, hash.size
|
|
end
|
|
|
|
def test_accessing_hashes
|
|
hash = { :one => "uno", :two => "dos" }
|
|
assert_equal __, hash[:one]
|
|
assert_equal __, hash[:two]
|
|
assert_equal __, hash[:doesnt_exist]
|
|
end
|
|
|
|
def test_changing_hashes
|
|
hash = { :one => "uno", :two => "dos" }
|
|
hash[:one] = "eins"
|
|
|
|
expected = { :one => __, :two => "dos" }
|
|
assert_equal expected, hash
|
|
|
|
# Bonus Question: Why was "expected" broken out into a variable
|
|
# rather than used as a literal?
|
|
end
|
|
|
|
def test_hash_is_unordered
|
|
hash1 = { :one => "uno", :two => "dos" }
|
|
hash2 = { :two => "dos", :one => "uno" }
|
|
|
|
assert_equal hash1, hash2
|
|
end
|
|
|
|
def test_hash_keys_and_values
|
|
hash = { :one => "uno", :two => "dos" }
|
|
|
|
assert_equal __, hash.keys.size
|
|
assert_equal __, hash.has_key?(:one)
|
|
|
|
# Why not just compare hash.keys to [:one, :two]?
|
|
#
|
|
# Clue: What was the name of the previous test again?
|
|
|
|
assert_equal __, hash.values.sort
|
|
end
|
|
|
|
def test_combining_hashes
|
|
hash = { "jim" => 53, "amy" => 20, "dan" => 23 }
|
|
new_hash = hash.merge({ "jim" => 54, "jenny" => 26 })
|
|
|
|
assert_not_equal hash, new_hash
|
|
|
|
expected = { "jim" => __, "amy" => 20, "dan" => 23, "jenny" => __ }
|
|
assert_equal expected, new_hash
|
|
end
|
|
end
|