|
1 | 1 | use luhn::*;
|
2 | 2 |
|
3 |
| -fn process_valid_case(number: &str, is_luhn_expected: bool) { |
4 |
| - assert_eq!(is_valid(number), is_luhn_expected); |
5 |
| -} |
6 |
| - |
7 | 3 | #[test]
|
8 | 4 | fn single_digit_strings_can_not_be_valid() {
|
9 |
| - process_valid_case("1", false); |
| 5 | + assert_eq!(is_valid("1"), false); |
10 | 6 | }
|
11 | 7 |
|
12 | 8 | #[test]
|
13 | 9 | #[ignore]
|
14 | 10 | fn a_single_zero_is_invalid() {
|
15 |
| - process_valid_case("0", false); |
| 11 | + assert_eq!(is_valid("0"), false); |
16 | 12 | }
|
17 | 13 |
|
18 | 14 | #[test]
|
19 | 15 | #[ignore]
|
20 | 16 | fn a_simple_valid_sin_that_remains_valid_if_reversed() {
|
21 |
| - process_valid_case("059", true); |
| 17 | + assert_eq!(is_valid("059"), true); |
22 | 18 | }
|
23 | 19 |
|
24 | 20 | #[test]
|
25 | 21 | #[ignore]
|
26 | 22 | fn a_simple_valid_sin_that_becomes_invalid_if_reversed() {
|
27 |
| - process_valid_case("59", true); |
| 23 | + assert_eq!(is_valid("59"), true); |
28 | 24 | }
|
29 | 25 |
|
30 | 26 | #[test]
|
31 | 27 | #[ignore]
|
32 | 28 | fn a_valid_canadian_sin() {
|
33 |
| - process_valid_case("055 444 285", true); |
| 29 | + assert_eq!(is_valid("055 444 285"), true); |
34 | 30 | }
|
35 | 31 |
|
36 | 32 | #[test]
|
37 | 33 | #[ignore]
|
38 | 34 | fn invalid_canadian_sin() {
|
39 |
| - process_valid_case("055 444 286", false); |
| 35 | + assert_eq!(is_valid("055 444 286"), false); |
40 | 36 | }
|
41 | 37 |
|
42 | 38 | #[test]
|
43 | 39 | #[ignore]
|
44 | 40 | fn invalid_credit_card() {
|
45 |
| - process_valid_case("8273 1232 7352 0569", false); |
| 41 | + assert_eq!(is_valid("8273 1232 7352 0569"), false); |
46 | 42 | }
|
47 | 43 |
|
48 | 44 | #[test]
|
49 | 45 | #[ignore]
|
50 |
| -fn valid_number_with_an_even_number_of_digits() { |
51 |
| - process_valid_case("095 245 88", true); |
| 46 | +fn invalid_long_number_with_an_even_remainder() { |
| 47 | + assert_eq!(is_valid("1 2345 6789 1234 5678 9012"), false); |
52 | 48 | }
|
53 | 49 |
|
54 | 50 | #[test]
|
55 | 51 | #[ignore]
|
56 |
| -fn strings_that_contain_non_digits_are_invalid() { |
57 |
| - process_valid_case("055a 444 285", false); |
| 52 | +fn invalid_long_number_with_a_remainder_divisible_by_5() { |
| 53 | + assert_eq!(is_valid("1 2345 6789 1234 5678 9013"), false); |
58 | 54 | }
|
59 | 55 |
|
60 | 56 | #[test]
|
61 | 57 | #[ignore]
|
62 |
| -fn valid_strings_with_punctuation_included_become_invalid() { |
63 |
| - process_valid_case("055-444-285", false); |
| 58 | +fn valid_number_with_an_even_number_of_digits() { |
| 59 | + assert_eq!(is_valid("095 245 88"), true); |
64 | 60 | }
|
65 | 61 |
|
66 | 62 | #[test]
|
67 | 63 | #[ignore]
|
68 |
| -fn symbols_are_invalid() { |
69 |
| - process_valid_case("055£ 444$ 285", false); |
| 64 | +fn valid_number_with_an_odd_number_of_spaces() { |
| 65 | + assert_eq!(is_valid("234 567 891 234"), true); |
70 | 66 | }
|
71 | 67 |
|
72 | 68 | #[test]
|
73 | 69 | #[ignore]
|
74 |
| -fn single_zero_with_space_is_invalid() { |
75 |
| - process_valid_case(" 0", false); |
| 70 | +fn valid_strings_with_a_non_digit_added_at_the_end_become_invalid() { |
| 71 | + assert_eq!(is_valid("059a"), false); |
76 | 72 | }
|
77 | 73 |
|
78 | 74 | #[test]
|
79 | 75 | #[ignore]
|
80 |
| -fn more_than_a_single_zero_is_valid() { |
81 |
| - process_valid_case("0000 0", true); |
| 76 | +fn valid_strings_with_punctuation_included_become_invalid() { |
| 77 | + assert_eq!(is_valid("055-444-285"), false); |
82 | 78 | }
|
83 | 79 |
|
84 | 80 | #[test]
|
85 | 81 | #[ignore]
|
86 |
| -fn input_digit_9_is_correctly_converted_to_output_digit_9() { |
87 |
| - process_valid_case("091", true); |
| 82 | +fn valid_strings_with_symbols_included_become_invalid() { |
| 83 | + assert_eq!(is_valid("055# 444$ 285"), false); |
88 | 84 | }
|
89 | 85 |
|
90 | 86 | #[test]
|
91 | 87 | #[ignore]
|
92 |
| -/// using ASCII value for doubled non-digit isn't allowed |
93 |
| -/// Convert non-digits to their ASCII values and then offset them by 48 sometimes accidentally declare an invalid string to be valid. |
94 |
| -/// This test is designed to avoid that solution. |
95 |
| -fn using_ascii_value_for_doubled_nondigit_isnt_allowed() { |
96 |
| - process_valid_case(":9", false); |
| 88 | +fn single_zero_with_space_is_invalid() { |
| 89 | + assert_eq!(is_valid(" 0"), false); |
97 | 90 | }
|
98 | 91 |
|
99 | 92 | #[test]
|
100 | 93 | #[ignore]
|
101 |
| -/// valid strings with a non-digit added at the end become invalid |
102 |
| -fn valid_strings_with_a_nondigit_added_at_the_end_become_invalid() { |
103 |
| - process_valid_case("059a", false); |
| 94 | +fn more_than_a_single_zero_is_valid() { |
| 95 | + assert_eq!(is_valid("0000 0"), true); |
104 | 96 | }
|
105 | 97 |
|
106 | 98 | #[test]
|
107 | 99 | #[ignore]
|
108 |
| -/// valid strings with symbols included become invalid |
109 |
| -fn valid_strings_with_symbols_included_become_invalid() { |
110 |
| - process_valid_case("055# 444$ 285", false); |
| 100 | +fn input_digit_9_is_correctly_converted_to_output_digit_9() { |
| 101 | + assert_eq!(is_valid("091"), true); |
111 | 102 | }
|
112 | 103 |
|
113 | 104 | #[test]
|
114 | 105 | #[ignore]
|
115 |
| -/// using ASCII value for non-doubled non-digit isn't allowed |
116 |
| -/// Convert non-digits to their ASCII values and then offset them by 48 sometimes accidentally declare an invalid string to be valid. |
117 |
| -/// This test is designed to avoid that solution. |
118 |
| -fn using_ascii_value_for_nondoubled_nondigit_isnt_allowed() { |
119 |
| - process_valid_case("055b 444 285", false); |
| 106 | +fn very_long_input_is_valid() { |
| 107 | + assert_eq!( |
| 108 | + is_valid("9999999999 9999999999 9999999999 9999999999"), |
| 109 | + true |
| 110 | + ); |
120 | 111 | }
|
121 | 112 |
|
122 | 113 | #[test]
|
123 | 114 | #[ignore]
|
124 |
| -/// valid number with an odd number of spaces |
125 |
| -fn valid_number_with_an_odd_number_of_spaces() { |
126 |
| - process_valid_case("234 567 891 234", true); |
| 115 | +fn valid_luhn_with_an_odd_number_of_digits_and_non_zero_first_digit() { |
| 116 | + assert_eq!(is_valid("109"), true); |
| 117 | +} |
| 118 | + |
| 119 | +#[test] |
| 120 | +#[ignore] |
| 121 | +fn using_ascii_value_for_non_doubled_non_digit_isn_t_allowed() { |
| 122 | + assert_eq!(is_valid("055b 444 285"), false); |
127 | 123 | }
|
128 | 124 |
|
129 | 125 | #[test]
|
130 | 126 | #[ignore]
|
131 |
| -/// non-numeric, non-space char in the middle with a sum that's divisible by 10 isn't allowed |
132 |
| -fn invalid_char_in_middle_with_sum_divisible_by_10_isnt_allowed() { |
133 |
| - process_valid_case("59%59", false); |
| 127 | +fn using_ascii_value_for_doubled_non_digit_isn_t_allowed() { |
| 128 | + assert_eq!(is_valid(":9"), false); |
134 | 129 | }
|
135 | 130 |
|
136 | 131 | #[test]
|
137 | 132 | #[ignore]
|
138 |
| -/// unicode numeric characters are not allowed in a otherwise valid number |
139 |
| -fn valid_strings_with_numeric_unicode_characters_become_invalid() { |
140 |
| - process_valid_case("1249①", false); |
| 133 | +fn non_numeric_non_space_char_in_the_middle_with_a_sum_that_s_divisible_by_10_isn_t_allowed() { |
| 134 | + assert_eq!(is_valid("59%59"), false); |
141 | 135 | }
|
0 commit comments