Skip to content

Instantly share code, notes, and snippets.

@mcshakes
Created December 18, 2014 05:54
Show Gist options
  • Save mcshakes/077661f5b5e9cfbdd3ca to your computer and use it in GitHub Desktop.
Save mcshakes/077661f5b5e9cfbdd3ca to your computer and use it in GitHub Desktop.
Luhn_test
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')
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