Created
December 18, 2014 05:54
-
-
Save mcshakes/077661f5b5e9cfbdd3ca to your computer and use it in GitHub Desktop.
Luhn_test
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 CreditCheck | |
def validate(digits) | |
if digits.empty? | |
false | |
else | |
chars = digits.chars | |
numbers = [] | |
chars.each {|char| numbers << char.to_i} | |
numbers.reverse! | |
multiplied_values = [] | |
count = 1 | |
numbers.each do |num| | |
if count % 2 == 0 | |
multiplied_values << numbers * 2 | |
else | |
multiplied_values << numbers | |
end | |
count = count + 1 | |
end | |
doubled = [] | |
multiplied_values.map do |num| | |
if num > 9 | |
doubled << num -9 | |
else | |
doubled << num | |
end | |
end | |
summed_up = 0 | |
doubled.each {|num| summed_up += num} | |
validity = sum % 10 == 0 | |
if valid | |
puts "The number is valid!" | |
else | |
puts "The number is invalid!" | |
end | |
end | |
end | |
end | |
test_card = CreditCheck.new | |
test_card.validate('5541808923795240') |
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 'minitest/autorun' | |
require 'minitest/pride' | |
require_relative 'credit_check' | |
class CreditCheckTest < Minitest::Test | |
def test_credit_check_exists | |
checker = CreditCheck.new | |
assert checker | |
end | |
def test_empty_string_is_invalid | |
checker = CreditCheck.new | |
result = checker.validate("") | |
assert_equal false, result | |
end | |
def test_zero_is_valid | |
checker = CreditCheck.new | |
result = checker.validate("0") | |
assert_equal true, result | |
end | |
def test_it_returns_false_for_digits_not_divisible_by_ten | |
checker = CreditCheck.new | |
result = checker.validate("1") | |
assert_equal false, result | |
end | |
def test_larger_digits_are_true_if_divisible_by_ten | |
checker = CreditCheck.new | |
result = checker.validate("42") | |
assert_equal true, result | |
end | |
def test_longer_digits_return_true_as_long_as_divisible | |
checker = CreditCheck.new | |
result = checker.validate("42424242424242") | |
assert_equal true, result | |
end | |
def test_numbers_not_divisible_return_false | |
checker = CreditCheck.new | |
result = checker.validate("58") | |
assert_equal false, result | |
end | |
def test_actual_card_numbers | |
checker = CreditCheck.new | |
result = checker.validate('5541808923795240') | |
assert_equal true, result | |
result = checker.validate('4024007136512380') | |
assert_equal true, result | |
end | |
def test_actual_card_numbers_return_false | |
skip | |
checker = CreditCheck.new | |
result = checker.validate('5541801923795240') | |
assert_equal false, result | |
result = checker.validate('6011797668868728') | |
assert_equal false, result | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment