Skip to content

Instantly share code, notes, and snippets.

@danielfone
Last active December 20, 2015 11:09
Show Gist options
  • Select an option

  • Save danielfone/6120974 to your computer and use it in GitHub Desktop.

Select an option

Save danielfone/6120974 to your computer and use it in GitHub Desktop.
1. Download `devowelr.rb` 2. Make sure you can run it from the terminal `ruby ./devowelr.rb` 3. Make sure the result on the first run looks something like the first run below 4. Write code and run the tests until you get as many as possible green :)
#!/usr/bin/env ruby
#
# Write a method that takes in a string and returns it
# with all the vowels removed
#
def devowel(string)
# Write code here...
end
# -------------------------------------
# Don't worry about anything below here
# -------------------------------------
class MicroTest
def self.test
yield test = new
test.puts_totals
end
def initialize
@pass_count = 0
@fail_count = 0
end
def puts_totals
puts "---"
puts_pass "Passed: #{@pass_count}" if @pass_count > 0
puts_fail "Failed: #{@fail_count}" if @fail_count > 0
end
def assert_returns(method, input, expected)
call_name = "devowel(#{input.inspect})"
actual = send method, input rescue (puts_fail "#{call_name} raised exception #{$!}"; return)
if actual == expected
@pass_count += 1
puts_pass "#{call_name} returned #{actual.inspect}"
else
@fail_count += 1
puts_fail "Expected #{call_name} to return #{expected.inspect}"
puts_fail "\t Returned #{actual.inspect} instead."
end
ensure
puts
end
private
def puts_pass(message)
puts_color message, '32'
end
def puts_fail(message)
puts_color message, '31'
end
def puts_color(message, color_code)
puts "\e[0;#{color_code}m" << message << "\e[0m"
end
end
MicroTest.test do |test|
test.assert_returns :devowel, 'flicker', 'flckr'
test.assert_returns :devowel, 'aaa', ''
test.assert_returns :devowel, 'aeiou', ''
test.assert_returns :devowel, 'google', 'ggl'
test.assert_returns :devowel, 'Sage Harris','Sg Hrrs'
test.assert_returns :devowel, nil, nil
test.assert_returns :devowel, 1.2, 1.2
test.assert_returns :devowel, ['a', 'Dan'], ['a', 'Dan']
test.assert_returns :devowel, 'Dåñîêl', 'Dñl'
rand_string = ("a" * rand(10)) + ("b" * rand(5))
test.assert_returns :devowel, rand_string, rand_string.delete('a') # hmmm, this could be helpful
end
$ ruby ./devowelr.rb
Expected devowel("flicker") to return "flckr"
Returned nil instead.
Expected devowel("aaa") to return ""
Returned nil instead.
Expected devowel("aeiou") to return ""
Returned nil instead.
Expected devowel("google") to return "ggl"
Returned nil instead.
Expected devowel("Daniel") to return "Dnl"
Returned nil instead.
Expected devowel("Dåñîêl") to return "Dñl"
Returned nil instead.
devowel(nil) returned nil
Expected devowel(1.2) to return 1.2
Returned nil instead.
Expected devowel(["a", "Dan"]) to return ["a", "Dan"]
Returned nil instead.
---
Passed: 1
Failed: 8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment