trackler 2.0.3.8 → 2.0.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/book-store/description.md +67 -0
  3. data/common/exercises/book-store/metadata.yml +4 -0
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/crystal/exercises/difference-of-squares/src/difference_of_squares.cr +1 -0
  6. data/tracks/ecmascript/exercises/custom-set/package.json +1 -0
  7. data/tracks/ecmascript/exercises/palindrome-products/palindrome-products.js +18 -18
  8. data/tracks/fsharp/docs/INSTALLATION.md +2 -3
  9. data/tracks/fsharp/docs/TESTS.md +1 -1
  10. data/tracks/fsharp/exercises/accumulate/HINTS.md +3 -0
  11. data/tracks/fsharp/exercises/diamond/HINTS.md +2 -0
  12. data/tracks/fsharp/exercises/grains/HINTS.md +1 -1
  13. data/tracks/fsharp/exercises/hello-world/HINTS.md +1 -1
  14. data/tracks/fsharp/exercises/parallel-letter-frequency/HINTS.md +3 -0
  15. data/tracks/fsharp/exercises/poker/HINTS.md +2 -0
  16. data/tracks/fsharp/exercises/raindrops/HINTS.md +2 -0
  17. data/tracks/fsharp/exercises/space-age/HINTS.md +3 -0
  18. data/tracks/javascript/exercises/bowling/bowling.spec.js +83 -63
  19. data/tracks/ocaml/config.json +5 -0
  20. data/tracks/ocaml/exercises/leap/test.ml +7 -13
  21. data/tracks/ocaml/exercises/robot-name/.merlin +3 -0
  22. data/tracks/ocaml/exercises/robot-name/Makefile +11 -0
  23. data/tracks/ocaml/exercises/robot-name/example.ml +26 -0
  24. data/tracks/ocaml/exercises/robot-name/robot_name.mli +7 -0
  25. data/tracks/ocaml/exercises/robot-name/test.ml +64 -0
  26. data/tracks/ocaml/tools/test-generator/Makefile +3 -0
  27. data/tracks/ocaml/tools/test-generator/README.md +1 -0
  28. data/tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml +23 -0
  29. data/tracks/ocaml/tools/test-generator/src/controller.ml +12 -0
  30. data/tracks/ocaml/tools/test-generator/src/parser.ml +29 -22
  31. data/tracks/ocaml/tools/test-generator/src/utils.ml +8 -0
  32. data/tracks/ocaml/tools/test-generator/test/clock.json +437 -0
  33. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +18 -4
  34. data/tracks/ocaml/tools/test-generator/test/with-methods-key.json +22 -0
  35. data/tracks/perl6/config.json +5 -0
  36. data/tracks/perl6/exercises/wordy/Example.p6 +16 -0
  37. data/tracks/perl6/exercises/wordy/cases.json +89 -0
  38. data/tracks/perl6/exercises/wordy/wordy.t +29 -0
  39. data/tracks/ruby/exercises/acronym/{.version → .meta/.version} +0 -0
  40. data/tracks/ruby/exercises/alphametics/{.version → .meta/.version} +0 -0
  41. data/tracks/ruby/exercises/anagram/{.version → .meta/.version} +0 -0
  42. data/tracks/ruby/exercises/binary/{.version → .meta/.version} +0 -0
  43. data/tracks/ruby/exercises/bowling/{.version → .meta/.version} +0 -0
  44. data/tracks/ruby/exercises/bracket-push/{.version → .meta/.version} +0 -0
  45. data/tracks/ruby/exercises/clock/{.version → .meta/.version} +0 -0
  46. data/tracks/ruby/exercises/connect/{.version → .meta/.version} +0 -0
  47. data/tracks/ruby/exercises/custom-set/{.version → .meta/.version} +0 -0
  48. data/tracks/ruby/exercises/difference-of-squares/{.version → .meta/.version} +0 -0
  49. data/tracks/ruby/exercises/dominoes/{.version → .meta/.version} +0 -0
  50. data/tracks/ruby/exercises/gigasecond/{.version → .meta/.version} +0 -0
  51. data/tracks/ruby/exercises/hamming/{.version → .meta/.version} +0 -0
  52. data/tracks/ruby/exercises/hello-world/{.version → .meta/.version} +0 -0
  53. data/tracks/ruby/exercises/isogram/{.version → .meta/.version} +0 -0
  54. data/tracks/ruby/exercises/largest-series-product/{.version → .meta/.version} +0 -0
  55. data/tracks/ruby/exercises/leap/{.version → .meta/.version} +0 -0
  56. data/tracks/ruby/exercises/nth-prime/{.version → .meta/.version} +0 -0
  57. data/tracks/ruby/exercises/pangram/{.version → .meta/.version} +0 -0
  58. data/tracks/ruby/exercises/queen-attack/{.version → .meta/.version} +0 -0
  59. data/tracks/ruby/exercises/raindrops/{.version → .meta/.version} +0 -0
  60. data/tracks/ruby/exercises/rna-transcription/{.version → .meta/.version} +0 -0
  61. data/tracks/ruby/exercises/roman-numerals/{.version → .meta/.version} +0 -0
  62. data/tracks/ruby/exercises/run-length-encoding/{.version → .meta/.version} +0 -0
  63. data/tracks/ruby/exercises/sieve/{.version → .meta/.version} +0 -0
  64. data/tracks/ruby/exercises/tournament/{.version → .meta/.version} +0 -0
  65. data/tracks/ruby/exercises/transpose/{.version → .meta/.version} +0 -0
  66. data/tracks/ruby/exercises/triangle/{.version → .meta/.version} +0 -0
  67. data/tracks/ruby/exercises/two-bucket/{.version → .meta/.version} +0 -0
  68. data/tracks/ruby/exercises/word-count/{.version → .meta/.version} +0 -0
  69. data/tracks/ruby/lib/generator.rb +15 -4
  70. data/tracks/rust/config.json +1 -0
  71. data/tracks/rust/exercises/largest-series-product/.gitignore +7 -0
  72. data/tracks/rust/exercises/largest-series-product/Cargo.toml +3 -0
  73. data/tracks/rust/exercises/largest-series-product/HINTS.md +6 -0
  74. data/tracks/rust/exercises/largest-series-product/example.rs +22 -0
  75. data/tracks/rust/exercises/largest-series-product/tests/largest-series-product.rs +105 -0
  76. data/tracks/rust/problems.md +1 -0
  77. data/tracks/scala/.gitignore +1 -0
  78. data/tracks/scala/exercises/accumulate/src/test/scala/{accumulate_test.scala → AccumulateTest.scala} +0 -0
  79. data/tracks/scala/exercises/allergies/src/test/scala/{allergies_test.scala → AllergiesTest.scala} +0 -0
  80. data/tracks/scala/exercises/anagram/src/test/scala/{anagram_test.scala → AnagramTest.scala} +0 -0
  81. data/tracks/scala/exercises/binary/src/test/scala/{binary_test.scala → BinaryTest.scala} +0 -0
  82. data/tracks/scala/exercises/bob/src/test/scala/{bob_test.scala → BobTest.scala} +0 -0
  83. data/tracks/scala/exercises/difference-of-squares/src/test/scala/{squares_test.scala → SquaresTest.scala} +0 -0
  84. data/tracks/scala/exercises/etl/src/test/scala/{etl_test.scala → EtlTest.scala} +0 -0
  85. data/tracks/scala/exercises/gigasecond/src/test/scala/{gigasecond_test.scala → GigasecondTest.scala} +0 -0
  86. data/tracks/scala/exercises/grade-school/src/test/scala/{grade_school_test.scala → GradeSchoolTest.scala} +0 -0
  87. data/tracks/scala/exercises/grains/src/test/scala/{grains_test.scala → GrainsTest.scala} +0 -0
  88. data/tracks/scala/exercises/hamming/src/test/scala/{hamming_test.scala → HammingTest.scala} +0 -0
  89. data/tracks/scala/exercises/hello-world/src/test/scala/HelloWorldTest.scala +2 -0
  90. data/tracks/scala/exercises/leap/src/test/scala/{leap_test.scala → LeapTest.scala} +0 -0
  91. data/tracks/scala/exercises/meetup/src/test/scala/{meetup_test.scala → MeetupTest.scala} +0 -0
  92. data/tracks/scala/exercises/nth-prime/example.scala +3 -1
  93. data/tracks/scala/exercises/nth-prime/src/test/scala/PrimeTest.scala +11 -6
  94. data/tracks/scala/exercises/nucleotide-count/src/test/scala/{nucleotide_count_test.scala → NucleotideCountTest.scala} +0 -0
  95. data/tracks/scala/exercises/palindrome-products/src/test/scala/PalindromeProductsTest.scala +7 -0
  96. data/tracks/scala/exercises/pangram/src/test/scala/{PangramsTest.scala → PangramTest.scala} +0 -0
  97. data/tracks/scala/exercises/parallel-letter-frequency/HINTS.md +26 -0
  98. data/tracks/scala/exercises/phone-number/src/test/scala/{phone_number_test.scala → PhoneNumberTest.scala} +0 -0
  99. data/tracks/scala/exercises/prime-factors/src/test/scala/{primefactors_test.scala → PrimefactorsTest.scala} +10 -0
  100. data/tracks/scala/exercises/raindrops/src/test/scala/{raindrops_test.scala → RaindropsTest.scala} +15 -0
  101. data/tracks/scala/exercises/rna-transcription/src/test/scala/{transcription_test.scala → RnaTranscriptionTest.scala} +8 -0
  102. data/tracks/scala/exercises/robot-name/src/test/scala/{robot_name_test.scala → RobotNameTest.scala} +0 -0
  103. data/tracks/scala/exercises/roman-numerals/src/test/scala/{roman_numerals_test.scala → RomanNumeralsTest.scala} +17 -0
  104. data/tracks/scala/exercises/saddle-points/src/test/scala/{SaddlePointsSpecs.scala → SaddlePointsTest.scala} +3 -0
  105. data/tracks/scala/exercises/scrabble-score/src/test/scala/{scrabble_score_test.scala → ScrabbleScoreTest.scala} +0 -0
  106. data/tracks/scala/exercises/sgf-parsing/src/test/scala/SgfTest.scala +1 -0
  107. data/tracks/scala/exercises/space-age/src/test/scala/{space_age_test.scala → SpaceAgeTest.scala} +0 -0
  108. data/tracks/scala/exercises/sublist/src/test/scala/{sublist_test.scala → SublistTest.scala} +0 -0
  109. data/tracks/scala/exercises/triangle/src/test/scala/{triangle_test.scala → TriangleTest.scala} +7 -0
  110. data/tracks/scala/exercises/word-count/src/test/scala/{word_count_test.scala → WordCountTest.scala} +0 -0
  111. data/tracks/scala/exercises/zipper/src/test/scala/ZipperTest.scala +7 -0
  112. data/tracks/swift/config.json +19 -0
  113. data/tracks/swift/docs/TESTS.md +114 -23
  114. data/tracks/swift/exercises/beer-song/BeerSongExample.swift +32 -0
  115. data/tracks/swift/exercises/beer-song/BeerSongTest.swift +44 -0
  116. data/tracks/swift/exercises/hello-world/{helloWorldExample.swift → HelloWorldExample.swift} +4 -0
  117. data/tracks/swift/exercises/hello-world/{helloWorldTest/helloWorldTest.swift → helloWorldTest.swift} +1 -1
  118. data/tracks/swift/exercises/sublist/SubListTest.swift +95 -0
  119. data/tracks/swift/exercises/sublist/SublistExample.swift +72 -0
  120. data/tracks/swift/img/page_assets/001-splash.png +0 -0
  121. data/tracks/swift/img/page_assets/002-templateChooser.png +0 -0
  122. data/tracks/swift/img/page_assets/003-nameProject.jpg +0 -0
  123. data/tracks/swift/img/page_assets/004-saveProject.jpg +0 -0
  124. data/tracks/swift/img/page_assets/005-folderLayout.png +0 -0
  125. data/tracks/swift/img/page_assets/006-newProjectInitial.jpg +0 -0
  126. data/tracks/swift/img/page_assets/007-fileInspectorUpdate.png +0 -0
  127. data/tracks/swift/img/page_assets/008-templateChooserSwift.png +0 -0
  128. data/tracks/swift/img/page_assets/009-importTestSource.png +0 -0
  129. data/tracks/swift/img/page_assets/010-testsImportExample.png +0 -0
  130. data/tracks/swift/img/page_assets/011-finalLayoutExample.png +0 -0
  131. data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj +36 -56
  132. metadata +103 -65
  133. data/tracks/swift/exercises/hello-world/helloWorld.swift +0 -1
  134. data/tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.pbxproj +0 -256
  135. data/tracks/swift/exercises/hello-world/helloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  136. data/tracks/swift/exercises/hello-world/helloWorldTest/Info.plist +0 -24
@@ -36,6 +36,7 @@ pascals-triangle | Math, Vec, Index (optional)
36
36
  scrabble-score | chaining higher-order functions, HashMap (optional)
37
37
  pangram | filter, ascii (optional)
38
38
  nucleotide-count | filter, entry api, mutablity, match
39
+ largest-series-product | Result, windows, higher-order functions, char
39
40
  word-count | hashmap, str vs string, chars, entry api
40
41
  atbash-cipher | str vs string, primitive types, iterators, chars, ascii
41
42
  etl | btree
@@ -1,6 +1,7 @@
1
1
  *.beam
2
2
  *.swp
3
3
  .DS_Store
4
+ .idea
4
5
  tmp
5
6
  target/
6
7
  bin/configlet
@@ -6,10 +6,12 @@ class HelloWorldTest extends FunSuite with Matchers {
6
6
  }
7
7
 
8
8
  test("with name") {
9
+ pending
9
10
  HelloWorld.hello("Jane") should be ("Hello, Jane!")
10
11
  }
11
12
 
12
13
  test("with umlaut name") {
14
+ pending
13
15
  HelloWorld.hello("Jürgen") should be ("Hello, Jürgen!")
14
16
  }
15
17
  }
@@ -4,5 +4,7 @@ object Prime {
4
4
  private lazy val primes: Stream[BigInt] =
5
5
  Stream.cons(BigInt(2), primes.map(b => new BigInt(b.bigInteger.nextProbablePrime)))
6
6
 
7
- def nth(n: Int): Int = primes.drop(n - 1).head.toInt
7
+ def nth(n: Int): Option[Int] =
8
+ if (n < 1) None
9
+ else Some(primes.drop(n - 1).head.toInt)
8
10
  }
@@ -2,31 +2,36 @@ import org.scalatest.{Matchers, FlatSpec}
2
2
 
3
3
  class PrimeTest extends FlatSpec with Matchers {
4
4
  it should "calculate 1st prime" in {
5
- Prime.nth(1) should be (2)
5
+ Prime.nth(1) should be (Some(2))
6
6
  }
7
7
 
8
8
  it should "calculate 2nd prime" in {
9
9
  pending
10
- Prime.nth(2) should be (3)
10
+ Prime.nth(2) should be (Some(3))
11
11
  }
12
12
 
13
13
  it should "calculate 6th prime" in {
14
14
  pending
15
- Prime.nth(6) should be (13)
15
+ Prime.nth(6) should be (Some(13))
16
16
  }
17
17
 
18
18
  it should "calculate 1000th prime" in {
19
19
  pending
20
- Prime.nth(1000) should be (7919)
20
+ Prime.nth(1000) should be (Some(7919))
21
21
  }
22
22
 
23
23
  it should "calculate 10000th prime" in {
24
24
  pending
25
- Prime.nth(10000) should be (104729)
25
+ Prime.nth(10000) should be (Some(104729))
26
26
  }
27
27
 
28
28
  it should "calculate 10001th prime" in {
29
29
  pending
30
- Prime.nth(10001) should be (104743)
30
+ Prime.nth(10001) should be (Some(104743))
31
+ }
32
+
33
+ it should "not find zeroth prime" in {
34
+ pending
35
+ Prime.nth(0) should be (None)
31
36
  }
32
37
  }
@@ -9,42 +9,49 @@ class PalindromeProductsTest extends FlatSpec with Matchers {
9
9
  }
10
10
 
11
11
  it should "find largest palindrome from a single digit factors" in {
12
+ pending
12
13
  val (value, factors) = PalindromeProducts(0, 9).largest
13
14
  value should be (9)
14
15
  factors should be (Set((1, 9), (3, 3)))
15
16
  }
16
17
 
17
18
  it should "find smallest palindrome from a double digit factors" in {
19
+ pending
18
20
  val (value, factors) = PalindromeProducts(10, 99).smallest
19
21
  value should be (121)
20
22
  factors should be (Set((11, 11)))
21
23
  }
22
24
 
23
25
  it should "find largest palindrome from a double digit factors" in {
26
+ pending
24
27
  val (value, factors) = PalindromeProducts(10, 99).largest
25
28
  value should be (9009)
26
29
  factors should be (Set((91, 99)))
27
30
  }
28
31
 
29
32
  it should "find smallest palindrome from a triple digit factors" in {
33
+ pending
30
34
  val (value, factors) = PalindromeProducts(100, 999).smallest
31
35
  value should be (10201)
32
36
  factors should be (Set((101, 101)))
33
37
  }
34
38
 
35
39
  it should "find largest palindrome from a triple digit factors" in {
40
+ pending
36
41
  val (value, factors) = PalindromeProducts(100, 999).largest
37
42
  value should be (906609)
38
43
  factors should be (Set((913, 993)))
39
44
  }
40
45
 
41
46
  it should "find smallest palindrome from a four digit factors" in {
47
+ pending
42
48
  val (value, factors) = PalindromeProducts(1000, 9999).smallest
43
49
  value should be (1002001)
44
50
  factors should be (Set((1001, 1001)))
45
51
  }
46
52
 
47
53
  it should "find largest palindrome from a four digit factors" in {
54
+ pending
48
55
  val (value, factors) = PalindromeProducts(1000, 9999).largest
49
56
  value should be (99000099)
50
57
  factors should be (Set((9901, 9999)))
@@ -0,0 +1,26 @@
1
+ ## Hints
2
+ According to [this terminology](http://chimera.labs.oreilly.com/books/1230000000929/ch01.html#sec_terminology) you should write a *parallel* and *deterministic*
3
+ program and (by all means!) let Scala deal with the *concurrency* aspect.
4
+ Or else your code could quickly get messy and error-prone with all kinds of nasty
5
+ concurrency bugs. In particular your program could become indeterministic
6
+ which spells in practice: very (in fact, VERY) hard to debug, test and reason about.
7
+
8
+ Having said that it might be a good idea to first write a sequential solution (and
9
+ use the test suite to verify it).
10
+ Only then should you try to parallelize it while keeping the sequential and parallel
11
+ portions of your code as separate as possible.
12
+
13
+ A first iteration could be using Scala's [parallel collections](http://docs.scala-lang.org/overviews/parallel-collections/overview.html). You might find
14
+ that this is almost too simple (especially if you have followed our advice and
15
+ already have a sequential solution).
16
+
17
+ For the second iteration we recommend you try a solution with [scala.concurrent.Future](http://www.scala-lang.org/api/current/scala/concurrent/Future$.html).
18
+ You can consult [this tutorial](http://danielwestheide.com/blog/2013/01/09/the-neophytes-guide-to-scala-part-8-welcome-to-the-future.html) and [its sequel](http://danielwestheide.com/blog/2013/01/16/the-neophytes-guide-to-scala-part-9-promises-and-futures-in-practice.html) for some help.
19
+ Make sure that you
20
+ - have only one single blocking call to wait for the result
21
+ - that it is at the very end of your program, and
22
+ - that it has a timeout.
23
+
24
+ `scala.concurrent.Future` is used in many libraries and the doctor's advice for
25
+ parallel and asynchronous programming in Scala. So it is essential for mastering
26
+ the language and it should become part of your Scala armory.
@@ -6,42 +6,52 @@ class PrimeFactorsTest extends FlatSpec with Matchers {
6
6
  }
7
7
 
8
8
  it should "calc prime factors of 2" in {
9
+ pending
9
10
  PrimeFactors.forNumber(2) should be (List(2))
10
11
  }
11
12
 
12
13
  it should "calc prime factors of 3" in {
14
+ pending
13
15
  PrimeFactors.forNumber(3) should be (List(3))
14
16
  }
15
17
 
16
18
  it should "calc prime factors of 4" in {
19
+ pending
17
20
  PrimeFactors.forNumber(4) should be (List(2, 2))
18
21
  }
19
22
 
20
23
  it should "calc prime factors of 6" in {
24
+ pending
21
25
  PrimeFactors.forNumber(6) should be (List(2, 3))
22
26
  }
23
27
 
24
28
  it should "calc prime factors of 8" in {
29
+ pending
25
30
  PrimeFactors.forNumber(8) should be (List(2, 2, 2))
26
31
  }
27
32
 
28
33
  it should "calc prime factors of 9" in {
34
+ pending
29
35
  PrimeFactors.forNumber(9) should be (List(3, 3))
30
36
  }
31
37
 
32
38
  it should "calc prime factors of 27" in {
39
+ pending
33
40
  PrimeFactors.forNumber(27) should be (List(3, 3, 3))
34
41
  }
35
42
 
36
43
  it should "calc prime factors of 625" in {
44
+ pending
37
45
  PrimeFactors.forNumber(625) should be (List(5, 5, 5, 5))
38
46
  }
39
47
 
40
48
  it should "calc prime factors of 901255" in {
49
+ pending
41
50
  PrimeFactors.forNumber(901255) should be (List(5, 17, 23, 461))
42
51
  }
43
52
 
44
53
  it should "calc prime factors of 93819012551" in {
54
+ pending
45
55
  PrimeFactors.forNumber(Long.MaxValue) should be (List(7, 7, 73, 127, 337, 92737, 649657))
46
56
  }
47
57
  }
@@ -6,62 +6,77 @@ class RaindropsTest extends FlatSpec with Matchers {
6
6
  }
7
7
 
8
8
  it should "convert 3" in {
9
+ pending
9
10
  Raindrops().convert(3) should equal("Pling")
10
11
  }
11
12
 
12
13
  it should "convert 5" in {
14
+ pending
13
15
  Raindrops().convert(5) should equal("Plang")
14
16
  }
15
17
 
16
18
  it should "convert 7" in {
19
+ pending
17
20
  Raindrops().convert(7) should equal("Plong")
18
21
  }
19
22
 
20
23
  it should "convert 6" in {
24
+ pending
21
25
  Raindrops().convert(6) should equal("Pling")
22
26
  }
23
27
 
24
28
  it should "convert 9" in {
29
+ pending
25
30
  Raindrops().convert(9) should equal("Pling")
26
31
  }
27
32
 
28
33
  it should "convert 10" in {
34
+ pending
29
35
  Raindrops().convert(10) should equal("Plang")
30
36
  }
31
37
 
32
38
  it should "convert 14" in {
39
+ pending
33
40
  Raindrops().convert(14) should equal("Plong")
34
41
  }
35
42
 
36
43
  it should "convert 15" in {
44
+ pending
37
45
  Raindrops().convert(15) should equal("PlingPlang")
38
46
  }
39
47
 
40
48
  it should "convert 21" in {
49
+ pending
41
50
  Raindrops().convert(21) should equal("PlingPlong")
42
51
  }
43
52
 
44
53
  it should "convert 25" in {
54
+ pending
45
55
  Raindrops().convert(25) should equal("Plang")
46
56
  }
47
57
 
48
58
  it should "convert 35" in {
59
+ pending
49
60
  Raindrops().convert(35) should equal("PlangPlong")
50
61
  }
51
62
 
52
63
  it should "convert 49" in {
64
+ pending
53
65
  Raindrops().convert(49) should equal("Plong")
54
66
  }
55
67
 
56
68
  it should "convert 52" in {
69
+ pending
57
70
  Raindrops().convert(52) should equal("52")
58
71
  }
59
72
 
60
73
  it should "convert 105" in {
74
+ pending
61
75
  Raindrops().convert(105) should equal("PlingPlangPlong")
62
76
  }
63
77
 
64
78
  it should "convert 12121" in {
79
+ pending
65
80
  Raindrops().convert(12121) should equal("12121")
66
81
  }
67
82
  }
@@ -6,34 +6,42 @@ class DnaTest extends FunSuite with Matchers {
6
6
  }
7
7
 
8
8
  test("transcribes cytidine to guanine") {
9
+ pending
9
10
  Dna.toRna("C") should be (Some("G"))
10
11
  }
11
12
 
12
13
  test("transcribes guanosine to cytosine") {
14
+ pending
13
15
  Dna.toRna("G") should be (Some("C"))
14
16
  }
15
17
 
16
18
  test("transcribes adenosine to uracil") {
19
+ pending
17
20
  Dna.toRna("A") should be (Some("U"))
18
21
  }
19
22
 
20
23
  test("transcribes thymidine to adenine") {
24
+ pending
21
25
  Dna.toRna("T") should be (Some("A"))
22
26
  }
23
27
 
24
28
  test("transcribes all ACGT to UGCA") {
29
+ pending
25
30
  Dna.toRna("ACGTGGTCTTAA") should be (Some("UGCACCAGAAUU"))
26
31
  }
27
32
 
28
33
  test("transcribes RNA only nucleotide uracil to None") {
34
+ pending
29
35
  Dna.toRna("U") should be (None)
30
36
  }
31
37
 
32
38
  test("transcribes completely invalid DNA to None") {
39
+ pending
33
40
  Dna.toRna("XXX") should be (None)
34
41
  }
35
42
 
36
43
  test("transcribes partially invalid DNA to None") {
44
+ pending
37
45
  Dna.toRna("ACGTXXXCTTAA") should be (None)
38
46
  }
39
47
  }
@@ -7,70 +7,87 @@ class RomanNumeralsSpecs extends FunSpec with Matchers {
7
7
  }
8
8
 
9
9
  it ("1 equals I") {
10
+ pending
10
11
  RomanNumeral(1).value should be ("I")
11
12
  }
12
13
 
13
14
  it ("2 equals II") {
15
+ pending
14
16
  RomanNumeral(2).value should be ("II")
15
17
  }
16
18
 
17
19
  it ("3 equals III") {
20
+ pending
18
21
  RomanNumeral(3).value should be ("III")
19
22
  }
20
23
 
21
24
  it ("4 equals IV") {
25
+ pending
22
26
  RomanNumeral(4).value should be ("IV")
23
27
  }
24
28
 
25
29
  it ("5 equals V") {
30
+ pending
26
31
  RomanNumeral(5).value should be ("V")
27
32
  }
28
33
 
29
34
  it ("6 equals VI") {
35
+ pending
30
36
  RomanNumeral(6).value should be ("VI")
31
37
  }
32
38
 
33
39
  it ("9 equals IX") {
40
+ pending
34
41
  RomanNumeral(9).value should be ("IX")
35
42
  }
36
43
 
37
44
  it ("27 equals XXVII") {
45
+ pending
38
46
  RomanNumeral(27).value should be ("XXVII")
39
47
  }
40
48
 
41
49
  it ("48 equals XLVIII") {
50
+ pending
42
51
  RomanNumeral(48).value should be ("XLVIII")
43
52
  }
44
53
 
45
54
  it ("59 equals LIX") {
55
+ pending
46
56
  RomanNumeral(59).value should be ("LIX")
47
57
  }
48
58
 
49
59
  it ("93 equals XCIII") {
60
+ pending
50
61
  RomanNumeral(93).value should be ("XCIII")
51
62
  }
52
63
 
53
64
  it ("141 equals CXLI") {
65
+ pending
54
66
  RomanNumeral(141).value should be ("CXLI")
55
67
  }
56
68
 
57
69
  it ("402 equals CDII") {
70
+ pending
58
71
  RomanNumeral(402).value should be ("CDII")
59
72
  }
60
73
 
61
74
  it ("575 equals DLXXV") {
75
+ pending
62
76
  RomanNumeral(575).value should be ("DLXXV")
63
77
  }
64
78
 
65
79
  it ("911 equals CMXI") {
80
+ pending
66
81
  RomanNumeral(911).value should be ("CMXI")
67
82
  }
68
83
 
69
84
  it ("1024 equals MXXIV") {
85
+ pending
70
86
  RomanNumeral(1024).value should be ("MXXIV")
71
87
  }
72
88
 
73
89
  it ("3000 equals MMM") {
90
+ pending
74
91
  RomanNumeral(3000).value should be ("MMM")
75
92
  }
76
93
  }