trackler 2.2.1.19 → 2.2.1.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/config.json +11 -0
  4. data/tracks/bash/docs/ABOUT.md +5 -0
  5. data/tracks/bash/exercises/word-count/README.md +24 -0
  6. data/tracks/bash/exercises/word-count/example.awk +12 -0
  7. data/tracks/bash/exercises/word-count/example.sh +21 -0
  8. data/tracks/bash/exercises/word-count/word_count_test.sh +84 -0
  9. data/tracks/coffeescript/config/maintainers.json +5 -11
  10. data/tracks/csharp/.travis.yml +3 -0
  11. data/tracks/delphi/config/maintainers.json +1 -1
  12. data/tracks/ecmascript/config.json +108 -108
  13. data/tracks/elixir/exercises/phone-number/phone_number_test.exs +21 -1
  14. data/tracks/factor/docs/SNIPPET.txt +5 -0
  15. data/tracks/idris/docs/TESTS.md +7 -0
  16. data/tracks/java/config.json +47 -47
  17. data/tracks/javascript/config.json +103 -103
  18. data/tracks/julia/config.json +121 -121
  19. data/tracks/julia/docs/RESOURCES.md +1 -1
  20. data/tracks/julia/docs/SNIPPET.txt +8 -0
  21. data/tracks/objective-c/config.json +2 -3
  22. data/tracks/objective-c/exercises/rna-transcription/RNATranscriptionExample.m +11 -32
  23. data/tracks/ocaml/.travis-ci.sh +1 -1
  24. data/tracks/ocaml/.travis.yml +1 -1
  25. data/tracks/ocaml/README.md +1 -1
  26. data/tracks/ocaml/exercises/change/test.ml +24 -21
  27. data/tracks/ocaml/tools/test-generator/src/codegen.ml +3 -7
  28. data/tracks/ocaml/tools/test-generator/src/controller.ml +4 -5
  29. data/tracks/ocaml/tools/test-generator/src/languages.ml +4 -3
  30. data/tracks/ocaml/tools/test-generator/src/model.ml +1 -2
  31. data/tracks/ocaml/tools/test-generator/src/ocaml_special_cases.ml +19 -18
  32. data/tracks/ocaml/tools/test-generator/src/parser.ml +12 -17
  33. data/tracks/ocaml/tools/test-generator/src/purescript_special_cases.ml +11 -3
  34. data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +2 -3
  35. data/tracks/ocaml/tools/test-generator/test/ocaml_special_cases_test.ml +12 -4
  36. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +10 -10
  37. data/tracks/purescript/exercises/bob/test/Main.purs +5 -5
  38. data/tracks/ruby/bin/generate +1 -1
  39. data/tracks/ruby/docs/24pullrequests.md +1 -1
  40. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +24 -24
  41. data/tracks/ruby/exercises/alphametics/.meta/generator/test_template.erb +1 -1
  42. data/tracks/ruby/exercises/bowling/.meta/generator/test_template.erb +1 -1
  43. data/tracks/ruby/exercises/bowling/bowling_test.rb +10 -10
  44. data/tracks/ruby/exercises/change/.meta/.version +1 -1
  45. data/tracks/ruby/exercises/change/.meta/solutions/change.rb +1 -1
  46. data/tracks/ruby/exercises/change/change_test.rb +7 -2
  47. data/tracks/ruby/exercises/collatz-conjecture/.meta/generator/collatz_conjecture_case.rb +1 -1
  48. data/tracks/ruby/exercises/connect/.meta/generator/test_template.erb +1 -1
  49. data/tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb +1 -1
  50. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_case.rb +5 -1
  51. data/tracks/ruby/exercises/hamming/hamming_test.rb +7 -7
  52. data/tracks/ruby/exercises/leap/.meta/generator/test_template.erb +1 -1
  53. data/tracks/ruby/exercises/pangram/.meta/.version +1 -1
  54. data/tracks/ruby/exercises/pangram/.meta/solutions/pangram.rb +1 -1
  55. data/tracks/ruby/exercises/pangram/pangram_test.rb +3 -3
  56. data/tracks/ruby/exercises/rna-transcription/rna_transcription_test.rb +4 -4
  57. data/tracks/ruby/exercises/roman-numerals/.meta/solutions/roman_numerals.rb +1 -1
  58. data/tracks/ruby/exercises/space-age/.meta/generator/test_template.erb +1 -1
  59. data/tracks/ruby/lib/generator/test_template.erb +1 -1
  60. data/tracks/ruby/lib/generator/underscore.rb +1 -1
  61. data/tracks/ruby/lib/helper.rb +4 -4
  62. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha-beta/.meta/generator/test_template.erb +1 -1
  63. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/.version +0 -0
  64. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/generator/alpha_case.rb +0 -0
  65. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/generator/test_template.erb +1 -1
  66. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/alpha/.meta/solutions/alpha.rb +0 -0
  67. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/beta/.meta/.version +0 -0
  68. data/tracks/ruby/test/fixtures/{xruby → ruby}/exercises/beta/.meta/generator/beta_case.rb +0 -0
  69. data/tracks/ruby/test/fixtures/{xruby → ruby}/lib/generator/test_template.erb +1 -1
  70. data/tracks/ruby/test/generator/files/track_files_test.rb +4 -4
  71. data/tracks/ruby/test/generator/implementation_test.rb +1 -1
  72. data/tracks/ruby/test/generator/template_values_test.rb +1 -1
  73. data/tracks/scala/exercises/rail-fence-cipher/src/main/scala/{RailFenceCipher.scala → .keep} +0 -0
  74. data/tracks/scala/exercises/rail-fence-cipher/src/test/scala/RailFenceCipherTest.scala +16 -23
  75. data/tracks/scala/exercises/say/src/test/scala/SayTest.scala +20 -33
  76. data/tracks/scala/testgen/src/main/scala/RailFenceCipherTestGenerator.scala +9 -53
  77. data/tracks/scala/testgen/src/main/scala/SayTestGenerator.scala +50 -0
  78. data/tracks/sml/bin/generate +1 -1
  79. data/tracks/sml/config.json +30 -0
  80. data/tracks/sml/exercises/all-your-base/README.md +61 -0
  81. data/tracks/sml/exercises/all-your-base/all-your-base.sml +2 -0
  82. data/tracks/sml/exercises/all-your-base/example.sml +36 -0
  83. data/tracks/sml/exercises/all-your-base/test.sml +75 -0
  84. data/tracks/sml/exercises/all-your-base/testlib.sml +159 -0
  85. data/tracks/sml/exercises/difference-of-squares/example.sml +3 -6
  86. data/tracks/sml/exercises/list-ops/README.md +40 -0
  87. data/tracks/sml/exercises/list-ops/example.sml +34 -0
  88. data/tracks/sml/exercises/list-ops/list-ops.sml +23 -0
  89. data/tracks/sml/exercises/list-ops/test.sml +85 -0
  90. data/tracks/sml/exercises/list-ops/testlib.sml +159 -0
  91. data/tracks/sml/exercises/prime-factors/README.md +66 -0
  92. data/tracks/sml/exercises/prime-factors/example.sml +15 -0
  93. data/tracks/sml/exercises/prime-factors/prime-factors.sml +2 -0
  94. data/tracks/sml/exercises/prime-factors/test.sml +35 -0
  95. data/tracks/sml/exercises/prime-factors/testlib.sml +159 -0
  96. metadata +34 -11
@@ -0,0 +1,159 @@
1
+ structure Expect =
2
+ struct
3
+ datatype expectation = Pass | Fail of string * string
4
+
5
+ local
6
+ fun failEq b a =
7
+ Fail ("Expected: " ^ b, "Got: " ^ a)
8
+
9
+ fun failExn b a =
10
+ Fail ("Expected: " ^ b, "Raised: " ^ a)
11
+
12
+ fun exnName (e: exn): string = General.exnName e
13
+ in
14
+ fun truthy a =
15
+ if a
16
+ then Pass
17
+ else failEq "true" "false"
18
+
19
+ fun falsy a =
20
+ if a
21
+ then failEq "false" "true"
22
+ else Pass
23
+
24
+ fun equalTo b a =
25
+ if a = b
26
+ then Pass
27
+ else failEq (PolyML.makestring b) (PolyML.makestring a)
28
+
29
+ fun nearTo b a =
30
+ if Real.== (a, b)
31
+ then Pass
32
+ else failEq (Real.toString b) (Real.toString a)
33
+
34
+ fun anyError f =
35
+ (
36
+ f ();
37
+ failExn "an exception" "Nothing"
38
+ ) handle _ => Pass
39
+
40
+ fun error e f =
41
+ (
42
+ f ();
43
+ failExn (exnName e) "Nothing"
44
+ ) handle e' => if exnMessage e' = exnMessage e
45
+ then Pass
46
+ else failExn (exnMessage e) (exnMessage e')
47
+ end
48
+ end
49
+
50
+ structure TermColor =
51
+ struct
52
+ datatype color = Red | Green | Yellow | Normal
53
+
54
+ fun f Red = "\027[31m"
55
+ | f Green = "\027[32m"
56
+ | f Yellow = "\027[33m"
57
+ | f Normal = "\027[0m"
58
+
59
+ fun colorize color s = (f color) ^ s ^ (f Normal)
60
+
61
+ val redit = colorize Red
62
+
63
+ val greenit = colorize Green
64
+
65
+ val yellowit = colorize Yellow
66
+ end
67
+
68
+ structure Test =
69
+ struct
70
+ datatype testnode = TestGroup of string * testnode list
71
+ | Test of string * (unit -> Expect.expectation)
72
+
73
+ local
74
+ datatype evaluation = Success of string
75
+ | Failure of string * string * string
76
+ | Error of string * string
77
+
78
+ fun indent n s = (implode (List.tabulate (n, fn _ => #" "))) ^ s
79
+
80
+ fun fmt indentlvl ev =
81
+ let
82
+ val check = TermColor.greenit "\226\156\148 " (* ✔ *)
83
+ val cross = TermColor.redit "\226\156\150 " (* ✖ *)
84
+ val indentlvl = indentlvl * 2
85
+ in
86
+ case ev of
87
+ Success descr => indent indentlvl (check ^ descr)
88
+ | Failure (descr, exp, got) =>
89
+ String.concatWith "\n" [indent indentlvl (cross ^ descr),
90
+ indent (indentlvl + 2) exp,
91
+ indent (indentlvl + 2) got]
92
+ | Error (descr, reason) =>
93
+ String.concatWith "\n" [indent indentlvl (cross ^ descr),
94
+ indent (indentlvl + 2) (TermColor.redit reason)]
95
+ end
96
+
97
+ fun eval (TestGroup _) = raise Fail "Only a 'Test' can be evaluated"
98
+ | eval (Test (descr, thunk)) =
99
+ (
100
+ case thunk () of
101
+ Expect.Pass => ((1, 0, 0), Success descr)
102
+ | Expect.Fail (s, s') => ((0, 1, 0), Failure (descr, s, s'))
103
+ )
104
+ handle e => ((0, 0, 1), Error (descr, "Unexpected error: " ^ exnMessage e))
105
+
106
+ fun flatten depth testnode =
107
+ let
108
+ fun sum (x, y, z) (a, b, c) = (x + a, y + b, z + c)
109
+
110
+ fun aux (t, (counter, acc)) =
111
+ let
112
+ val (counter', texts) = flatten (depth + 1) t
113
+ in
114
+ (sum counter' counter, texts :: acc)
115
+ end
116
+ in
117
+ case testnode of
118
+ TestGroup (descr, ts) =>
119
+ let
120
+ val (counter, texts) = foldr aux ((0, 0, 0), []) ts
121
+ in
122
+ (counter, (indent (depth * 2) descr) :: List.concat texts)
123
+ end
124
+ | Test _ =>
125
+ let
126
+ val (counter, evaluation) = eval testnode
127
+ in
128
+ (counter, [fmt depth evaluation])
129
+ end
130
+ end
131
+
132
+ fun println s = print (s ^ "\n")
133
+ in
134
+ fun run suite =
135
+ let
136
+ val ((succeeded, failed, errored), texts) = flatten 0 suite
137
+
138
+ val summary = String.concatWith ", " [
139
+ TermColor.greenit ((Int.toString succeeded) ^ " passed"),
140
+ TermColor.redit ((Int.toString failed) ^ " failed"),
141
+ TermColor.redit ((Int.toString errored) ^ " errored"),
142
+ (Int.toString (succeeded + failed + errored)) ^ " total"
143
+ ]
144
+
145
+ val status = if failed = 0 andalso errored = 0
146
+ then OS.Process.success
147
+ else OS.Process.failure
148
+
149
+ in
150
+ List.app println texts;
151
+ println "";
152
+ println ("Tests: " ^ summary);
153
+ OS.Process.exit status
154
+ end
155
+ end
156
+ end
157
+
158
+ fun describe description tests = Test.TestGroup (description, tests)
159
+ fun test description thunk = Test.Test (description, thunk)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.19
4
+ version: 2.2.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-26 00:00:00.000000000 Z
11
+ date: 2017-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -576,6 +576,7 @@ files:
576
576
  - tracks/bash/config.json
577
577
  - tracks/bash/config/exercise_readme.go.tmpl
578
578
  - tracks/bash/config/maintainers.json
579
+ - tracks/bash/docs/ABOUT.md
579
580
  - tracks/bash/docs/EXERCISE_README_INSERT.md
580
581
  - tracks/bash/docs/INSTALLATION.md
581
582
  - tracks/bash/docs/LEARNING.md
@@ -621,6 +622,10 @@ files:
621
622
  - tracks/bash/exercises/two-fer/README.md
622
623
  - tracks/bash/exercises/two-fer/example.sh
623
624
  - tracks/bash/exercises/two-fer/two_fer_test.sh
625
+ - tracks/bash/exercises/word-count/README.md
626
+ - tracks/bash/exercises/word-count/example.awk
627
+ - tracks/bash/exercises/word-count/example.sh
628
+ - tracks/bash/exercises/word-count/word_count_test.sh
624
629
  - tracks/bash/img/icon.png
625
630
  - tracks/c/.git
626
631
  - tracks/c/.github/stale.yml
@@ -4081,6 +4086,7 @@ files:
4081
4086
  - tracks/factor/docs/INSTALLATION.md
4082
4087
  - tracks/factor/docs/LEARNING.md
4083
4088
  - tracks/factor/docs/RESOURCES.md
4089
+ - tracks/factor/docs/SNIPPET.txt
4084
4090
  - tracks/factor/docs/TESTS.md
4085
4091
  - tracks/factor/exercises/.keep
4086
4092
  - tracks/factor/exercises/hello-world/README.md
@@ -6482,6 +6488,7 @@ files:
6482
6488
  - tracks/julia/docs/INSTALLATION.md
6483
6489
  - tracks/julia/docs/LEARNING.md
6484
6490
  - tracks/julia/docs/RESOURCES.md
6491
+ - tracks/julia/docs/SNIPPET.txt
6485
6492
  - tracks/julia/docs/TESTS.md
6486
6493
  - tracks/julia/exercises/.keep
6487
6494
  - tracks/julia/exercises/anagram/README.md
@@ -10210,14 +10217,14 @@ files:
10210
10217
  - tracks/ruby/lib/tasks/exercise_tests_runner.rb
10211
10218
  - tracks/ruby/test/fixtures/metadata/exercises/alpha/canonical-data.json
10212
10219
  - tracks/ruby/test/fixtures/metadata/exercises/complex/canonical-data.json
10213
- - tracks/ruby/test/fixtures/xruby/exercises/alpha-beta/.meta/generator/test_template.erb
10214
- - tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/.version
10215
- - tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/alpha_case.rb
10216
- - tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/generator/test_template.erb
10217
- - tracks/ruby/test/fixtures/xruby/exercises/alpha/.meta/solutions/alpha.rb
10218
- - tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/.version
10219
- - tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/beta_case.rb
10220
- - tracks/ruby/test/fixtures/xruby/lib/generator/test_template.erb
10220
+ - tracks/ruby/test/fixtures/ruby/exercises/alpha-beta/.meta/generator/test_template.erb
10221
+ - tracks/ruby/test/fixtures/ruby/exercises/alpha/.meta/.version
10222
+ - tracks/ruby/test/fixtures/ruby/exercises/alpha/.meta/generator/alpha_case.rb
10223
+ - tracks/ruby/test/fixtures/ruby/exercises/alpha/.meta/generator/test_template.erb
10224
+ - tracks/ruby/test/fixtures/ruby/exercises/alpha/.meta/solutions/alpha.rb
10225
+ - tracks/ruby/test/fixtures/ruby/exercises/beta/.meta/.version
10226
+ - tracks/ruby/test/fixtures/ruby/exercises/beta/.meta/generator/beta_case.rb
10227
+ - tracks/ruby/test/fixtures/ruby/lib/generator/test_template.erb
10221
10228
  - tracks/ruby/test/generator/case_values_test.rb
10222
10229
  - tracks/ruby/test/generator/command_line/generator_optparser_test.rb
10223
10230
  - tracks/ruby/test/generator/command_line_test.rb
@@ -11035,7 +11042,7 @@ files:
11035
11042
  - tracks/scala/exercises/rail-fence-cipher/README.md
11036
11043
  - tracks/scala/exercises/rail-fence-cipher/build.sbt
11037
11044
  - tracks/scala/exercises/rail-fence-cipher/example.scala
11038
- - tracks/scala/exercises/rail-fence-cipher/src/main/scala/RailFenceCipher.scala
11045
+ - tracks/scala/exercises/rail-fence-cipher/src/main/scala/.keep
11039
11046
  - tracks/scala/exercises/rail-fence-cipher/src/test/scala/RailFenceCipherTest.scala
11040
11047
  - tracks/scala/exercises/raindrops/README.md
11041
11048
  - tracks/scala/exercises/raindrops/build.sbt
@@ -11224,6 +11231,7 @@ files:
11224
11231
  - tracks/scala/testgen/src/main/scala/RnaTranscriptionTestGenerator.scala
11225
11232
  - tracks/scala/testgen/src/main/scala/RomanNumeralsTestGenerator.scala
11226
11233
  - tracks/scala/testgen/src/main/scala/RunLengthEncodingTestGenerator.scala
11234
+ - tracks/scala/testgen/src/main/scala/SayTestGenerator.scala
11227
11235
  - tracks/scala/testgen/src/main/scala/ScrabbleScoreTestGenerator.scala
11228
11236
  - tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala
11229
11237
  - tracks/scala/testgen/src/main/scala/SeriesTestGenerator.scala
@@ -11334,6 +11342,11 @@ files:
11334
11342
  - tracks/sml/exercises/accumulate/accumulate.sml
11335
11343
  - tracks/sml/exercises/accumulate/example.sml
11336
11344
  - tracks/sml/exercises/accumulate/test.sml
11345
+ - tracks/sml/exercises/all-your-base/README.md
11346
+ - tracks/sml/exercises/all-your-base/all-your-base.sml
11347
+ - tracks/sml/exercises/all-your-base/example.sml
11348
+ - tracks/sml/exercises/all-your-base/test.sml
11349
+ - tracks/sml/exercises/all-your-base/testlib.sml
11337
11350
  - tracks/sml/exercises/allergies/README.md
11338
11351
  - tracks/sml/exercises/allergies/allergies.sml
11339
11352
  - tracks/sml/exercises/allergies/example.sml
@@ -11373,6 +11386,11 @@ files:
11373
11386
  - tracks/sml/exercises/hello-world/hello-world.sml
11374
11387
  - tracks/sml/exercises/hello-world/test.sml
11375
11388
  - tracks/sml/exercises/hello-world/testlib.sml
11389
+ - tracks/sml/exercises/list-ops/README.md
11390
+ - tracks/sml/exercises/list-ops/example.sml
11391
+ - tracks/sml/exercises/list-ops/list-ops.sml
11392
+ - tracks/sml/exercises/list-ops/test.sml
11393
+ - tracks/sml/exercises/list-ops/testlib.sml
11376
11394
  - tracks/sml/exercises/nth-prime/README.md
11377
11395
  - tracks/sml/exercises/nth-prime/example.sml
11378
11396
  - tracks/sml/exercises/nth-prime/nth-prime.sml
@@ -11387,6 +11405,11 @@ files:
11387
11405
  - tracks/sml/exercises/perfect-numbers/perfect-numbers.sml
11388
11406
  - tracks/sml/exercises/perfect-numbers/test.sml
11389
11407
  - tracks/sml/exercises/perfect-numbers/testlib.sml
11408
+ - tracks/sml/exercises/prime-factors/README.md
11409
+ - tracks/sml/exercises/prime-factors/example.sml
11410
+ - tracks/sml/exercises/prime-factors/prime-factors.sml
11411
+ - tracks/sml/exercises/prime-factors/test.sml
11412
+ - tracks/sml/exercises/prime-factors/testlib.sml
11390
11413
  - tracks/sml/exercises/raindrops/README.md
11391
11414
  - tracks/sml/exercises/raindrops/example.sml
11392
11415
  - tracks/sml/exercises/raindrops/raindrops.sml