diff --git a/exercises/practice/luhn/.meta/template.j2 b/exercises/practice/luhn/.meta/template.j2 index e02c696..72148a4 100644 --- a/exercises/practice/luhn/.meta/template.j2 +++ b/exercises/practice/luhn/.meta/template.j2 @@ -1,8 +1,15 @@ {% for case in cases %} func test_{{ case["func_name"] }}(solution_script): - var got = solution_script.{{ case["property"] }}({{ case["input"]["value"] }}) + solution_script.card_num = "{{ case["input"]["value"] }}" + var got = solution_script.{{ case["property"] }}() var want = {{ case["expected"] }} return [got, want] {% endfor %} - +func test_is_valid_can_be_called_repeatedly(solution_script): + # This test was added, because we saw many implementations + # in which the first call to valid() worked, but the + # second call failed. + solution_script.card_num = "055 444 285" + return [solution_script.valid(), true] + return [solution_script.valid(), true] diff --git a/exercises/practice/luhn/luhn_test.gd b/exercises/practice/luhn/luhn_test.gd index 304e335..0e415cb 100644 --- a/exercises/practice/luhn/luhn_test.gd +++ b/exercises/practice/luhn/luhn_test.gd @@ -1,111 +1,155 @@ func test_single_digit_strings_can_not_be_valid(solution_script): solution_script.card_num = "1" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_a_single_zero_is_invalid(solution_script): solution_script.card_num = "0" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_a_simple_valid_sin_that_remains_valid_if_reversed(solution_script): solution_script.card_num = "059" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_a_simple_valid_sin_that_becomes_invalid_if_reversed(solution_script): solution_script.card_num = "59" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_a_valid_canadian_sin(solution_script): solution_script.card_num = "055 444 285" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_invalid_canadian_sin(solution_script): solution_script.card_num = "055 444 286" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_invalid_credit_card(solution_script): solution_script.card_num = "8273 1232 7352 0569" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_invalid_long_number_with_an_even_remainder(solution_script): solution_script.card_num = "1 2345 6789 1234 5678 9012" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_invalid_long_number_with_a_remainder_divisible_by_5(solution_script): solution_script.card_num = "1 2345 6789 1234 5678 9013" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_valid_number_with_an_even_number_of_digits(solution_script): solution_script.card_num = "095 245 88" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_valid_number_with_an_odd_number_of_spaces(solution_script): solution_script.card_num = "234 567 891 234" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_valid_strings_with_a_non_digit_added_at_the_end_become_invalid(solution_script): solution_script.card_num = "059a" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_valid_strings_with_punctuation_included_become_invalid(solution_script): solution_script.card_num = "055-444-285" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_valid_strings_with_symbols_included_become_invalid(solution_script): solution_script.card_num = "055# 444$ 285" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_single_zero_with_space_is_invalid(solution_script): solution_script.card_num = " 0" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_more_than_a_single_zero_is_valid(solution_script): solution_script.card_num = "0000 0" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_input_digit_9_is_correctly_converted_to_output_digit_9(solution_script): solution_script.card_num = "091" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_very_long_input_is_valid(solution_script): solution_script.card_num = "9999999999 9999999999 9999999999 9999999999" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_valid_luhn_with_an_odd_number_of_digits_and_non_zero_first_digit(solution_script): solution_script.card_num = "109" - return [solution_script.valid(), true] + var got = solution_script.valid() + var want = true + return [got, want] func test_using_ascii_value_for_non_doubled_non_digit_isn_t_allowed(solution_script): solution_script.card_num = "055b 444 285" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_using_ascii_value_for_doubled_non_digit_isn_t_allowed(solution_script): solution_script.card_num = ":9" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_non_numeric_non_space_char_in_the_middle_with_a_sum_that_s_divisible_by_10_isn_t_allowed(solution_script): solution_script.card_num = "59%59" - return [solution_script.valid(), false] + var got = solution_script.valid() + var want = false + return [got, want] func test_is_valid_can_be_called_repeatedly(solution_script):