I'm doing the Bob exercise in ruby track from exercism, I get all the test passing except one:
1) Failure:
BobTest#test_multiple_line_question [bob_test.rb:129]:
Bob hears "\nDoes this cryogenic chamber make me look fat?\nNo.", and...
Expected: "Whatever."
Actual: "Sure."
25 runs, 25 assertions, 1 failures, 0 errors, 0 skips
This is my code:
# Class emulating teenager answers
class Bob
def self.hey(remark)
case remark
when /^[A-Z| ]+\?$/
'Calm down, I know what I\'m doing!'
when /^.*\?[ ]*$/, /^\n.*?\nNo\./m
'Sure.'
when /^.*[A-Z]+!+.*$/, /^[A-Z]+[A-Z| ]*!*$/
'Whoa, chill out!'
when /^[ |\t]*$/
'Fine. Be that way!'
else
'Whatever.'
end
end
end
So I do not know how to handle this regular expression:
q = "\nDoes this cryogenic chamber make me look fat?\nNo."
#=> "\nDoes this cryogenic chamber make me look fat?\nNo."
puts q
# Does this cryogenic chamber make me look fat?
# No.
q.match?(/^\n.*?\nNo\./m)
#=> true
[4] pry(main)> [5] pry(main)> Bob.hey(q)
=> "Sure."
[7] pry(main)> class Bob
def self.hey(remark)
case remark
when /^[A-Z| ]+\?$/
'Calm down, I know what I\'m doing!'
when /^.*\?[ ]*$/, /^\n.*?\nNo\./m
'Sure.'
when /^.*[A-Z]+!+.*$/, /^[A-Z]+[A-Z| ]*!*$/
'Whoa, chill out!'
when /^[ |\t]*$/
'Fine. Be that way!'
else
'Whatever.'
end
end
end
[7] pry(main)* => :hey
[8] pry(main)> Bob.hey(q)
=> "Sure."
The problem is that the minitest doesn't work, and I do not understand why:
require 'minitest/autorun'
require_relative 'bob'
# Common test data version: 1.4.0 ca79943
class BobTest < Minitest::Test
def test_stating_something
# # skip
remark = "Tom-ay-to, tom-aaaah-to."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Tom-ay-to, tom-aaaah-to.", and..}
end
def test_shouting
# skip
remark = "WATCH OUT!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "WATCH OUT!", and..}
end
def test_shouting_gibberish
# skip
remark = "FCECDFCAAB"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "FCECDFCAAB", and..}
end
def test_asking_a_question
# skip
remark = "Does this cryogenic chamber make me look fat?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Does this cryogenic chamber make me look fat?", and..}
end
def test_asking_a_numeric_question
# skip
remark = "You are, what, like 15?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "You are, what, like 15?", and..}
end
def test_asking_gibberish
# skip
remark = "fffbbcbeab?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "fffbbcbeab?", and..}
end
def test_talking_forcefully
# skip
remark = "Let's go make out behind the gym!"
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Let's go make out behind the gym!", and..}
end
def test_using_acronyms_in_regular_speech
# skip
remark = "It's OK if you don't want to go to the DMV."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "It's OK if you don't want to go to the DMV.", and..}
end
def test_forceful_question
# skip
remark = "WHAT THE HELL WERE YOU THINKING?"
assert_equal "Calm down, I know what I'm doing!", Bob.hey(remark), %q{Bob hears "WHAT THE HELL WERE YOU THINKING?", and..}
end
def test_shouting_numbers
# skip
remark = "1, 2, 3 GO!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "1, 2, 3 GO!", and..}
end
def test_no_letters
# skip
remark = "1, 2, 3"
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "1, 2, 3", and..}
end
def test_question_with_no_letters
# skip
remark = "4?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "4?", and..}
end
def test_shouting_with_special_characters
# skip
remark = "ZOMG THE %^*@\#$(*^ ZOMBIES ARE COMING!!11!!1!"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "ZOMG THE %^*@\#$(*^ ZOMBIES ARE COMING!!11!!1!", and..}
end
def test_shouting_with_no_exclamation_mark
# skip
remark = "I HATE THE DMV"
assert_equal "Whoa, chill out!", Bob.hey(remark), %q{Bob hears "I HATE THE DMV", and..}
end
def test_statement_containing_question_mark
# skip
remark = "Ending with ? means a question."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "Ending with ? means a question.", and..}
end
def test_non_letters_with_question
# skip
remark = ":) ?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears ":) ?", and..}
end
def test_prattling_on
# skip
remark = "Wait! Hang on. Are you going to be OK?"
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Wait! Hang on. Are you going to be OK?", and..}
end
def test_silence
# skip
remark = ""
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "", and..}
end
def test_prolonged_silence
# skip
remark = " "
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears " ", and..}
end
def test_alternate_silence
# skip
remark = "\t\t\t\t\t\t\t\t\t\t"
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "\t\t\t\t\t\t\t\t\t\t", and..}
end
def test_multiple_line_question
# skip
remark = "\nDoes this cryogenic chamber make me look fat?\nNo."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "\nDoes this cryogenic chamber make me look fat?\nNo.", and..}
end
def test_starting_with_whitespace
# skip
remark = " hmmmmmmm..."
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears " hmmmmmmm...", and..}
end
def test_ending_with_whitespace
# skip
remark = "Okay if like my spacebar quite a bit? "
assert_equal "Sure.", Bob.hey(remark), %q{Bob hears "Okay if like my spacebar quite a bit? ", and..}
end
def test_other_whitespace
# skip
remark = "\n\r \t"
assert_equal "Fine. Be that way!", Bob.hey(remark), %q{Bob hears "\n\r \t", and..}
end
def test_non_question_ending_with_whitespace
# skip
remark = "This is a statement ending with whitespace "
assert_equal "Whatever.", Bob.hey(remark), %q{Bob hears "This is a statement ending with whitespace ", and..}
end
end
Your parameters are backwards. ===
, in ruby, is a slightly odd operation because it's not always symmetric - ie just because a === b
, it's not necessarily true that b === a
.
In this case, note that:
/^\n.*?\nNo\./ === "\nDoes this cryogenic chamber make me look fat?\nNo."
=> true
(And String === Regex
) always returns false.)
This is the order in which case
places the arguments, and explains why you're seeing that result.
However, I don't really know how to "fix" your code since I don't know what behaviour you expect! Maybe the test is wrong? Maybe the regex is wrong? Maybe the case
statement is wrong?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.