trackler 2.0.6.20 → 2.0.6.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.
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