trackler 2.0.8.20 → 2.0.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/csharp/.travis.yml +1 -4
- data/tracks/csharp/exercises/accumulate/HINTS.md +3 -0
- data/tracks/csharp/exercises/allergies/HINTS.md +3 -0
- data/tracks/csharp/exercises/alphametics/HINTS.md +5 -0
- data/tracks/csharp/exercises/bank-account/HINTS.md +3 -0
- data/tracks/csharp/exercises/beer-song/HINTS.md +2 -0
- data/tracks/csharp/exercises/clock/HINTS.md +4 -0
- data/tracks/csharp/exercises/custom-set/HINTS.md +4 -0
- data/tracks/csharp/exercises/difference-of-squares/HINTS.md +4 -0
- data/tracks/csharp/exercises/diffie-hellman/HINTS.md +3 -0
- data/tracks/csharp/exercises/food-chain/HINTS.md +2 -0
- data/tracks/csharp/exercises/forth/HINTS.md +2 -0
- data/tracks/csharp/exercises/hangman/HINTS.md +3 -0
- data/tracks/csharp/exercises/leap/Example.cs +2 -2
- data/tracks/csharp/exercises/leap/Leap.cs +2 -2
- data/tracks/csharp/exercises/leap/LeapTest.cs +4 -4
- data/tracks/csharp/exercises/sgf-parsing/HINTS.md +2 -0
- data/tracks/csharp/exercises/simple-linked-list/HINTS.md +3 -0
- data/tracks/csharp/exercises/sublist/HINTS.md +3 -0
- data/tracks/csharp/exercises/twelve-days/HINTS.md +2 -0
- data/tracks/csharp/exercises/variable-length-quantity/HINTS.md +3 -0
- data/tracks/csharp/exercises/wordy/HINTS.md +2 -0
- data/tracks/csharp/generators/BooleanTestMethod.cs +36 -0
- data/tracks/csharp/generators/Exercises/Exercise.cs +13 -2
- data/tracks/csharp/generators/Exercises/LeapExercise.cs +3 -26
- data/tracks/csharp/generators/Program.cs +7 -8
- data/tracks/csharp/generators/TestClassNameTransformer.cs +9 -0
- data/tracks/csharp/generators/TestClassRenderer.cs +1 -1
- data/tracks/csharp/generators/TestedClassNameTransformer.cs +11 -0
- data/tracks/csharp/generators/TestedMethodNameTransformer.cs +9 -0
- data/tracks/csharp/generators/To.cs +3 -0
- data/tracks/elixir/config.json +8 -0
- data/tracks/elixir/exercises/ocr-numbers/example.exs +47 -0
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers.exs +10 -0
- data/tracks/elixir/exercises/ocr-numbers/ocr_numbers_test.exs +254 -0
- data/tracks/go/exercises/say/example.go +2 -0
- data/tracks/go/exercises/say/say_test.go +8 -0
- data/tracks/go/exercises/scrabble-score/scrabble_score_test.go +6 -4
- data/tracks/go/exercises/secret-handshake/secret_handshake_test.go +4 -1
- data/tracks/go/exercises/sieve/example.go +2 -0
- data/tracks/go/exercises/sieve/sieve_test.go +8 -0
- data/tracks/go/exercises/simple-cipher/example.go +3 -1
- data/tracks/go/exercises/simple-cipher/simple_cipher_test.go +8 -0
- data/tracks/go/exercises/sum-of-multiples/example.go +2 -0
- data/tracks/go/exercises/sum-of-multiples/sum_of_multiples_test.go +8 -0
- data/tracks/go/exercises/tournament/tournament_test.go +3 -1
- data/tracks/go/exercises/transpose/example.go +2 -0
- data/tracks/go/exercises/transpose/transpose_test.go +8 -0
- data/tracks/go/exercises/tree-building/tree_test.go +6 -6
- data/tracks/go/exercises/triangle/triangle_test.go +6 -6
- data/tracks/haskell/exercises/atbash-cipher/src/Atbash.hs +2 -2
- data/tracks/haskell/exercises/largest-series-product/src/Series.hs +1 -1
- data/tracks/haskell/exercises/linked-list/src/Deque.hs +4 -4
- data/tracks/haskell/exercises/list-ops/src/ListOps.hs +7 -7
- data/tracks/haskell/exercises/luhn/src/Luhn.hs +10 -5
- data/tracks/haskell/exercises/matrix/src/Matrix.hs +10 -10
- data/tracks/haskell/exercises/minesweeper/src/Minesweeper.hs +1 -1
- data/tracks/haskell/exercises/nth-prime/src/Prime.hs +2 -1
- data/tracks/haskell/exercises/nucleotide-count/src/DNA.hs +1 -1
- data/tracks/haskell/exercises/ocr-numbers/src/OCR.hs +1 -1
- data/tracks/haskell/exercises/pascals-triangle/src/Triangle.hs +1 -1
- data/tracks/haskell/exercises/phone-number/src/Phone.hs +1 -1
- data/tracks/haskell/exercises/pig-latin/src/PigLatin.hs +1 -1
- data/tracks/haskell/exercises/prime-factors/src/PrimeFactors.hs +1 -1
- data/tracks/kotlin/exercises/_template/build.gradle +1 -1
- data/tracks/kotlin/exercises/accumulate/build.gradle +1 -1
- data/tracks/kotlin/exercises/acronym/build.gradle +1 -1
- data/tracks/kotlin/exercises/allergies/build.gradle +1 -1
- data/tracks/kotlin/exercises/anagram/build.gradle +1 -1
- data/tracks/kotlin/exercises/atbash-cipher/build.gradle +1 -1
- data/tracks/kotlin/exercises/beer-song/build.gradle +1 -1
- data/tracks/kotlin/exercises/binary/build.gradle +1 -1
- data/tracks/kotlin/exercises/binary-search/build.gradle +1 -1
- data/tracks/kotlin/exercises/bob/build.gradle +1 -1
- data/tracks/kotlin/exercises/bracket-push/build.gradle +1 -1
- data/tracks/kotlin/exercises/change/build.gradle +1 -1
- data/tracks/kotlin/exercises/difference-of-squares/build.gradle +1 -1
- data/tracks/kotlin/exercises/etl/build.gradle +1 -1
- data/tracks/kotlin/exercises/flatten-array/build.gradle +1 -1
- data/tracks/kotlin/exercises/gigasecond/build.gradle +1 -1
- data/tracks/kotlin/exercises/grade-school/build.gradle +1 -1
- data/tracks/kotlin/exercises/hamming/build.gradle +1 -1
- data/tracks/kotlin/exercises/hello-world/build.gradle +1 -1
- data/tracks/kotlin/exercises/hexadecimal/build.gradle +1 -1
- data/tracks/kotlin/exercises/isogram/build.gradle +1 -1
- data/tracks/kotlin/exercises/largest-series-product/build.gradle +1 -1
- data/tracks/kotlin/exercises/leap/build.gradle +1 -1
- data/tracks/kotlin/exercises/linked-list/build.gradle +1 -1
- data/tracks/kotlin/exercises/luhn/build.gradle +1 -1
- data/tracks/kotlin/exercises/nth-prime/build.gradle +1 -1
- data/tracks/kotlin/exercises/nucleotide-count/build.gradle +1 -1
- data/tracks/kotlin/exercises/pangram/build.gradle +1 -1
- data/tracks/kotlin/exercises/pascals-triangle/build.gradle +1 -1
- data/tracks/kotlin/exercises/perfect-numbers/build.gradle +1 -1
- data/tracks/kotlin/exercises/phone-number/build.gradle +1 -1
- data/tracks/kotlin/exercises/pig-latin/build.gradle +1 -1
- data/tracks/kotlin/exercises/raindrops/build.gradle +1 -1
- data/tracks/kotlin/exercises/react/build.gradle +1 -1
- data/tracks/kotlin/exercises/react/src/test/kotlin/ReactTest.kt +9 -9
- data/tracks/kotlin/exercises/rna-transcription/build.gradle +1 -1
- data/tracks/kotlin/exercises/robot-name/build.gradle +1 -1
- data/tracks/kotlin/exercises/roman-numerals/build.gradle +1 -1
- data/tracks/kotlin/exercises/scrabble-score/build.gradle +1 -1
- data/tracks/kotlin/exercises/series/build.gradle +1 -1
- data/tracks/kotlin/exercises/sieve/build.gradle +1 -1
- data/tracks/kotlin/exercises/simple-cipher/build.gradle +1 -1
- data/tracks/kotlin/exercises/space-age/build.gradle +1 -1
- data/tracks/kotlin/exercises/strain/build.gradle +1 -1
- data/tracks/kotlin/exercises/triangle/build.gradle +1 -1
- data/tracks/kotlin/exercises/word-count/build.gradle +1 -1
- data/tracks/perl6/.gitmodules +3 -0
- data/tracks/perl6/.travis.yml +1 -0
- data/tracks/perl6/config.json +8 -11
- data/tracks/perl6/exercises/accumulate/Accumulate.pm6 +1 -0
- data/tracks/perl6/exercises/accumulate/Example.pm +8 -8
- data/tracks/perl6/exercises/accumulate/accumulate.t +27 -12
- data/tracks/perl6/exercises/all-your-base/AllYourBase.pm6 +1 -0
- data/tracks/perl6/exercises/all-your-base/Example.pm +46 -0
- data/tracks/perl6/exercises/all-your-base/all-your-base.t +163 -0
- data/tracks/perl6/exercises/bob/Bob.pm6 +13 -0
- data/tracks/perl6/exercises/bob/Example.pm +9 -9
- data/tracks/perl6/exercises/bob/bob.t +201 -34
- data/tracks/perl6/exercises/grade-school/Example.pm +13 -12
- data/tracks/perl6/exercises/grade-school/GradeSchool.pm6 +4 -0
- data/tracks/perl6/exercises/grade-school/grade-school.t +38 -19
- data/tracks/perl6/exercises/hello-world/Example.pm +3 -3
- data/tracks/perl6/exercises/hello-world/HelloWorld.pm6 +2 -2
- data/tracks/perl6/exercises/hello-world/hello-world.t +41 -10
- data/tracks/perl6/exercises/linked-list/Example.pm6 +33 -34
- data/tracks/perl6/exercises/linked-list/LinkedList.pm6 +1 -0
- data/tracks/perl6/exercises/linked-list/linked-list.t +32 -22
- data/tracks/perl6/exercises/robot-name/Example.pm +8 -15
- data/tracks/perl6/exercises/robot-name/Robot.pm6 +1 -0
- data/tracks/perl6/exercises/robot-name/robot-name.t +39 -14
- data/tracks/php/config.json +5 -0
- data/tracks/php/exercises/luhn/example.php +26 -0
- data/tracks/php/exercises/luhn/luhn_test.php +95 -0
- data/tracks/purescript/README.md +67 -4
- data/tracks/python/docs/LEARNING.md +1 -0
- data/tracks/python/exercises/acronym/acronym_test.py +5 -1
- data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +8 -0
- data/tracks/python/exercises/hello-world/hello_world_test.py +4 -38
- data/tracks/python/exercises/run-length-encoding/run_length_encoding_test.py +30 -15
- metadata +38 -2
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
if !System.get_env("EXERCISM_TEST_EXAMPLES") do
|
|
2
|
+
Code.load_file("ocr_numbers.exs", __DIR__)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
ExUnit.start
|
|
6
|
+
ExUnit.configure exclude: :pending, trace: true
|
|
7
|
+
|
|
8
|
+
defmodule OCRNumbersTest do
|
|
9
|
+
use ExUnit.Case
|
|
10
|
+
|
|
11
|
+
# @tag :pending
|
|
12
|
+
test "Recognizes 0" do
|
|
13
|
+
number = OCRNumbers.convert(
|
|
14
|
+
[
|
|
15
|
+
" _ ",
|
|
16
|
+
"| |",
|
|
17
|
+
"|_|",
|
|
18
|
+
" "
|
|
19
|
+
]
|
|
20
|
+
)
|
|
21
|
+
assert number == {:ok, "0"}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@tag :pending
|
|
25
|
+
test "Recognizes 1" do
|
|
26
|
+
number = OCRNumbers.convert(
|
|
27
|
+
[
|
|
28
|
+
" ",
|
|
29
|
+
" |",
|
|
30
|
+
" |",
|
|
31
|
+
" "
|
|
32
|
+
]
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
assert number == {:ok, "1"}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@tag :pending
|
|
39
|
+
test "Unreadable but correctly sized inputs return ?" do
|
|
40
|
+
number = OCRNumbers.convert(
|
|
41
|
+
[
|
|
42
|
+
" ",
|
|
43
|
+
" _",
|
|
44
|
+
" |",
|
|
45
|
+
" "
|
|
46
|
+
]
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
assert number == {:ok, "?"}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
@tag :pending
|
|
53
|
+
test "Input with a number of lines that is not a multiple of four raises an error" do
|
|
54
|
+
number = OCRNumbers.convert(
|
|
55
|
+
[
|
|
56
|
+
" _ ",
|
|
57
|
+
"| |",
|
|
58
|
+
" "
|
|
59
|
+
]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
assert number == {:error, 'invalid line count'}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
@tag :pending
|
|
66
|
+
test "Input with a number of columns that is not a multiple of three raises an error" do
|
|
67
|
+
number = OCRNumbers.convert(
|
|
68
|
+
[
|
|
69
|
+
" ",
|
|
70
|
+
" |",
|
|
71
|
+
" |",
|
|
72
|
+
" "
|
|
73
|
+
]
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
assert number == {:error, 'invalid column count'}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
@tag :pending
|
|
80
|
+
test "Recognizes 110101100" do
|
|
81
|
+
number = OCRNumbers.convert(
|
|
82
|
+
[
|
|
83
|
+
" _ _ _ _ ",
|
|
84
|
+
" | || | || | | || || |",
|
|
85
|
+
" | ||_| ||_| | ||_||_|",
|
|
86
|
+
" "
|
|
87
|
+
]
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
assert number == {:ok, "110101100"}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
@tag :pending
|
|
94
|
+
test "Garbled numbers in a string are replaced with ?" do
|
|
95
|
+
number = OCRNumbers.convert(
|
|
96
|
+
[
|
|
97
|
+
" _ _ _ ",
|
|
98
|
+
" | || | || | || || |",
|
|
99
|
+
" | | _| ||_| | ||_||_|",
|
|
100
|
+
" "
|
|
101
|
+
]
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
assert number == {:ok, "11?10?1?0"}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
@tag :pending
|
|
108
|
+
test "Recognizes 2" do
|
|
109
|
+
number = OCRNumbers.convert(
|
|
110
|
+
[
|
|
111
|
+
" _ ",
|
|
112
|
+
" _|",
|
|
113
|
+
"|_ ",
|
|
114
|
+
" "
|
|
115
|
+
]
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
assert number == {:ok, "2"}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
@tag :pending
|
|
122
|
+
test "Recognizes 3" do
|
|
123
|
+
number = OCRNumbers.convert(
|
|
124
|
+
[
|
|
125
|
+
" _ ",
|
|
126
|
+
" _|",
|
|
127
|
+
" _|",
|
|
128
|
+
" "
|
|
129
|
+
]
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
assert number == {:ok, "3"}
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
@tag :pending
|
|
136
|
+
test "Recognizes 4" do
|
|
137
|
+
number = OCRNumbers.convert(
|
|
138
|
+
[
|
|
139
|
+
" ",
|
|
140
|
+
"|_|",
|
|
141
|
+
" |",
|
|
142
|
+
" "
|
|
143
|
+
]
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
assert number == {:ok, "4"}
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
@tag :pending
|
|
150
|
+
test "Recognizes 5" do
|
|
151
|
+
number = OCRNumbers.convert(
|
|
152
|
+
[
|
|
153
|
+
" _ ",
|
|
154
|
+
"|_ ",
|
|
155
|
+
" _|",
|
|
156
|
+
" "
|
|
157
|
+
]
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
assert number == {:ok, "5"}
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
@tag :pending
|
|
164
|
+
test "Recognizes 6" do
|
|
165
|
+
number = OCRNumbers.convert(
|
|
166
|
+
[
|
|
167
|
+
" _ ",
|
|
168
|
+
"|_ ",
|
|
169
|
+
"|_|",
|
|
170
|
+
" "
|
|
171
|
+
]
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
assert number == {:ok, "6"}
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
@tag :pending
|
|
178
|
+
test "Regonizes 7" do
|
|
179
|
+
number = OCRNumbers.convert(
|
|
180
|
+
[
|
|
181
|
+
" _ ",
|
|
182
|
+
" |",
|
|
183
|
+
" |",
|
|
184
|
+
" "
|
|
185
|
+
]
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
assert number == {:ok, "7"}
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
@tag :pending
|
|
192
|
+
test "Recognizes 8" do
|
|
193
|
+
number = OCRNumbers.convert(
|
|
194
|
+
[
|
|
195
|
+
" _ ",
|
|
196
|
+
"|_|",
|
|
197
|
+
"|_|",
|
|
198
|
+
" "
|
|
199
|
+
]
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
assert number == {:ok, "8"}
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
@tag :pending
|
|
206
|
+
test "Recognizes 9" do
|
|
207
|
+
number = OCRNumbers.convert(
|
|
208
|
+
[
|
|
209
|
+
" _ ",
|
|
210
|
+
"|_|",
|
|
211
|
+
" _|",
|
|
212
|
+
" "
|
|
213
|
+
]
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
assert number == {:ok, "9"}
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
@tag :pending
|
|
220
|
+
test "Recognizes string of decimal numbers" do
|
|
221
|
+
number = OCRNumbers.convert(
|
|
222
|
+
[
|
|
223
|
+
" _ _ _ _ _ _ _ _ ",
|
|
224
|
+
" | _| _||_||_ |_ ||_||_|| |",
|
|
225
|
+
" ||_ _| | _||_| ||_| _||_|",
|
|
226
|
+
" "
|
|
227
|
+
]
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
assert number == {:ok, "1234567890"}
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
@tag :pending
|
|
234
|
+
test "Numbers separated by empty lines are recognized. Lines are joined by commas." do
|
|
235
|
+
number = OCRNumbers.convert(
|
|
236
|
+
[
|
|
237
|
+
" _ _ ",
|
|
238
|
+
" | _| _|",
|
|
239
|
+
" ||_ _|",
|
|
240
|
+
" ",
|
|
241
|
+
" _ _ ",
|
|
242
|
+
"|_||_ |_ ",
|
|
243
|
+
" | _||_|",
|
|
244
|
+
" ",
|
|
245
|
+
" _ _ _ ",
|
|
246
|
+
" ||_||_|",
|
|
247
|
+
" ||_| _|",
|
|
248
|
+
" "
|
|
249
|
+
]
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
assert number == {:ok, "123,456,789"}
|
|
253
|
+
end
|
|
254
|
+
end
|
|
@@ -7,6 +7,8 @@ import (
|
|
|
7
7
|
"testing"
|
|
8
8
|
)
|
|
9
9
|
|
|
10
|
+
const targetTestVersion = 1
|
|
11
|
+
|
|
10
12
|
var tests = []struct {
|
|
11
13
|
uint64
|
|
12
14
|
string
|
|
@@ -38,6 +40,12 @@ var tests = []struct {
|
|
|
38
40
|
"six hundred fifteen"},
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
func TestTestVersion(t *testing.T) {
|
|
44
|
+
if testVersion != targetTestVersion {
|
|
45
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
41
49
|
func TestSay(t *testing.T) {
|
|
42
50
|
for _, test := range tests {
|
|
43
51
|
if s := Say(test.uint64); s != test.string {
|
|
@@ -18,16 +18,18 @@ var tests = []struct {
|
|
|
18
18
|
{"alacrity", 13},
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
func TestTestVersion(t *testing.T) {
|
|
22
|
+
if testVersion != targetTestVersion {
|
|
23
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
21
27
|
func TestScore(t *testing.T) {
|
|
22
28
|
for _, test := range tests {
|
|
23
29
|
if actual := Score(test.input); actual != test.expected {
|
|
24
30
|
t.Errorf("Score(%q) expected %d, Actual %d", test.input, test.expected, actual)
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
|
-
|
|
28
|
-
if testVersion != targetTestVersion {
|
|
29
|
-
t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
|
|
30
|
-
}
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
func BenchmarkScore(b *testing.B) {
|
|
@@ -23,10 +23,13 @@ var tests = []struct {
|
|
|
23
23
|
{33, []string{"wink"}},
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
func
|
|
26
|
+
func TestTestVersion(t *testing.T) {
|
|
27
27
|
if testVersion != targetTestVersion {
|
|
28
28
|
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
29
29
|
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
func TestHandshake(t *testing.T) {
|
|
30
33
|
for _, test := range tests {
|
|
31
34
|
h := Handshake(test.code)
|
|
32
35
|
// use len() to allow either nil or empty list, because
|
|
@@ -5,6 +5,8 @@ import (
|
|
|
5
5
|
"testing"
|
|
6
6
|
)
|
|
7
7
|
|
|
8
|
+
const targetTestVersion = 1
|
|
9
|
+
|
|
8
10
|
var p10 = []int{2, 3, 5, 7}
|
|
9
11
|
var p1000 = []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
|
|
10
12
|
59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
|
|
@@ -18,6 +20,12 @@ var p1000 = []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
|
|
|
18
20
|
797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883,
|
|
19
21
|
887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997}
|
|
20
22
|
|
|
23
|
+
func TestTestVersion(t *testing.T) {
|
|
24
|
+
if testVersion != targetTestVersion {
|
|
25
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
21
29
|
func TestSieve(t *testing.T) {
|
|
22
30
|
p := Sieve(10)
|
|
23
31
|
if !reflect.DeepEqual(p, p10) {
|
|
@@ -35,6 +35,14 @@ import (
|
|
|
35
35
|
"testing"
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
+
const targetTestVersion = 1
|
|
39
|
+
|
|
40
|
+
func TestTestVersion(t *testing.T) {
|
|
41
|
+
if testVersion != targetTestVersion {
|
|
42
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
38
46
|
// type for testing cipher encoding alone, without requiring any text prep.
|
|
39
47
|
type prepped struct {
|
|
40
48
|
pt string // prepped text == decoded plain text
|
|
@@ -2,6 +2,8 @@ package summultiples
|
|
|
2
2
|
|
|
3
3
|
import "testing"
|
|
4
4
|
|
|
5
|
+
const targetTestVersion = 1
|
|
6
|
+
|
|
5
7
|
var varTests = []struct {
|
|
6
8
|
divisors []int
|
|
7
9
|
limit int
|
|
@@ -19,6 +21,12 @@ var varTests = []struct {
|
|
|
19
21
|
{[]int{}, 10000, 0},
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
func TestTestVersion(t *testing.T) {
|
|
25
|
+
if testVersion != targetTestVersion {
|
|
26
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
22
30
|
func TestSumMultiples(t *testing.T) {
|
|
23
31
|
for _, test := range varTests {
|
|
24
32
|
s := SumMultiples(test.limit, test.divisors...)
|
|
@@ -110,11 +110,13 @@ var errorTestCases = []string{
|
|
|
110
110
|
"Devastating Donkeys;Allegoric Alaskians;dra",
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
func
|
|
113
|
+
func TestTestVersion(t *testing.T) {
|
|
114
114
|
if testVersion != targetTestVersion {
|
|
115
115
|
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
116
116
|
}
|
|
117
|
+
}
|
|
117
118
|
|
|
119
|
+
func TestTallyHappy(t *testing.T) {
|
|
118
120
|
for _, tt := range happyTestCases {
|
|
119
121
|
reader := strings.NewReader(tt.input)
|
|
120
122
|
var buffer bytes.Buffer
|
|
@@ -5,6 +5,14 @@ import (
|
|
|
5
5
|
"testing"
|
|
6
6
|
)
|
|
7
7
|
|
|
8
|
+
const targetTestVersion = 1
|
|
9
|
+
|
|
10
|
+
func TestTestVersion(t *testing.T) {
|
|
11
|
+
if testVersion != targetTestVersion {
|
|
12
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
8
16
|
func TestTranspose(t *testing.T) {
|
|
9
17
|
for _, test := range testCases {
|
|
10
18
|
actual := Transpose(test.input)
|
|
@@ -210,6 +210,12 @@ func (n Node) String() string {
|
|
|
210
210
|
return fmt.Sprintf("%d:%s", n.ID, n.Children)
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
func TestTestVersion(t *testing.T) {
|
|
214
|
+
if testVersion != targetTestVersion {
|
|
215
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
213
219
|
func TestMakeTreeSuccess(t *testing.T) {
|
|
214
220
|
for _, tt := range successTestCases {
|
|
215
221
|
actual, err := Build(tt.input)
|
|
@@ -235,12 +241,6 @@ func TestMakeTreeFailure(t *testing.T) {
|
|
|
235
241
|
}
|
|
236
242
|
}
|
|
237
243
|
|
|
238
|
-
func TestTestVersion(t *testing.T) {
|
|
239
|
-
if testVersion != targetTestVersion {
|
|
240
|
-
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
244
|
func shuffleRecords(records []Record) []Record {
|
|
245
245
|
rand := rand.New(rand.NewSource(42))
|
|
246
246
|
newRecords := make([]Record, len(records))
|
|
@@ -53,6 +53,12 @@ func init() {
|
|
|
53
53
|
testData = append(testData, nf[1:]...)
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
func TestTestVersion(t *testing.T) {
|
|
57
|
+
if testVersion != targetTestVersion {
|
|
58
|
+
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
56
62
|
// Test that the kinds are not equal to each other.
|
|
57
63
|
// If they are equal, then TestKind will return false positives.
|
|
58
64
|
func TestKindsNotEqual(t *testing.T) {
|
|
@@ -86,12 +92,6 @@ func TestKind(t *testing.T) {
|
|
|
86
92
|
}
|
|
87
93
|
}
|
|
88
94
|
|
|
89
|
-
func TestTestVersion(t *testing.T) {
|
|
90
|
-
if testVersion != targetTestVersion {
|
|
91
|
-
t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion)
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
95
|
func BenchmarkKind(b *testing.B) {
|
|
96
96
|
for i := 0; i < b.N; i++ {
|
|
97
97
|
for _, test := range testData {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Atbash (decode, encode) where
|
|
2
2
|
|
|
3
3
|
decode :: String -> String
|
|
4
|
-
decode
|
|
4
|
+
decode cipherText = error "You need to implement this function."
|
|
5
5
|
|
|
6
6
|
encode :: String -> String
|
|
7
|
-
encode
|
|
7
|
+
encode plainText = error "You need to implement this function."
|
|
@@ -6,13 +6,13 @@ mkDeque :: IO (Deque a)
|
|
|
6
6
|
mkDeque = error "You need to implement this function."
|
|
7
7
|
|
|
8
8
|
pop :: Deque a -> IO (Maybe a)
|
|
9
|
-
pop = error "You need to implement this function."
|
|
9
|
+
pop deque = error "You need to implement this function."
|
|
10
10
|
|
|
11
11
|
push :: Deque a -> a -> IO ()
|
|
12
|
-
push = error "You need to implement this function."
|
|
12
|
+
push deque x = error "You need to implement this function."
|
|
13
13
|
|
|
14
14
|
unshift :: Deque a -> a -> IO ()
|
|
15
|
-
unshift = error "You need to implement this function."
|
|
15
|
+
unshift deque x = error "You need to implement this function."
|
|
16
16
|
|
|
17
17
|
shift :: Deque a -> IO (Maybe a)
|
|
18
|
-
shift = error "You need to implement this function."
|
|
18
|
+
shift deque = error "You need to implement this function."
|
|
@@ -13,25 +13,25 @@ import Prelude hiding
|
|
|
13
13
|
( length, reverse, map, filter, foldr, (++), concat )
|
|
14
14
|
|
|
15
15
|
foldl' :: (b -> a -> b) -> b -> [a] -> b
|
|
16
|
-
foldl' = error "You need to implement this function."
|
|
16
|
+
foldl' f z xs = error "You need to implement this function."
|
|
17
17
|
|
|
18
18
|
foldr :: (a -> b -> b) -> b -> [a] -> b
|
|
19
|
-
foldr = error "You need to implement this function."
|
|
19
|
+
foldr f z xs = error "You need to implement this function."
|
|
20
20
|
|
|
21
21
|
length :: [a] -> Int
|
|
22
|
-
length = error "You need to implement this function."
|
|
22
|
+
length xs = error "You need to implement this function."
|
|
23
23
|
|
|
24
24
|
reverse :: [a] -> [a]
|
|
25
|
-
reverse = error "You need to implement this function."
|
|
25
|
+
reverse xs = error "You need to implement this function."
|
|
26
26
|
|
|
27
27
|
map :: (a -> b) -> [a] -> [b]
|
|
28
|
-
map = error "You need to implement this function."
|
|
28
|
+
map f xs = error "You need to implement this function."
|
|
29
29
|
|
|
30
30
|
filter :: (a -> Bool) -> [a] -> [a]
|
|
31
|
-
filter = error "You need to implement this function."
|
|
31
|
+
filter p xs = error "You need to implement this function."
|
|
32
32
|
|
|
33
33
|
(++) :: [a] -> [a] -> [a]
|
|
34
34
|
xs ++ ys = error "You need to implement this function."
|
|
35
35
|
|
|
36
36
|
concat :: [[a]] -> [a]
|
|
37
|
-
concat = error "You need to implement this function."
|
|
37
|
+
concat xss = error "You need to implement this function."
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
module Luhn (addends, checkDigit, checksum, create, isValid) where
|
|
2
2
|
|
|
3
|
-
addends
|
|
3
|
+
addends :: Integer -> [Integer]
|
|
4
|
+
addends n = error "You need to implement this function."
|
|
4
5
|
|
|
5
|
-
checkDigit
|
|
6
|
+
checkDigit :: Integer -> Integer
|
|
7
|
+
checkDigit n = error "You need to implement this function."
|
|
6
8
|
|
|
7
|
-
checksum
|
|
9
|
+
checksum :: Integer -> Integer
|
|
10
|
+
checksum n = error "You need to implement this function."
|
|
8
11
|
|
|
9
|
-
create
|
|
12
|
+
create :: Integer -> Integer
|
|
13
|
+
create n = error "You need to implement this function."
|
|
10
14
|
|
|
11
|
-
isValid
|
|
15
|
+
isValid :: Integer -> Bool
|
|
16
|
+
isValid n = error "You need to implement this function."
|
|
@@ -17,31 +17,31 @@ import Data.Vector (Vector)
|
|
|
17
17
|
data Matrix a = Dummy deriving (Eq, Show)
|
|
18
18
|
|
|
19
19
|
cols :: Matrix a -> Int
|
|
20
|
-
cols = error "You need to implement this function."
|
|
20
|
+
cols matrix = error "You need to implement this function."
|
|
21
21
|
|
|
22
22
|
column :: Int -> Matrix a -> Vector a
|
|
23
|
-
column = error "You need to implement this function."
|
|
23
|
+
column x matrix = error "You need to implement this function."
|
|
24
24
|
|
|
25
25
|
flatten :: Matrix a -> Vector a
|
|
26
|
-
flatten = error "You need to implement this function."
|
|
26
|
+
flatten matrix = error "You need to implement this function."
|
|
27
27
|
|
|
28
28
|
fromList :: [[a]] -> Matrix a
|
|
29
|
-
fromList = error "You need to implement this function."
|
|
29
|
+
fromList xss = error "You need to implement this function."
|
|
30
30
|
|
|
31
31
|
fromString :: Read a => String -> Matrix a
|
|
32
|
-
fromString = error "You need to implement this function."
|
|
32
|
+
fromString xs = error "You need to implement this function."
|
|
33
33
|
|
|
34
34
|
reshape :: (Int, Int) -> Matrix a -> Matrix a
|
|
35
|
-
reshape = error "You need to implement this function."
|
|
35
|
+
reshape dimensions matrix = error "You need to implement this function."
|
|
36
36
|
|
|
37
37
|
row :: Int -> Matrix a -> Vector a
|
|
38
|
-
row = error "You need to implement this function."
|
|
38
|
+
row x matrix = error "You need to implement this function."
|
|
39
39
|
|
|
40
40
|
rows :: Matrix a -> Int
|
|
41
|
-
rows = error "You need to implement this function."
|
|
41
|
+
rows matrix = error "You need to implement this function."
|
|
42
42
|
|
|
43
43
|
shape :: Matrix a -> (Int, Int)
|
|
44
|
-
shape = error "You need to implement this function."
|
|
44
|
+
shape matrix = error "You need to implement this function."
|
|
45
45
|
|
|
46
46
|
transpose :: Matrix a -> Matrix a
|
|
47
|
-
transpose = error "You need to implement this function."
|
|
47
|
+
transpose matrix = error "You need to implement this function."
|