trackler 2.2.1.86 → 2.2.1.87

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/reverse-string/metadata.yml +0 -1
  4. data/tracks/bash/CONTRIBUTING.md +129 -28
  5. data/tracks/bash/config/exercise_readme.go.tmpl +10 -4
  6. data/tracks/bash/exercises/acronym/README.md +8 -11
  7. data/tracks/bash/exercises/acronym/{acronym_tests.sh → acronym_test.sh} +0 -0
  8. data/tracks/bash/exercises/anagram/README.md +6 -1
  9. data/tracks/bash/exercises/anagram/anagram_test.sh +1 -1
  10. data/tracks/bash/exercises/armstrong-numbers/README.md +10 -2
  11. data/tracks/bash/exercises/atbash-cipher/README.md +6 -6
  12. data/tracks/bash/exercises/bob/README.md +8 -1
  13. data/tracks/bash/exercises/collatz-conjecture/README.md +11 -2
  14. data/tracks/bash/exercises/collatz-conjecture/{collatz_test.sh → collatz_conjecture_test.sh} +6 -6
  15. data/tracks/bash/exercises/difference-of-squares/README.md +6 -1
  16. data/tracks/bash/exercises/error-handling/README.md +13 -5
  17. data/tracks/bash/exercises/error-handling/error_handling_test.sh +18 -22
  18. data/tracks/bash/exercises/error-handling/example.sh +7 -6
  19. data/tracks/bash/exercises/gigasecond/.meta/hints.md +0 -5
  20. data/tracks/bash/exercises/gigasecond/README.md +36 -1
  21. data/tracks/bash/exercises/grains/README.md +10 -2
  22. data/tracks/bash/exercises/hamming/README.md +6 -1
  23. data/tracks/bash/exercises/hello-world/README.md +7 -2
  24. data/tracks/bash/exercises/leap/README.md +7 -2
  25. data/tracks/bash/exercises/luhn/README.md +7 -2
  26. data/tracks/bash/exercises/nucleotide-count/README.md +13 -22
  27. data/tracks/bash/exercises/pangram/README.md +7 -2
  28. data/tracks/bash/exercises/phone-number/README.md +10 -4
  29. data/tracks/bash/exercises/raindrops/README.md +6 -1
  30. data/tracks/bash/exercises/reverse-string/README.md +11 -2
  31. data/tracks/bash/exercises/rna-transcription/README.md +7 -2
  32. data/tracks/bash/exercises/roman-numerals/README.md +11 -2
  33. data/tracks/bash/exercises/triangle/README.md +5 -4
  34. data/tracks/bash/exercises/two-fer/README.md +7 -9
  35. data/tracks/bash/exercises/word-count/README.md +6 -2
  36. data/tracks/bash/exercises/word-count/example.sh +22 -13
  37. data/tracks/bash/scripts/canonical_data_check.sh +112 -0
  38. data/tracks/c/exercises/acronym/src/{example.h → acronym.h} +0 -0
  39. data/tracks/c/exercises/gigasecond/.meta/hints.md +124 -0
  40. data/tracks/c/exercises/gigasecond/README.md +126 -0
  41. data/tracks/c/exercises/isogram/src/{example.h → isogram.h} +0 -0
  42. data/tracks/c/exercises/meetup/.meta/hints.md +124 -0
  43. data/tracks/c/exercises/meetup/README.md +142 -12
  44. data/tracks/c/exercises/pangram/src/{example.h → pangram.h} +0 -0
  45. data/tracks/c/exercises/space-age/.meta/hints.md +124 -0
  46. data/tracks/c/exercises/space-age/README.md +127 -2
  47. data/tracks/elisp/bin/test-examples +11 -14
  48. data/tracks/elisp/config.json +9 -1
  49. data/tracks/elisp/exercises/acronym/README.md +13 -0
  50. data/tracks/elisp/exercises/acronym/acronym-test.el +28 -0
  51. data/tracks/elisp/exercises/acronym/acronym.el +11 -0
  52. data/tracks/elisp/exercises/acronym/example.el +14 -0
  53. data/tracks/elisp/exercises/bob/example.el +1 -3
  54. data/tracks/elisp/exercises/hamming/README.md +2 -0
  55. data/tracks/elisp/exercises/hamming/hamming-test.el +35 -12
  56. data/tracks/elisp/exercises/hamming/hamming.el +0 -3
  57. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +206 -132
  58. data/tracks/fsharp/exercises/custom-set/Example.fs +2 -0
  59. data/tracks/fsharp/generators/Generators.fs +61 -0
  60. data/tracks/go/config.json +25 -2
  61. data/tracks/go/exercises/acronym/acronym_test.go +8 -0
  62. data/tracks/go/exercises/alphametics/.meta/gen.go +72 -0
  63. data/tracks/go/exercises/alphametics/.meta/hints.md +38 -0
  64. data/tracks/go/exercises/alphametics/README.md +93 -0
  65. data/tracks/go/exercises/alphametics/alphametics_test.go +33 -0
  66. data/tracks/go/exercises/alphametics/cases_test.go +59 -0
  67. data/tracks/go/exercises/alphametics/example.go +212 -0
  68. data/tracks/go/exercises/atbash-cipher/.meta/gen.go +6 -4
  69. data/tracks/go/exercises/atbash-cipher/cases_test.go +2 -2
  70. data/tracks/go/exercises/change/.meta/gen.go +7 -5
  71. data/tracks/go/exercises/change/cases_test.go +2 -2
  72. data/tracks/go/exercises/collatz-conjecture/.meta/gen.go +5 -3
  73. data/tracks/go/exercises/collatz-conjecture/cases_test.go +2 -2
  74. data/tracks/go/exercises/connect/.meta/gen.go +5 -3
  75. data/tracks/go/exercises/connect/cases_test.go +2 -2
  76. data/tracks/go/exercises/flatten-array/.meta/gen.go +5 -3
  77. data/tracks/go/exercises/flatten-array/cases_test.go +2 -2
  78. data/tracks/go/exercises/meetup/.meta/gen.go +19 -8
  79. data/tracks/go/exercises/meetup/cases_test.go +2 -2
  80. data/tracks/go/exercises/simple-linked-list/README.md +47 -0
  81. data/tracks/go/exercises/simple-linked-list/example.go +74 -0
  82. data/tracks/go/exercises/simple-linked-list/linked_list_test.go +210 -0
  83. data/tracks/idris/config.json +2 -2
  84. data/tracks/java/exercises/all-your-base/.meta/src/reference/java/BaseConverter.java +1 -5
  85. data/tracks/java/exercises/all-your-base/.meta/version +1 -1
  86. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +34 -10
  87. data/tracks/java/exercises/bob/README.md +2 -0
  88. data/tracks/java/exercises/kindergarten-garden/.meta/version +1 -0
  89. data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +0 -55
  90. data/tracks/java/exercises/meetup/.meta/version +1 -0
  91. data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +32 -0
  92. data/tracks/java/exercises/parallel-letter-frequency/README.md +1 -0
  93. data/tracks/java/exercises/proverb/README.md +16 -10
  94. data/tracks/java/exercises/rail-fence-cipher/README.md +5 -6
  95. data/tracks/java/exercises/two-fer/README.md +1 -1
  96. data/tracks/java/exercises/word-search/.meta/version +1 -1
  97. data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +240 -2
  98. data/tracks/javascript/.eslintignore +0 -1
  99. data/tracks/javascript/exercises/palindrome-products/example.js +3 -3
  100. data/tracks/kotlin/docs/INSTALLATION.md +77 -68
  101. data/tracks/kotlin/docs/TESTS.md +41 -39
  102. data/tracks/perl6/exercises/acronym/acronym.t +20 -8
  103. data/tracks/perl6/exercises/acronym/example.yaml +1 -1
  104. data/tracks/perl6/exercises/all-your-base/all-your-base.t +108 -66
  105. data/tracks/perl6/exercises/all-your-base/example.yaml +2 -2
  106. data/tracks/perl6/exercises/allergies/allergies.t +39 -15
  107. data/tracks/perl6/exercises/allergies/example.yaml +2 -2
  108. data/tracks/perl6/exercises/anagram/anagram.t +73 -40
  109. data/tracks/perl6/exercises/anagram/example.yaml +1 -1
  110. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +38 -15
  111. data/tracks/perl6/exercises/atbash-cipher/example.yaml +1 -1
  112. data/tracks/perl6/exercises/bob/bob.t +77 -27
  113. data/tracks/perl6/exercises/bob/example.yaml +1 -1
  114. data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
  115. data/tracks/perl6/exercises/flatten-array/flatten-array.t +20 -8
  116. data/tracks/perl6/exercises/luhn/example.yaml +1 -1
  117. data/tracks/perl6/exercises/luhn/luhn.t +42 -16
  118. data/tracks/perl6/exercises/roman-numerals/README.md +68 -0
  119. data/tracks/php/exercises/gigasecond/gigasecond_test.php +1 -1
  120. data/tracks/python/docs/ABOUT.md +2 -2
  121. metadata +27 -10
  122. data/tracks/bash/docs/EXERCISE_README_INSERT.md +0 -3
  123. data/tracks/bash/exercises/word-count/example.awk +0 -12
  124. data/tracks/java/exercises/alphametics/src/main/java/.keep +0 -0
@@ -3,7 +3,7 @@ version: 1
3
3
  plan: 14
4
4
  imports: '&encode &decode'
5
5
  tests: |-
6
- is .<phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cases>».Array.flat;
6
+ is .<input><phrase>.&::(.<property>), |.<expected description> for $c-data<cases>»<cases>».Array.flat;
7
7
 
8
8
  unit: module
9
9
  example: |-
@@ -30,163 +30,213 @@ subtest 'Class methods', {
30
30
 
31
31
  my $c-data = from-json $=pod.pop.contents;
32
32
  # Go through the cases and check that Bob gives us the correct responses.
33
- is ::($exercise).?hey(.<input>), |.<expected description> for @($c-data<cases>);
33
+ is ::($exercise).?hey(.<input><heyBob>), |.<expected description> for @($c-data<cases>);
34
34
 
35
35
  =head2 Canonical Data
36
36
  =begin code
37
37
 
38
38
  {
39
39
  "exercise": "bob",
40
- "version": "1.1.0",
40
+ "version": "1.2.0",
41
41
  "cases": [
42
42
  {
43
43
  "description": "stating something",
44
44
  "property": "response",
45
- "input": "Tom-ay-to, tom-aaaah-to.",
45
+ "input": {
46
+ "heyBob": "Tom-ay-to, tom-aaaah-to."
47
+ },
46
48
  "expected": "Whatever."
47
49
  },
48
50
  {
49
51
  "description": "shouting",
50
52
  "property": "response",
51
- "input": "WATCH OUT!",
53
+ "input": {
54
+ "heyBob": "WATCH OUT!"
55
+ },
52
56
  "expected": "Whoa, chill out!"
53
57
  },
54
58
  {
55
59
  "description": "shouting gibberish",
56
60
  "property": "response",
57
- "input": "FCECDFCAAB",
61
+ "input": {
62
+ "heyBob": "FCECDFCAAB"
63
+ },
58
64
  "expected": "Whoa, chill out!"
59
65
  },
60
66
  {
61
67
  "description": "asking a question",
62
68
  "property": "response",
63
- "input": "Does this cryogenic chamber make me look fat?",
69
+ "input": {
70
+ "heyBob": "Does this cryogenic chamber make me look fat?"
71
+ },
64
72
  "expected": "Sure."
65
73
  },
66
74
  {
67
75
  "description": "asking a numeric question",
68
76
  "property": "response",
69
- "input": "You are, what, like 15?",
77
+ "input": {
78
+ "heyBob": "You are, what, like 15?"
79
+ },
70
80
  "expected": "Sure."
71
81
  },
72
82
  {
73
83
  "description": "asking gibberish",
74
84
  "property": "response",
75
- "input": "fffbbcbeab?",
85
+ "input": {
86
+ "heyBob": "fffbbcbeab?"
87
+ },
76
88
  "expected": "Sure."
77
89
  },
78
90
  {
79
91
  "description": "talking forcefully",
80
92
  "property": "response",
81
- "input": "Let's go make out behind the gym!",
93
+ "input": {
94
+ "heyBob": "Let's go make out behind the gym!"
95
+ },
82
96
  "expected": "Whatever."
83
97
  },
84
98
  {
85
99
  "description": "using acronyms in regular speech",
86
100
  "property": "response",
87
- "input": "It's OK if you don't want to go to the DMV.",
101
+ "input": {
102
+ "heyBob": "It's OK if you don't want to go to the DMV."
103
+ },
88
104
  "expected": "Whatever."
89
105
  },
90
106
  {
91
107
  "description": "forceful question",
92
108
  "property": "response",
93
- "input": "WHAT THE HELL WERE YOU THINKING?",
109
+ "input": {
110
+ "heyBob": "WHAT THE HELL WERE YOU THINKING?"
111
+ },
94
112
  "expected": "Calm down, I know what I'm doing!"
95
113
  },
96
114
  {
97
115
  "description": "shouting numbers",
98
116
  "property": "response",
99
- "input": "1, 2, 3 GO!",
117
+ "input": {
118
+ "heyBob": "1, 2, 3 GO!"
119
+ },
100
120
  "expected": "Whoa, chill out!"
101
121
  },
102
122
  {
103
123
  "description": "only numbers",
104
124
  "property": "response",
105
- "input": "1, 2, 3",
125
+ "input": {
126
+ "heyBob": "1, 2, 3"
127
+ },
106
128
  "expected": "Whatever."
107
129
  },
108
130
  {
109
131
  "description": "question with only numbers",
110
132
  "property": "response",
111
- "input": "4?",
133
+ "input": {
134
+ "heyBob": "4?"
135
+ },
112
136
  "expected": "Sure."
113
137
  },
114
138
  {
115
139
  "description": "shouting with special characters",
116
140
  "property": "response",
117
- "input": "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!",
141
+ "input": {
142
+ "heyBob": "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!"
143
+ },
118
144
  "expected": "Whoa, chill out!"
119
145
  },
120
146
  {
121
147
  "description": "shouting with no exclamation mark",
122
148
  "property": "response",
123
- "input": "I HATE YOU",
149
+ "input": {
150
+ "heyBob": "I HATE YOU"
151
+ },
124
152
  "expected": "Whoa, chill out!"
125
153
  },
126
154
  {
127
155
  "description": "statement containing question mark",
128
156
  "property": "response",
129
- "input": "Ending with ? means a question.",
157
+ "input": {
158
+ "heyBob": "Ending with ? means a question."
159
+ },
130
160
  "expected": "Whatever."
131
161
  },
132
162
  {
133
163
  "description": "non-letters with question",
134
164
  "property": "response",
135
- "input": ":) ?",
165
+ "input": {
166
+ "heyBob": ":) ?"
167
+ },
136
168
  "expected": "Sure."
137
169
  },
138
170
  {
139
171
  "description": "prattling on",
140
172
  "property": "response",
141
- "input": "Wait! Hang on. Are you going to be OK?",
173
+ "input": {
174
+ "heyBob": "Wait! Hang on. Are you going to be OK?"
175
+ },
142
176
  "expected": "Sure."
143
177
  },
144
178
  {
145
179
  "description": "silence",
146
180
  "property": "response",
147
- "input": "",
181
+ "input": {
182
+ "heyBob": ""
183
+ },
148
184
  "expected": "Fine. Be that way!"
149
185
  },
150
186
  {
151
187
  "description": "prolonged silence",
152
188
  "property": "response",
153
- "input": " ",
189
+ "input": {
190
+ "heyBob": " "
191
+ },
154
192
  "expected": "Fine. Be that way!"
155
193
  },
156
194
  {
157
195
  "description": "alternate silence",
158
196
  "property": "response",
159
- "input": "\t\t\t\t\t\t\t\t\t\t",
197
+ "input": {
198
+ "heyBob": "\t\t\t\t\t\t\t\t\t\t"
199
+ },
160
200
  "expected": "Fine. Be that way!"
161
201
  },
162
202
  {
163
203
  "description": "multiple line question",
164
204
  "property": "response",
165
- "input": "\nDoes this cryogenic chamber make me look fat?\nno",
205
+ "input": {
206
+ "heyBob": "\nDoes this cryogenic chamber make me look fat?\nno"
207
+ },
166
208
  "expected": "Whatever."
167
209
  },
168
210
  {
169
211
  "description": "starting with whitespace",
170
212
  "property": "response",
171
- "input": " hmmmmmmm...",
213
+ "input": {
214
+ "heyBob": " hmmmmmmm..."
215
+ },
172
216
  "expected": "Whatever."
173
217
  },
174
218
  {
175
219
  "description": "ending with whitespace",
176
220
  "property": "response",
177
- "input": "Okay if like my spacebar quite a bit? ",
221
+ "input": {
222
+ "heyBob": "Okay if like my spacebar quite a bit? "
223
+ },
178
224
  "expected": "Sure."
179
225
  },
180
226
  {
181
227
  "description": "other whitespace",
182
228
  "property": "response",
183
- "input": "\n\r \t",
229
+ "input": {
230
+ "heyBob": "\n\r \t"
231
+ },
184
232
  "expected": "Fine. Be that way!"
185
233
  },
186
234
  {
187
235
  "description": "non-question ending with whitespace",
188
236
  "property": "response",
189
- "input": "This is a statement ending with whitespace ",
237
+ "input": {
238
+ "heyBob": "This is a statement ending with whitespace "
239
+ },
190
240
  "expected": "Whatever."
191
241
  }
192
242
  ]
@@ -4,7 +4,7 @@ plan: 28
4
4
  methods: hey
5
5
  tests: |-
6
6
  # Go through the cases and check that Bob gives us the correct responses.
7
- is ::($exercise).?hey(.<input>), |.<expected description> for @($c-data<cases>);
7
+ is ::($exercise).?hey(.<input><heyBob>), |.<expected description> for @($c-data<cases>);
8
8
 
9
9
  exercise_comment: The name of this exercise.
10
10
  module_comment: The name of the module file to be loaded.
@@ -3,7 +3,7 @@ version: 1
3
3
  plan: 8
4
4
  imports: '&flatten-array'
5
5
  tests: |-
6
- is-deeply flatten-array(.<input>), |.<expected description> for @($c-data<cases>);
6
+ is-deeply flatten-array(.<input><array>), |.<expected description> for @($c-data<cases>);
7
7
 
8
8
  unit: module
9
9
  example: |-
@@ -22,49 +22,61 @@ if ::($exercise).^ver !~~ $version {
22
22
  require ::($module) <&flatten-array>;
23
23
 
24
24
  my $c-data = from-json $=pod.pop.contents;
25
- is-deeply flatten-array(.<input>), |.<expected description> for @($c-data<cases>);
25
+ is-deeply flatten-array(.<input><array>), |.<expected description> for @($c-data<cases>);
26
26
 
27
27
  =head2 Canonical Data
28
28
  =begin code
29
29
 
30
30
  {
31
31
  "exercise": "flatten-array",
32
- "version": "1.1.0",
32
+ "version": "1.2.0",
33
33
  "cases": [
34
34
  {
35
35
  "description": "no nesting",
36
36
  "property": "flatten",
37
- "input": [0, 1, 2],
37
+ "input": {
38
+ "array": [0, 1, 2]
39
+ },
38
40
  "expected": [0, 1, 2]
39
41
  },
40
42
  {
41
43
  "description": "flattens array with just integers present",
42
44
  "property": "flatten",
43
- "input": [1, [2, 3, 4, 5, 6, 7], 8],
45
+ "input": {
46
+ "array": [1, [2, 3, 4, 5, 6, 7], 8]
47
+ },
44
48
  "expected": [1, 2, 3, 4, 5, 6, 7, 8]
45
49
  },
46
50
  {
47
51
  "description": "5 level nesting",
48
52
  "property": "flatten",
49
- "input": [0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2],
53
+ "input": {
54
+ "array": [0, 2, [[2, 3], 8, 100, 4, [[[50]]]], -2]
55
+ },
50
56
  "expected": [0, 2, 2, 3, 8, 100, 4, 50, -2]
51
57
  },
52
58
  {
53
59
  "description": "6 level nesting",
54
60
  "property": "flatten",
55
- "input": [1, [2, [[3]], [4, [[5]]], 6, 7], 8],
61
+ "input": {
62
+ "array": [1, [2, [[3]], [4, [[5]]], 6, 7], 8]
63
+ },
56
64
  "expected": [1, 2, 3, 4, 5, 6, 7, 8]
57
65
  },
58
66
  {
59
67
  "description": "6 level nest list with null values",
60
68
  "property": "flatten",
61
- "input": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2],
69
+ "input": {
70
+ "array": [0, 2, [[2, 3], 8, [[100]], null, [[null]]], -2]
71
+ },
62
72
  "expected": [0, 2, 2, 3, 8, 100, -2]
63
73
  },
64
74
  {
65
75
  "description": "all values in nested list are null",
66
76
  "property": "flatten",
67
- "input": [null, [[[null]]], null, null, [[null, null], null], null],
77
+ "input": {
78
+ "array": [null, [[[null]]], null, null, [[null, null], null], null]
79
+ },
68
80
  "expected": []
69
81
  }
70
82
  ]
@@ -4,7 +4,7 @@ plan: 15
4
4
  imports: '&is-luhn-valid'
5
5
  tests: |-
6
6
  for $c-data<cases>.values {
7
- given is-luhn-valid .<input> -> $result {
7
+ given is-luhn-valid .<input><value> -> $result {
8
8
  subtest .<description>, {
9
9
  plan 2;
10
10
  isa-ok $result, Bool;
@@ -23,7 +23,7 @@ require ::($module) <&is-luhn-valid>;
23
23
 
24
24
  my $c-data = from-json $=pod.pop.contents;
25
25
  for $c-data<cases>.values {
26
- given is-luhn-valid .<input> -> $result {
26
+ given is-luhn-valid .<input><value> -> $result {
27
27
  subtest .<description>, {
28
28
  plan 2;
29
29
  isa-ok $result, Bool;
@@ -37,84 +37,110 @@ for $c-data<cases>.values {
37
37
 
38
38
  {
39
39
  "exercise": "luhn",
40
- "version": "1.0.0",
40
+ "version": "1.1.0",
41
41
  "cases": [
42
42
  {
43
43
  "description": "single digit strings can not be valid",
44
44
  "property": "valid",
45
- "input": "1",
45
+ "input": {
46
+ "value": "1"
47
+ },
46
48
  "expected": false
47
49
  },
48
50
  {
49
- "description": "A single zero is invalid",
51
+ "description": "a single zero is invalid",
50
52
  "property": "valid",
51
- "input": "0",
53
+ "input": {
54
+ "value": "0"
55
+ },
52
56
  "expected": false
53
57
  },
54
58
  {
55
59
  "description": "a simple valid SIN that remains valid if reversed",
56
60
  "property": "valid",
57
- "input": "059",
61
+ "input": {
62
+ "value": "059"
63
+ },
58
64
  "expected": true
59
65
  },
60
66
  {
61
67
  "description": "a simple valid SIN that becomes invalid if reversed",
62
68
  "property": "valid",
63
- "input": "59",
69
+ "input": {
70
+ "value": "59"
71
+ },
64
72
  "expected": true
65
73
  },
66
74
  {
67
75
  "description": "a valid Canadian SIN",
68
76
  "property": "valid",
69
- "input": "055 444 285",
77
+ "input": {
78
+ "value": "055 444 285"
79
+ },
70
80
  "expected": true
71
81
  },
72
82
  {
73
83
  "description": "invalid Canadian SIN",
74
84
  "property": "valid",
75
- "input": "055 444 286",
85
+ "input": {
86
+ "value": "055 444 286"
87
+ },
76
88
  "expected": false
77
89
  },
78
90
  {
79
91
  "description": "invalid credit card",
80
92
  "property": "valid",
81
- "input": "8273 1232 7352 0569",
93
+ "input": {
94
+ "value": "8273 1232 7352 0569"
95
+ },
82
96
  "expected": false
83
97
  },
84
98
  {
85
99
  "description": "valid strings with a non-digit included become invalid",
86
100
  "property": "valid",
87
- "input": "055a 444 285",
101
+ "input": {
102
+ "value": "055a 444 285"
103
+ },
88
104
  "expected": false
89
105
  },
90
106
  {
91
107
  "description": "valid strings with punctuation included become invalid",
92
108
  "property": "valid",
93
- "input": "055-444-285",
109
+ "input": {
110
+ "value": "055-444-285"
111
+ },
94
112
  "expected": false
95
113
  },
96
114
  {
97
115
  "description": "valid strings with symbols included become invalid",
98
116
  "property": "valid",
99
- "input": "055£ 444$ 285",
117
+ "input": {
118
+ "value": "055£ 444$ 285"
119
+ },
100
120
  "expected": false
101
121
  },
102
122
  {
103
123
  "description": "single zero with space is invalid",
104
124
  "property": "valid",
105
- "input": " 0",
125
+ "input": {
126
+ "value": " 0"
127
+ },
106
128
  "expected": false
107
129
  },
108
130
  {
109
131
  "description": "more than a single zero is valid",
110
132
  "property": "valid",
111
- "input": "0000 0",
133
+ "input": {
134
+ "value": "0000 0"
135
+ },
112
136
  "expected": true
113
137
  },
114
138
  {
115
139
  "description": "input digit 9 is correctly converted to output digit 9",
116
140
  "property": "valid",
117
- "input": "091",
141
+ "input": {
142
+ "value": "091"
143
+ },
118
144
  "expected": true
119
145
  }
120
146
  ]