trackler 2.0.6.20 → 2.0.6.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/common/TOPICS.txt +1 -0
  3. data/lib/trackler/version.rb +1 -1
  4. data/tracks/csharp/docs/INSTALLATION.md +85 -3
  5. data/tracks/go/config.json +11 -3
  6. data/tracks/julia/config.json +20 -1
  7. data/tracks/julia/exercises/anagram/anagram.jl +4 -0
  8. data/tracks/julia/exercises/anagram/example.jl +43 -0
  9. data/tracks/julia/exercises/anagram/runtests.jl +68 -0
  10. data/tracks/julia/exercises/leap/example.jl +5 -0
  11. data/tracks/julia/exercises/leap/leap.jl +4 -0
  12. data/tracks/julia/exercises/leap/runtests.jl +20 -0
  13. data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
  14. data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
  15. data/tracks/ocaml/exercises/etl/example.ml +1 -1
  16. data/tracks/ocaml/exercises/hangman/example.ml +1 -1
  17. data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
  18. data/tracks/ocaml/tools/test-generator/src/controller.ml +8 -4
  19. data/tracks/ocaml/tools/test-generator/src/files.ml +24 -0
  20. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +4 -1
  21. data/tracks/scala/config.json +15 -1
  22. data/tracks/scala/exercises/anagram/build.sbt +3 -2
  23. data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +1 -1
  24. data/tracks/scala/exercises/bob/build.sbt +2 -2
  25. data/tracks/scala/exercises/bob/src/test/scala/BobTest.scala +1 -1
  26. data/tracks/scala/exercises/grade-school/build.sbt +3 -2
  27. data/tracks/scala/exercises/grade-school/src/test/scala/GradeSchoolTest.scala +1 -1
  28. data/tracks/scala/exercises/hamming/build.sbt +2 -2
  29. data/tracks/scala/exercises/hamming/src/test/scala/HammingTest.scala +1 -1
  30. data/tracks/scala/exercises/hello-world/build.sbt +2 -2
  31. data/tracks/scala/exercises/pangram/build.sbt +4 -2
  32. data/tracks/scala/exercises/phone-number/build.sbt +3 -2
  33. data/tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala +1 -1
  34. data/tracks/scala/exercises/word-count/build.sbt +2 -2
  35. data/tracks/scala/exercises/word-count/src/test/scala/WordCountTest.scala +1 -1
  36. data/tracks/swift/SETUP.md +6 -6
  37. metadata +9 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a74906359ef6716f5ba79719f22de614e19f79a7
4
- data.tar.gz: ae56be98e926ec4f4cf082af5c727a0f842b8eb0
3
+ metadata.gz: 6de615318283e74b1a4ba367fe22c32fd9327479
4
+ data.tar.gz: 51532eb3b0e3814f86ba58b6bd22fedfcaa2b274
5
5
  SHA512:
6
- metadata.gz: 7b4bb7fc87665af298f845160c685eef1d49480443b61f4f98be954bcfda314cc145230bf62c0f7b16ab3cbcc5873ca0698f116a3c30379ef101ca3cec44a232
7
- data.tar.gz: 3be91f09a9535cab6a09afa6911fdd262bcac4dc28b36cf1ff400a71b2a83f28888a08134c1a6653d5459b6311c18b10eb5be070621664fa131898339410d5d6
6
+ metadata.gz: 5f3edb30c5879a9f5a3c4c5e225911c50cce4c7456448b28d49215439eef1e8d4146cd1da18bfec00a413a6d55bff6d7d9109df70b1d4d7850c837acd015fb97
7
+ data.tar.gz: 23c1c02ee95b90b4bff31c628bbbd25066e23bcadc339bbaa9d25f4fda817e9e835230f6930a4296621d7ed31a0d9860cc15fc09e3951ca2a5497b16336047b4
@@ -63,6 +63,7 @@ Performance
63
63
  Randomness
64
64
  Reactive programming
65
65
  Refactoring
66
+ Regular Expressions
66
67
  Searching
67
68
  Security
68
69
  Sorting
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.6.20"
2
+ VERSION = "2.0.6.21"
3
3
  end
@@ -1,6 +1,10 @@
1
1
  ## Installing C#
2
2
 
3
- ### Windows
3
+ * [Windows](#windows)
4
+ * [Mac](#mac)
5
+ * [Linux](#linux)
6
+
7
+ ### [Windows](#windows)
4
8
  There are a couple of different ways to get started using C#. The main way is to
5
9
  install Visual Studio, the IDE for C# and related projects.
6
10
 
@@ -87,7 +91,7 @@ The compiler executable is usually located in the Microsoft.NET\Framework\Versio
87
91
 
88
92
  Refer to this [MSDN article](http://msdn.microsoft.com/en-us/library/78f4aasd.aspx) for more information on the command line compiler.
89
93
 
90
- ### Mac
94
+ ### [Mac](#mac)
91
95
 
92
96
  Install [Xamarin Studio](http://xamarin.com/download).
93
97
 
@@ -98,6 +102,84 @@ Once installed and running, click on new solution and you'll find the C# library
98
102
 
99
103
  ![Xamarin New Project](http://x.exercism.io/v3/tracks/csharp/docs/img/xamarin-csharp.jpg)
100
104
 
101
- ### Linux
105
+ ### [Linux](#linux)
106
+
107
+ .NET Core is available for Linux. Follow the [official installation guide](https://www.microsoft.com/net/core#linuxubuntu) to install the .NET Core development tools.
108
+
109
+ After installing .NET Core, fetch the first exercise of the csharp-track:
110
+
111
+ ```
112
+ exercism fetch csharp
113
+ ```
114
+
115
+ Move into the exercise directory:
116
+
117
+ ```
118
+ cd ~/exercism/csharp/hello-world
119
+ ```
120
+
121
+ Initialize a new dotnet project
122
+
123
+ ```
124
+ dotnet new
125
+ ```
126
+
127
+ Several new files are created, among them project.json. We have to add nunit as a dependency in order to run the tests provided in the exercise.
128
+
129
+ Add the following lines to the dependency block:
130
+
131
+ ```
132
+ "dependencies": {
133
+ "nunit": "3.6.0",
134
+ "dotnet-test-nunit": "3.4.0-*"
135
+ }
136
+ ```
137
+
138
+ We also have to specify the testrunner, add this line below the dependency block:
139
+
140
+ ```
141
+ "testRunner":"nunit"
142
+ ```
143
+
144
+ The complete **project.json** file should look something like this:
145
+
146
+ ```
147
+ {
148
+ "version": "1.0.0-*",
149
+ "buildOptions": {
150
+ "debugType": "portable",
151
+ "emitEntryPoint": true
152
+ },
153
+ "dependencies": {
154
+ "nunit": "3.6.0",
155
+ "dotnet-test-nunit": "3.4.0-*"
156
+ },
157
+ "testRunner":"nunit",
158
+ "frameworks": {
159
+ "netcoreapp1.1": {
160
+ "dependencies": {
161
+ "Microsoft.NETCore.App": {
162
+ "type": "platform",
163
+ "version": "1.1.0"
164
+ }
165
+ },
166
+ "imports": "dnxcore50"
167
+ }
168
+ }
169
+ }
170
+ ```
171
+
172
+ Then we can restore the packages using:
173
+
174
+ ```
175
+ dotnet restore
176
+ ```
177
+
178
+ Compile the project and run the tests with this:
179
+
180
+ ```
181
+ dotnet test
182
+ ```
183
+
102
184
 
103
185
  [Mono Develop](http://www.mono-project.com/Mono_For_Linux_Developers) is available for Linux.
@@ -74,12 +74,20 @@
74
74
  {
75
75
  "difficulty": 1,
76
76
  "slug": "raindrops",
77
- "topics": []
77
+ "topics": [
78
+ "Control-flow (conditionals)",
79
+ "Strings",
80
+ "Filtering"
81
+ ]
78
82
  },
79
83
  {
80
- "difficulty": 1,
84
+ "difficulty": 3,
81
85
  "slug": "acronym",
82
- "topics": []
86
+ "topics": [
87
+ "Strings",
88
+ "Transforming",
89
+ "Regular Expressions"
90
+ ]
83
91
  },
84
92
  {
85
93
  "difficulty": 1,
@@ -5,7 +5,26 @@
5
5
  "active": false,
6
6
  "test_pattern": "TODO",
7
7
  "exercises": [
8
-
8
+ {
9
+ "slug": "leap",
10
+ "difficulty": 1,
11
+ "topics": [
12
+ "control-flow (conditionals)",
13
+ "integers",
14
+ "mathematics"
15
+ ]
16
+ },
17
+ {
18
+ "slug": "anagram",
19
+ "difficulty": 2,
20
+ "topics": [
21
+ "control-flow (loops)",
22
+ "arrays",
23
+ "strings",
24
+ "sorting",
25
+ "filtering"
26
+ ]
27
+ }
9
28
  ],
10
29
  "deprecated": [
11
30
 
@@ -0,0 +1,4 @@
1
+ function detect_anagrams(subject::AbstractString, candidates::AbstractArray)
2
+
3
+ end
4
+
@@ -0,0 +1,43 @@
1
+ # Anagrams are two or more words that composed of the same characters but in a different order
2
+
3
+ function is_anagram(s1::AbstractString, s2::AbstractString)
4
+ # Disable case sensitivity
5
+ s1 = lowercase(s1)
6
+ s2 = lowercase(s2)
7
+
8
+ # Similar and different-length strings are not anagrams
9
+ if length(s1) != length(s2) || s1 == s2
10
+ return false
11
+ end
12
+
13
+ # Calculate count of every character in the first string
14
+ chr_count = Dict()
15
+ for c in s1
16
+ chr_count[c] = get(chr_count, c, 0) + 1
17
+ end
18
+
19
+ # Reduce the count by every character from the second string
20
+ for c in s2
21
+ t = get(chr_count, c, 0) - 1
22
+ if t < 0
23
+ # Got character that not exist in the first string
24
+ return false
25
+ else
26
+ chr_count[c] = t
27
+ end
28
+ end
29
+
30
+ # Check all counts to be zeroes
31
+ return all(i->(i==0), values(chr_count))
32
+ end
33
+
34
+ function detect_anagrams(subject::AbstractString, candidates::AbstractArray)
35
+ result = []
36
+ for candidate = candidates
37
+ if is_anagram(subject, candidate)
38
+ push!(result, candidate)
39
+ end
40
+ end
41
+ result
42
+ end
43
+
@@ -0,0 +1,68 @@
1
+ using Base.Test
2
+
3
+ include("anagram.jl")
4
+
5
+ @testset "no matches" begin
6
+ @test detect_anagrams("diasper", ["hello", "world", "zombies", "pants"]) == []
7
+ end
8
+
9
+ @testset "detects simple anagram" begin
10
+ @test detect_anagrams("ant", ["tan", "stand", "at"]) == ["tan"]
11
+ end
12
+
13
+ @testset "does not detect false positives" begin
14
+ @test detect_anagrams("galea", ["eagle"]) == []
15
+ end
16
+
17
+ @testset "detects multiple anagrams" begin
18
+ @test detect_anagrams("master", ["stream", "pigeon", "maters"]) == ["stream", "maters"]
19
+ end
20
+
21
+ @testset "does not detect anagram subsets" begin
22
+ @test detect_anagrams("good", ["dog", "goody"]) == []
23
+ end
24
+
25
+ @testset "detects anagram" begin
26
+ @test detect_anagrams("listen", ["enlists", "google", "inlets", "banana"]) == ["inlets"]
27
+ end
28
+
29
+ @testset "detects multiple anagrams" begin
30
+ @test detect_anagrams("allergy", ["gallery", "ballerina", "regally", "clergy", "largely", "leading"]) == ["gallery", "regally", "largely"]
31
+ end
32
+
33
+ @testset "does not detect identical words" begin
34
+ @test detect_anagrams("corn", ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]) == ["cron"]
35
+ end
36
+
37
+ @testset "does not detect non-anagrams with identical checksum" begin
38
+ @test detect_anagrams("mass", ["last"]) == []
39
+ end
40
+
41
+ @testset "detects anagrams case-insensitively" begin
42
+ @test detect_anagrams("Orchestra", ["cashregister", "Carthorse", "radishes"]) == ["Carthorse"]
43
+ end
44
+
45
+ @testset "detects anagrams using case-insensitive subject" begin
46
+ @test detect_anagrams("Orchestra", ["cashregister", "carthorse", "radishes"]) == ["carthorse"]
47
+ end
48
+
49
+ @testset "detects anagrams using case-insensitive possible matches" begin
50
+ @test detect_anagrams("orchestra", ["cashregister", "Carthorse", "radishes"]) == ["Carthorse"]
51
+ end
52
+
53
+ @testset "does not detect a word as its own anagram" begin
54
+ @test detect_anagrams("banana", ["Banana"]) == []
55
+ end
56
+
57
+ @testset "does not detect a anagram if the original word is repeated" begin
58
+ @test detect_anagrams("go", ["go Go GO"]) == []
59
+ end
60
+
61
+ @testset "anagrams must use all letters exactly once" begin
62
+ @test detect_anagrams("tapper", ["patter"]) == []
63
+ end
64
+
65
+ @testset "capital word is not own anagram" begin
66
+ @test detect_anagrams("BANANA", ["Banana"]) == []
67
+ end
68
+
@@ -0,0 +1,5 @@
1
+ # Leap on every year that is evenly divisible by 4
2
+ # except every year that is evenly divisible by 100
3
+ # unless the year is also evenly divisible by 400
4
+ is_leap_year(year::Int) = (year % 100 != 0 && year % 4 == 0) || (year % 400 == 0)
5
+
@@ -0,0 +1,4 @@
1
+ function is_leap_year(year::Int)
2
+
3
+ end
4
+
@@ -0,0 +1,20 @@
1
+ using Base.Test
2
+
3
+ include("leap.jl")
4
+
5
+ @testset "Year not divisible by 4: common year" begin
6
+ @test !is_leap_year(2015)
7
+ end
8
+
9
+ @testset "Year divisible by 4, not divisible by 100: leap year" begin
10
+ @test is_leap_year(2016)
11
+ end
12
+
13
+ @testset "Year divisible by 100, not divisible by 400: common year" begin
14
+ @test !is_leap_year(2100)
15
+ end
16
+
17
+ @testset "Year divisible by 400: leap year" begin
18
+ @test is_leap_year(2000)
19
+ end
20
+
@@ -22,7 +22,7 @@ let explode s =
22
22
 
23
23
  let implode l =
24
24
  let character_at i = List.nth_exn l i in
25
- String.init (List.length l) character_at
25
+ String.init (List.length l) ~f:character_at
26
26
 
27
27
  let rec group n l =
28
28
  if (List.length l) <= n then
@@ -16,7 +16,7 @@ let zip_with (xs: 'a list) (ys: 'b list) ~(f: 'a -> 'b -> 'c) =
16
16
  let tails (xs: 'a list): ('a list) list =
17
17
  let rec go acc = function
18
18
  | [] -> [] :: acc
19
- | (x::xs) as l -> go (l :: acc) xs
19
+ | (_::xs) as l -> go (l :: acc) xs
20
20
  in
21
21
  List.rev @@ go [] xs
22
22
 
@@ -4,4 +4,4 @@ let transform data =
4
4
  let assign_value value character = ((Char.lowercase character), value) in
5
5
  let assign (value, characters) = List.map ~f:(assign_value value) characters in
6
6
  let compare (a, _) (b, _) = Char.compare a b in
7
- List.sort compare (List.concat (List.map ~f:assign data))
7
+ List.sort ~cmp:compare (List.concat (List.map ~f:assign data))
@@ -9,7 +9,7 @@ type progress =
9
9
  | Busy of int
10
10
 
11
11
  type t = {
12
- send_feed : char -> unit;
12
+ send_feed : ?step:React.step -> char -> unit;
13
13
  masked_word_s : string signal;
14
14
  progress_s : progress signal;
15
15
  }
@@ -7,5 +7,5 @@ let count s c =
7
7
  String.fold ~init:0 ~f s
8
8
 
9
9
  let nucleotide_counts s =
10
- let f m c = CMap.change m c (function None -> Some 1 | Some n -> Some (n + 1)) in
10
+ let f m c = CMap.change m c ~f:(function None -> Some 1 | Some n -> Some (n + 1)) in
11
11
  String.fold ~init:CMap.empty ~f s
@@ -5,6 +5,7 @@ open Utils
5
5
  open Codegen
6
6
  open Special_cases
7
7
  open Template
8
+ open Files
8
9
 
9
10
  type content = string
10
11
 
@@ -40,19 +41,22 @@ let generate_code ~(slug: string) ~(template_file: content) ~(canonical_data_fil
40
41
  |> Result.return
41
42
  )
42
43
 
43
- let output_tests (files: (string * content * content) list) (output_folder: string): unit =
44
+ let output_tests (files: (string * content * content) list) (output_folder: string) ~(generated_folder: string): unit =
44
45
  let output_filepath name = output_folder ^ "/" ^ name ^ "/test.ml" in
45
46
  let output1 (slug,t,c) =
46
47
  match generate_code slug t c with
47
- | Ok code -> Out_channel.write_all (output_filepath slug) code
48
+ | Ok code ->
49
+ if backup ~base_folder:generated_folder ~slug ~contents:code
50
+ then Out_channel.write_all (output_filepath slug) code
51
+ else print_endline @@ "not generating " ^ slug ^ " as unchanged from previous generated file."
48
52
  | Error e -> print_endline ("Failed when generating " ^ slug ^ ", error: " ^ e) in
49
53
  List.iter files ~f:output1
50
54
 
51
- let run ~(templates_folder: string) ~(canonical_data_folder: string) ~(output_folder: string) =
55
+ let run ~(templates_folder: string) ~(canonical_data_folder: string) ~(output_folder: string) ~(generated_folder: string) =
52
56
  let template_files = find_template_files templates_folder in
53
57
  let canonical_data_files = find_canonical_data_files canonical_data_folder in
54
58
  let combined = combine_files template_files canonical_data_files in
55
- output_tests combined output_folder
59
+ output_tests combined output_folder generated_folder
56
60
 
57
61
  let check_canonical_data canonical_data_folder =
58
62
  let ok_count = ref 0 in
@@ -0,0 +1,24 @@
1
+ open Core.Std
2
+
3
+ let mkdir_if_not_present dir =
4
+ if Sys.file_exists dir = `No
5
+ then begin
6
+ Unix.mkdir dir;
7
+ print_endline @@ "Storing generated files in " ^ dir
8
+ end
9
+ else ()
10
+
11
+ let backup ~(base_folder: string) ~(slug: string) ~(contents: string): bool =
12
+ mkdir_if_not_present base_folder;
13
+ let path = Filename.concat base_folder slug in
14
+ let matches_contents =
15
+ Option.try_with (fun () -> In_channel.read_all path)
16
+ |> Option.map ~f:(String.equal contents)
17
+ |> Option.value ~default:false
18
+ in
19
+ if matches_contents
20
+ then false
21
+ else begin
22
+ Out_channel.write_all path contents;
23
+ true
24
+ end
@@ -10,6 +10,8 @@ let is_directory =
10
10
  exit 1
11
11
  )
12
12
 
13
+ let home_dir = Option.value_exn (Sys.getenv "HOME")
14
+
13
15
  let command =
14
16
  Command.basic
15
17
  ~summary:"Generates test code from canonical data."
@@ -18,8 +20,9 @@ let command =
18
20
  +> flag "-t" (optional_with_default "./templates" is_directory) ~doc:"string Directory containing templates."
19
21
  +> flag "-c" (optional_with_default "../../../x-common/exercises" is_directory) ~doc:"string Directory containing canonical data."
20
22
  +> flag "-o" (optional_with_default "../../exercises" is_directory) ~doc:"string Directory to output generated tests."
23
+ +> flag "-g" (optional_with_default (home_dir ^ "/.xocaml-generated") is_directory) ~doc:"string Directory to backup generated tests."
21
24
  )
22
- (fun templates_folder canonical_data_folder output_folder () -> Controller.run templates_folder canonical_data_folder output_folder)
25
+ (fun templates_folder canonical_data_folder output_folder generated_folder () -> Controller.run templates_folder canonical_data_folder output_folder generated_folder)
23
26
 
24
27
  let () =
25
28
  Command.run ~version:"0.1" command
@@ -50,18 +50,25 @@
50
50
  "slug": "word-count",
51
51
  "difficulty": 1,
52
52
  "topics": [
53
- ]
53
+ "Maps",
54
+ "Strings",
55
+ "Transforming"
56
+ ]
54
57
  },
55
58
  {
56
59
  "slug": "pangram",
57
60
  "difficulty": 1,
58
61
  "topics": [
62
+ "Strings"
59
63
  ]
60
64
  },
61
65
  {
62
66
  "slug": "anagram",
63
67
  "difficulty": 1,
64
68
  "topics": [
69
+ "Sequences",
70
+ "Strings",
71
+ "Filtering"
65
72
  ]
66
73
  },
67
74
  {
@@ -74,12 +81,19 @@
74
81
  "slug": "phone-number",
75
82
  "difficulty": 1,
76
83
  "topics": [
84
+ "Optional values",
85
+ "Strings",
86
+ "Parsing",
87
+ "Transforming"
77
88
  ]
78
89
  },
79
90
  {
80
91
  "slug": "grade-school",
81
92
  "difficulty": 1,
82
93
  "topics": [
94
+ "Maps",
95
+ "Sequences",
96
+ "Sorting"
83
97
  ]
84
98
  },
85
99
  {
@@ -1,3 +1,4 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
+
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
2
4
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class AnagramSpecs extends FlatSpec with Matchers {
3
+ class AnagramTest extends FlatSpec with Matchers {
4
4
  it should "detect no matches" in {
5
5
  val detector = new Anagram("diaper")
6
6
  val anagrams = detector.matches(Seq("hello", "world", "zombies", "pants"))
@@ -1,3 +1,3 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
2
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class BobSpecs extends FlatSpec with Matchers {
3
+ class BobTest extends FlatSpec with Matchers {
4
4
  def teenager = new Bob
5
5
 
6
6
  it should "respond to a statement" in {
@@ -1,3 +1,4 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
+
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
2
4
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class GradeSchoolSpecs extends FunSuite with Matchers with OneInstancePerTest {
3
+ class GradeSchoolTest extends FunSuite with Matchers with OneInstancePerTest {
4
4
  val school = new School
5
5
 
6
6
  test ("empty school") {
@@ -1,3 +1,3 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
2
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class HammingSpecs extends FlatSpec with Matchers {
3
+ class HammingTest extends FlatSpec with Matchers {
4
4
  it should "detect no difference between empty strands" in {
5
5
  Hamming.compute("", "") should be (Some(0))
6
6
  }
@@ -1,3 +1,3 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
2
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
@@ -1,3 +1,5 @@
1
- scalaVersion := "2.11.7"
2
1
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
2
+ scalaVersion := "2.12.1"
3
+
4
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
5
+
@@ -1,3 +1,4 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
+
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
2
4
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class PhoneNumberSpecs extends FlatSpec with Matchers {
3
+ class PhoneNumberTest extends FlatSpec with Matchers {
4
4
  behavior of "number"
5
5
 
6
6
  it should "clean the number" in {
@@ -1,3 +1,3 @@
1
- scalaVersion := "2.11.7"
1
+ scalaVersion := "2.12.1"
2
2
 
3
- libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.5" % "test"
3
+ libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"
@@ -1,6 +1,6 @@
1
1
  import org.scalatest._
2
2
 
3
- class WordCountSpecs extends FlatSpec with Matchers {
3
+ class WordCountTest extends FlatSpec with Matchers {
4
4
  it should "count one word" in {
5
5
  val phrase = new Phrase("word")
6
6
  phrase.wordCount should be (Map("word" -> 1))
@@ -1,6 +1,6 @@
1
- ## Setup
2
-
3
- Go through the project setup instructions for Xcode using Swift:
4
-
5
- http://exercism.io/languages/swift
6
-
1
+ ## Setup
2
+
3
+ Go through the project setup instructions for Xcode using Swift:
4
+
5
+ http://exercism.io/languages/swift
6
+
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.0.6.20
4
+ version: 2.0.6.21
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-01-25 00:00:00.000000000 Z
11
+ date: 2017-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -4024,6 +4024,12 @@ files:
4024
4024
  - tracks/julia/docs/RESOURCES.md
4025
4025
  - tracks/julia/docs/TESTS.md
4026
4026
  - tracks/julia/exercises/.keep
4027
+ - tracks/julia/exercises/anagram/anagram.jl
4028
+ - tracks/julia/exercises/anagram/example.jl
4029
+ - tracks/julia/exercises/anagram/runtests.jl
4030
+ - tracks/julia/exercises/leap/example.jl
4031
+ - tracks/julia/exercises/leap/leap.jl
4032
+ - tracks/julia/exercises/leap/runtests.jl
4027
4033
  - tracks/julia/img/.keep
4028
4034
  - tracks/julia/runtests.jl
4029
4035
  - tracks/kotlin/.git
@@ -5135,6 +5141,7 @@ files:
5135
5141
  - tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml
5136
5142
  - tracks/ocaml/tools/test-generator/src/codegen.ml
5137
5143
  - tracks/ocaml/tools/test-generator/src/controller.ml
5144
+ - tracks/ocaml/tools/test-generator/src/files.ml
5138
5145
  - tracks/ocaml/tools/test-generator/src/model.ml
5139
5146
  - tracks/ocaml/tools/test-generator/src/parser.ml
5140
5147
  - tracks/ocaml/tools/test-generator/src/special_cases.ml