trackler 2.2.1.113 → 2.2.1.114

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/exercises/hello-world/hello_world.sh +1 -1
  4. data/tracks/c/config.json +24 -0
  5. data/tracks/c/exercises/two-fer/README.md +12 -0
  6. data/tracks/c/exercises/two-fer/makefile +25 -0
  7. data/tracks/c/exercises/two-fer/src/example.c +11 -0
  8. data/tracks/c/exercises/two-fer/src/example.h +6 -0
  9. data/tracks/c/exercises/two-fer/test/test_two_fer.c +51 -0
  10. data/tracks/c/exercises/two-fer/test/vendor/unity.c +1300 -0
  11. data/tracks/c/exercises/two-fer/test/vendor/unity.h +274 -0
  12. data/tracks/c/exercises/two-fer/test/vendor/unity_internals.h +701 -0
  13. data/tracks/c/exercises/wordy/README.md +51 -0
  14. data/tracks/c/exercises/wordy/makefile +25 -0
  15. data/tracks/c/exercises/wordy/src/example.c +53 -0
  16. data/tracks/c/exercises/wordy/src/example.h +7 -0
  17. data/tracks/c/exercises/wordy/test/test_wordy.c +206 -0
  18. data/tracks/c/exercises/wordy/test/vendor/unity.c +1300 -0
  19. data/tracks/c/exercises/wordy/test/vendor/unity.h +274 -0
  20. data/tracks/c/exercises/wordy/test/vendor/unity_internals.h +701 -0
  21. data/tracks/dart/.gitignore +6 -7
  22. data/tracks/dart/bin/create_exercise.dart +17 -17
  23. data/tracks/dart/exercises/anagram/lib/anagram.dart +1 -1
  24. data/tracks/dart/exercises/anagram/test/anagram_test.dart +27 -31
  25. data/tracks/dart/exercises/bob/lib/example.dart +7 -1
  26. data/tracks/dart/exercises/bob/test/bob_test.dart +81 -43
  27. data/tracks/dart/exercises/difference-of-squares/lib/example.dart +3 -3
  28. data/tracks/dart/exercises/difference-of-squares/test/difference_of_squares_test.dart +26 -17
  29. data/tracks/dart/pubspec.lock +28 -16
  30. data/tracks/dart/pubspec.yaml +2 -2
  31. data/tracks/elixir/.travis.yml +3 -3
  32. data/tracks/elixir/README.md +1 -1
  33. data/tracks/elixir/config.json +12 -0
  34. data/tracks/elixir/exercises/alphametics/README.md +73 -0
  35. data/tracks/elixir/exercises/alphametics/alphametics.exs +21 -0
  36. data/tracks/elixir/exercises/alphametics/alphametics_test.exs +162 -0
  37. data/tracks/elixir/exercises/alphametics/example.exs +70 -0
  38. data/tracks/elixir/mix.exs +1 -1
  39. data/tracks/elixir/mix.lock +0 -1
  40. data/tracks/elm/config.json +9 -0
  41. data/tracks/elm/exercises/accumulate/Accumulate.elm +6 -1
  42. data/tracks/elm/exercises/accumulate/Accumulate.example.elm +1 -1
  43. data/tracks/elm/exercises/acronym/Acronym.elm +6 -1
  44. data/tracks/elm/exercises/acronym/Acronym.example.elm +1 -1
  45. data/tracks/elm/exercises/all-your-base/AllYourBase.elm +6 -1
  46. data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +1 -1
  47. data/tracks/elm/exercises/allergies/Allergies.elm +11 -1
  48. data/tracks/elm/exercises/allergies/Allergies.example.elm +1 -1
  49. data/tracks/elm/exercises/anagram/Anagram.elm +6 -1
  50. data/tracks/elm/exercises/anagram/Anagram.example.elm +1 -1
  51. data/tracks/elm/exercises/atbash-cipher/AtbashCipher.elm +11 -1
  52. data/tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm +1 -1
  53. data/tracks/elm/exercises/binary-search/BinarySearch.elm +1 -2
  54. data/tracks/elm/exercises/bob/Bob.elm +6 -1
  55. data/tracks/elm/exercises/bob/Bob.example.elm +1 -1
  56. data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.elm +5 -1
  57. data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.elm +16 -1
  58. data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.example.elm +1 -1
  59. data/tracks/elm/exercises/etl/Etl.elm +5 -0
  60. data/tracks/elm/exercises/gigasecond/Gigasecond.elm +5 -0
  61. data/tracks/elm/exercises/grade-school/GradeSchool.elm +32 -1
  62. data/tracks/elm/exercises/grade-school/GradeSchool.example.elm +1 -1
  63. data/tracks/elm/exercises/grains/Grains.elm +5 -1
  64. data/tracks/elm/exercises/grains/Grains.example.elm +1 -1
  65. data/tracks/elm/exercises/hamming/Hamming.elm +6 -1
  66. data/tracks/elm/exercises/hello-world/HelloWorld.elm +2 -2
  67. data/tracks/elm/exercises/hello-world/HelloWorld.example.elm +1 -1
  68. data/tracks/elm/exercises/isogram/Isogram.elm +6 -1
  69. data/tracks/elm/exercises/largest-series-product/LargestSeriesProduct.elm +5 -0
  70. data/tracks/elm/exercises/leap/Leap.elm +6 -1
  71. data/tracks/elm/exercises/leap/Leap.example.elm +1 -1
  72. data/tracks/elm/exercises/list-ops/ListOps.elm +51 -1
  73. data/tracks/elm/exercises/list-ops/ListOps.example.elm +11 -1
  74. data/tracks/elm/exercises/list-ops/tests/Tests.elm +1 -1
  75. data/tracks/elm/exercises/luhn/Luhn.elm +6 -1
  76. data/tracks/elm/exercises/nucleotide-count/NucleotideCount.elm +14 -1
  77. data/tracks/elm/exercises/nucleotide-count/NucleotideCount.example.elm +1 -1
  78. data/tracks/elm/exercises/pangram/Pangram.elm +6 -1
  79. data/tracks/elm/exercises/pangram/Pangram.example.elm +1 -1
  80. data/tracks/elm/exercises/pascals-triangle/Triangle.elm +6 -1
  81. data/tracks/elm/exercises/phone-number/PhoneNumber.elm +11 -1
  82. data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +1 -1
  83. data/tracks/elm/exercises/raindrops/Raindrops.elm +6 -1
  84. data/tracks/elm/exercises/raindrops/Raindrops.example.elm +1 -1
  85. data/tracks/elm/exercises/rna-transcription/RNATranscription.elm +6 -1
  86. data/tracks/elm/exercises/robot-simulator/RobotSimulator.elm +48 -1
  87. data/tracks/elm/exercises/robot-simulator/RobotSimulator.example.elm +10 -1
  88. data/tracks/elm/exercises/roman-numerals/RomanNumerals.elm +5 -0
  89. data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.elm +11 -2
  90. data/tracks/elm/exercises/say/Say.elm +11 -1
  91. data/tracks/elm/exercises/scrabble-score/ScrabbleScore.elm +6 -1
  92. data/tracks/elm/exercises/scrabble-score/ScrabbleScore.example.elm +1 -1
  93. data/tracks/elm/exercises/series/Series.elm +6 -1
  94. data/tracks/elm/exercises/series/Series.example.elm +1 -1
  95. data/tracks/elm/exercises/space-age/SpaceAge.elm +6 -1
  96. data/tracks/elm/exercises/space-age/SpaceAge.example.elm +1 -1
  97. data/tracks/elm/exercises/strain/Strain.elm +11 -1
  98. data/tracks/elm/exercises/strain/Strain.example.elm +1 -1
  99. data/tracks/elm/exercises/sublist/Sublist.elm +13 -1
  100. data/tracks/elm/exercises/sublist/Sublist.example.elm +1 -1
  101. data/tracks/elm/exercises/sum-of-multiples/SumOfMultiples.elm +6 -1
  102. data/tracks/elm/exercises/sum-of-multiples/SumOfMultiples.example.elm +1 -1
  103. data/tracks/elm/exercises/transpose/README.md +95 -0
  104. data/tracks/elm/exercises/transpose/Transpose.elm +6 -0
  105. data/tracks/elm/exercises/transpose/Transpose.example.elm +47 -0
  106. data/tracks/elm/exercises/transpose/elm-package.json +15 -0
  107. data/tracks/elm/exercises/transpose/tests/Tests.elm +202 -0
  108. data/tracks/elm/exercises/transpose/tests/elm-package.json +16 -0
  109. data/tracks/elm/exercises/triangle/Triangle.elm +12 -1
  110. data/tracks/elm/exercises/triangle/Triangle.example.elm +1 -1
  111. data/tracks/elm/exercises/twelve-days/TwelveDays.elm +6 -1
  112. data/tracks/elm/exercises/word-count/WordCount.elm +3 -1
  113. data/tracks/elm/exercises/word-count/WordCount.example.elm +1 -1
  114. data/tracks/go/exercises/crypto-square/crypto_square_test.go +9 -9
  115. data/tracks/go/exercises/crypto-square/example.go +7 -0
  116. data/tracks/idris/docs/INSTALLATION.md +4 -4
  117. data/tracks/java/config.json +13 -0
  118. data/tracks/java/exercises/alphametics/.meta/version +1 -0
  119. data/tracks/java/exercises/go-counting/.meta/src/reference/java/GoCounting.java +152 -0
  120. data/tracks/java/exercises/go-counting/.meta/src/reference/java/Player.java +3 -0
  121. data/tracks/java/exercises/go-counting/.meta/version +2 -0
  122. data/tracks/java/exercises/go-counting/README.md +50 -0
  123. data/tracks/java/exercises/go-counting/build.gradle +18 -0
  124. data/tracks/java/exercises/go-counting/src/main/java/.keep +0 -0
  125. data/tracks/java/exercises/go-counting/src/main/java/Player.java +3 -0
  126. data/tracks/java/exercises/go-counting/src/test/java/GoCountingTest.java +178 -0
  127. data/tracks/java/exercises/isogram/.meta/version +1 -1
  128. data/tracks/java/exercises/perfect-numbers/.meta/version +1 -1
  129. data/tracks/java/exercises/settings.gradle +1 -0
  130. data/tracks/javascript/.eslintignore +0 -1
  131. data/tracks/javascript/exercises/minesweeper/example.js +15 -15
  132. data/tracks/javascript/package-lock.json +7 -14
  133. data/tracks/javascript/package.json +1 -1
  134. data/tracks/perl6/exercises/grains/.meta/exercise-data.yaml +2 -2
  135. data/tracks/perl6/exercises/grains/grains.t +34 -13
  136. data/tracks/r/config.json +13 -0
  137. data/tracks/r/exercises/bob/README.md +2 -0
  138. data/tracks/r/exercises/bob/example.R +5 -0
  139. data/tracks/r/exercises/bob/test_bob.R +1 -1
  140. data/tracks/r/exercises/crypto-square/README.md +84 -0
  141. data/tracks/r/exercises/crypto-square/crypto-square.R +15 -0
  142. data/tracks/r/exercises/crypto-square/example.R +47 -0
  143. data/tracks/r/exercises/crypto-square/test_crypto-square.R +65 -0
  144. data/tracks/rust/exercises/allergies/tests/allergies.rs +36 -36
  145. data/tracks/rust/exercises/book-store/Cargo-example.toml +1 -2
  146. data/tracks/rust/exercises/book-store/Cargo.toml +1 -1
  147. data/tracks/rust/exercises/book-store/example.rs +10 -14
  148. data/tracks/rust/exercises/book-store/src/lib.rs +1 -1
  149. data/tracks/rust/exercises/book-store/tests/book-store.rs +15 -15
  150. data/tracks/rust/exercises/dominoes/example.rs +3 -3
  151. data/tracks/rust/exercises/dominoes/tests/dominoes.rs +26 -26
  152. data/tracks/rust/exercises/grade-school/tests/grade-school.rs +5 -5
  153. data/tracks/rust/exercises/poker/tests/poker.rs +55 -55
  154. data/tracks/rust/exercises/react/tests/react.rs +28 -28
  155. data/tracks/rust/exercises/rectangles/example.rs +1 -1
  156. data/tracks/rust/exercises/rectangles/tests/rectangles.rs +26 -26
  157. data/tracks/rust/exercises/simple-linked-list/tests/simple-linked-list.rs +1 -1
  158. data/tracks/rust/exercises/sum-of-multiples/tests/sum-of-multiples.rs +12 -12
  159. data/tracks/rust/exercises/variable-length-quantity/example.rs +9 -3
  160. data/tracks/rust/exercises/variable-length-quantity/src/lib.rs +7 -1
  161. data/tracks/rust/exercises/variable-length-quantity/tests/variable-length-quantity.rs +3 -3
  162. data/tracks/rust/exercises/word-count/tests/word-count.rs +20 -20
  163. data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +2 -2
  164. data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +12 -12
  165. data/tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala +2 -2
  166. data/tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala +2 -2
  167. data/tracks/typescript/config.json +68 -0
  168. data/tracks/typescript/exercises/armstrong-numbers/README.md +44 -0
  169. data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.example.ts +11 -0
  170. data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.test.ts +35 -0
  171. data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.ts +0 -0
  172. data/tracks/typescript/exercises/armstrong-numbers/package.json +36 -0
  173. data/tracks/typescript/exercises/armstrong-numbers/tsconfig.json +22 -0
  174. data/tracks/typescript/exercises/armstrong-numbers/tslint.json +127 -0
  175. data/tracks/typescript/exercises/armstrong-numbers/yarn.lock +2624 -0
  176. data/tracks/typescript/exercises/perfect-numbers/README.md +50 -0
  177. data/tracks/typescript/exercises/perfect-numbers/package.json +36 -0
  178. data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.example.ts +55 -0
  179. data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.test.ts +72 -0
  180. data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.ts +0 -0
  181. data/tracks/typescript/exercises/perfect-numbers/tsconfig.json +22 -0
  182. data/tracks/typescript/exercises/perfect-numbers/tslint.json +127 -0
  183. data/tracks/typescript/exercises/perfect-numbers/yarn.lock +2624 -0
  184. data/tracks/typescript/exercises/rational-numbers/README.md +61 -0
  185. data/tracks/typescript/exercises/rational-numbers/package.json +36 -0
  186. data/tracks/typescript/exercises/rational-numbers/rational-numbers.example.ts +76 -0
  187. data/tracks/typescript/exercises/rational-numbers/rational-numbers.test.ts +197 -0
  188. data/tracks/typescript/exercises/rational-numbers/rational-numbers.ts +0 -0
  189. data/tracks/typescript/exercises/rational-numbers/tsconfig.json +22 -0
  190. data/tracks/typescript/exercises/rational-numbers/tslint.json +127 -0
  191. data/tracks/typescript/exercises/rational-numbers/yarn.lock +2624 -0
  192. data/tracks/typescript/exercises/run-length-encoding/README.md +56 -0
  193. data/tracks/typescript/exercises/run-length-encoding/package.json +36 -0
  194. data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.example.ts +15 -0
  195. data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.test.ts +71 -0
  196. data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.ts +0 -0
  197. data/tracks/typescript/exercises/run-length-encoding/tsconfig.json +22 -0
  198. data/tracks/typescript/exercises/run-length-encoding/tslint.json +127 -0
  199. data/tracks/typescript/exercises/run-length-encoding/yarn.lock +2624 -0
  200. data/tracks/typescript/exercises/secret-handshake/README.md +61 -0
  201. data/tracks/typescript/exercises/secret-handshake/package.json +36 -0
  202. data/tracks/typescript/exercises/secret-handshake/secret-handshake.example.ts +43 -0
  203. data/tracks/typescript/exercises/secret-handshake/secret-handshake.test.ts +69 -0
  204. data/tracks/typescript/exercises/secret-handshake/secret-handshake.ts +0 -0
  205. data/tracks/typescript/exercises/secret-handshake/tsconfig.json +22 -0
  206. data/tracks/typescript/exercises/secret-handshake/tslint.json +127 -0
  207. data/tracks/typescript/exercises/secret-handshake/yarn.lock +2624 -0
  208. metadata +81 -7
  209. data/tracks/dart/exercises/anagram/pubspec.lock +0 -293
  210. data/tracks/dart/exercises/bob/pubspec.lock +0 -293
  211. data/tracks/dart/exercises/difference-of-squares/pubspec.lock +0 -293
  212. data/tracks/java/exercises/alphametics/.meta/src/version +0 -1
  213. data/tracks/r/exercises/bob/.meta/description.md +0 -10
@@ -1,6 +1,6 @@
1
1
  extern crate grade_school as school;
2
2
 
3
- fn some_strings(v: Vec<&str>) -> Option<Vec<String>> {
3
+ fn some_strings(v: &[&str]) -> Option<Vec<String>> {
4
4
  Some(v.iter().map(|s| s.to_string()).collect())
5
5
  }
6
6
 
@@ -59,7 +59,7 @@ fn test_grade_for_one_student() {
59
59
  let mut s = school::School::new();
60
60
  s.add(2, "Aimee");
61
61
  assert_eq!(s.grade(2),
62
- some_strings(vec!["Aimee"]));
62
+ some_strings(&["Aimee"]));
63
63
  }
64
64
 
65
65
  #[test]
@@ -70,7 +70,7 @@ fn test_grade_returns_students_sorted_by_name() {
70
70
  s.add(2, "Blair");
71
71
  s.add(2, "Paul");
72
72
  assert_eq!(s.grade(2),
73
- some_strings(vec!["Blair", "James", "Paul"]));
73
+ some_strings(&["Blair", "James", "Paul"]));
74
74
  }
75
75
 
76
76
  #[test]
@@ -81,7 +81,7 @@ fn test_add_students_to_different_grades() {
81
81
  s.add(7, "Logan");
82
82
  assert_eq!(s.grades(), vec!(3, 7));
83
83
  assert_eq!(s.grade(3),
84
- some_strings(vec!["Chelsea"]));
84
+ some_strings(&["Chelsea"]));
85
85
  assert_eq!(s.grade(7),
86
- some_strings(vec!["Logan"]));
86
+ some_strings(&["Logan"]));
87
87
  }
@@ -26,15 +26,15 @@ fn test<'a, 'b>(input: &[&'a str], expected: &[&'b str]) {
26
26
 
27
27
  #[test]
28
28
  fn test_single_hand_always_wins() {
29
- test(&vec!["4S 5S 7H 8D JC"], &vec!["4S 5S 7H 8D JC"])
29
+ test(&["4S 5S 7H 8D JC"], &["4S 5S 7H 8D JC"])
30
30
  }
31
31
 
32
32
  #[test]
33
33
  #[ignore]
34
34
  fn test_highest_card_of_all_hands_wins() {
35
35
  test(
36
- &vec!["4D 5S 6S 8D 3C", "2S 4C 7S 9H 10H", "3S 4S 5D 6H JH"],
37
- &vec!["3S 4S 5D 6H JH"],
36
+ &["4D 5S 6S 8D 3C", "2S 4C 7S 9H 10H", "3S 4S 5D 6H JH"],
37
+ &["3S 4S 5D 6H JH"],
38
38
  )
39
39
  }
40
40
 
@@ -42,13 +42,13 @@ fn test_highest_card_of_all_hands_wins() {
42
42
  #[ignore]
43
43
  fn test_a_tie_has_multiple_winners() {
44
44
  test(
45
- &vec![
45
+ &[
46
46
  "4D 5S 6S 8D 3C",
47
47
  "2S 4C 7S 9H 10H",
48
48
  "3S 4S 5D 6H JH",
49
49
  "3H 4H 5C 6C JD",
50
50
  ],
51
- &vec!["3S 4S 5D 6H JH", "3H 4H 5C 6C JD"],
51
+ &["3S 4S 5D 6H JH", "3H 4H 5C 6C JD"],
52
52
  )
53
53
  }
54
54
 
@@ -58,8 +58,8 @@ fn test_high_card_can_be_low_card_in_an_otherwise_tie() {
58
58
  // multiple hands with the same high cards, tie compares next highest ranked,
59
59
  // down to last card
60
60
  test(
61
- &vec!["3S 5H 6S 8D 7H", "2S 5D 6D 8C 7S"],
62
- &vec!["3S 5H 6S 8D 7H"],
61
+ &["3S 5H 6S 8D 7H", "2S 5D 6D 8C 7S"],
62
+ &["3S 5H 6S 8D 7H"],
63
63
  )
64
64
  }
65
65
 
@@ -67,8 +67,8 @@ fn test_high_card_can_be_low_card_in_an_otherwise_tie() {
67
67
  #[ignore]
68
68
  fn test_one_pair_beats_high_card() {
69
69
  test(
70
- &vec!["4S 5H 6C 8D KH", "2S 4H 6S 4D JH"],
71
- &vec!["2S 4H 6S 4D JH"],
70
+ &["4S 5H 6C 8D KH", "2S 4H 6S 4D JH"],
71
+ &["2S 4H 6S 4D JH"],
72
72
  )
73
73
  }
74
74
 
@@ -76,8 +76,8 @@ fn test_one_pair_beats_high_card() {
76
76
  #[ignore]
77
77
  fn test_highest_pair_wins() {
78
78
  test(
79
- &vec!["4S 2H 6S 2D JH", "2S 4H 6C 4D JD"],
80
- &vec!["2S 4H 6C 4D JD"],
79
+ &["4S 2H 6S 2D JH", "2S 4H 6C 4D JD"],
80
+ &["2S 4H 6C 4D JD"],
81
81
  )
82
82
  }
83
83
 
@@ -85,8 +85,8 @@ fn test_highest_pair_wins() {
85
85
  #[ignore]
86
86
  fn test_two_pairs_beats_one_pair() {
87
87
  test(
88
- &vec!["2S 8H 6S 8D JH", "4S 5H 4C 8C 5C"],
89
- &vec!["4S 5H 4C 8C 5C"],
88
+ &["2S 8H 6S 8D JH", "4S 5H 4C 8C 5C"],
89
+ &["4S 5H 4C 8C 5C"],
90
90
  )
91
91
  }
92
92
 
@@ -95,8 +95,8 @@ fn test_two_pairs_beats_one_pair() {
95
95
  fn test_two_pair_ranks() {
96
96
  // both hands have two pairs, highest ranked pair wins
97
97
  test(
98
- &vec!["2S 8H 2D 8D 3H", "4S 5H 4C 8S 5D"],
99
- &vec!["2S 8H 2D 8D 3H"],
98
+ &["2S 8H 2D 8D 3H", "4S 5H 4C 8S 5D"],
99
+ &["2S 8H 2D 8D 3H"],
100
100
  )
101
101
  }
102
102
 
@@ -106,8 +106,8 @@ fn test_two_pairs_second_pair_cascade() {
106
106
  // both hands have two pairs, with the same highest ranked pair,
107
107
  // tie goes to low pair
108
108
  test(
109
- &vec!["2S QS 2C QD JH", "JD QH JS 8D QC"],
110
- &vec!["JD QH JS 8D QC"],
109
+ &["2S QS 2C QD JH", "JD QH JS 8D QC"],
110
+ &["JD QH JS 8D QC"],
111
111
  )
112
112
  }
113
113
 
@@ -117,8 +117,8 @@ fn test_two_pairs_last_card_cascade() {
117
117
  // both hands have two identically ranked pairs,
118
118
  // tie goes to remaining card (kicker)
119
119
  test(
120
- &vec!["JD QH JS 8D QC", "JS QS JC 2D QD"],
121
- &vec!["JD QH JS 8D QC"],
120
+ &["JD QH JS 8D QC", "JS QS JC 2D QD"],
121
+ &["JD QH JS 8D QC"],
122
122
  )
123
123
  }
124
124
 
@@ -126,8 +126,8 @@ fn test_two_pairs_last_card_cascade() {
126
126
  #[ignore]
127
127
  fn test_three_of_a_kind_beats_two_pair() {
128
128
  test(
129
- &vec!["2S 8H 2H 8D JH", "4S 5H 4C 8S 4H"],
130
- &vec!["4S 5H 4C 8S 4H"],
129
+ &["2S 8H 2H 8D JH", "4S 5H 4C 8S 4H"],
130
+ &["4S 5H 4C 8S 4H"],
131
131
  )
132
132
  }
133
133
 
@@ -136,8 +136,8 @@ fn test_three_of_a_kind_beats_two_pair() {
136
136
  fn test_three_of_a_kind_ranks() {
137
137
  //both hands have three of a kind, tie goes to highest ranked triplet
138
138
  test(
139
- &vec!["2S 2H 2C 8D JH", "4S AH AS 8C AD"],
140
- &vec!["4S AH AS 8C AD"],
139
+ &["2S 2H 2C 8D JH", "4S AH AS 8C AD"],
140
+ &["4S AH AS 8C AD"],
141
141
  )
142
142
  }
143
143
 
@@ -147,8 +147,8 @@ fn test_three_of_a_kind_cascade_ranks() {
147
147
  // with multiple decks, two players can have same three of a kind,
148
148
  // ties go to highest remaining cards
149
149
  test(
150
- &vec!["4S AH AS 7C AD", "4S AH AS 8C AD"],
151
- &vec!["4S AH AS 8C AD"],
150
+ &["4S AH AS 7C AD", "4S AH AS 8C AD"],
151
+ &["4S AH AS 8C AD"],
152
152
  )
153
153
  }
154
154
 
@@ -156,8 +156,8 @@ fn test_three_of_a_kind_cascade_ranks() {
156
156
  #[ignore]
157
157
  fn test_straight_beats_three_of_a_kind() {
158
158
  test(
159
- &vec!["4S 5H 4C 8D 4H", "3S 4D 2S 6D 5C"],
160
- &vec!["3S 4D 2S 6D 5C"],
159
+ &["4S 5H 4C 8D 4H", "3S 4D 2S 6D 5C"],
160
+ &["3S 4D 2S 6D 5C"],
161
161
  )
162
162
  }
163
163
 
@@ -166,8 +166,8 @@ fn test_straight_beats_three_of_a_kind() {
166
166
  fn test_aces_can_end_a_straight_high() {
167
167
  // aces can end a straight (10 J Q K A)
168
168
  test(
169
- &vec!["4S 5H 4C 8D 4H", "10D JH QS KD AC"],
170
- &vec!["10D JH QS KD AC"],
169
+ &["4S 5H 4C 8D 4H", "10D JH QS KD AC"],
170
+ &["10D JH QS KD AC"],
171
171
  )
172
172
  }
173
173
 
@@ -176,8 +176,8 @@ fn test_aces_can_end_a_straight_high() {
176
176
  fn test_aces_can_end_a_straight_low() {
177
177
  // aces can start a straight (A 2 3 4 5)
178
178
  test(
179
- &vec!["4S 5H 4C 8D 4H", "4D AH 3S 2D 5C"],
180
- &vec!["4D AH 3S 2D 5C"],
179
+ &["4S 5H 4C 8D 4H", "4D AH 3S 2D 5C"],
180
+ &["4D AH 3S 2D 5C"],
181
181
  )
182
182
  }
183
183
 
@@ -186,8 +186,8 @@ fn test_aces_can_end_a_straight_low() {
186
186
  fn test_straight_cascade() {
187
187
  // both hands with a straight, tie goes to highest ranked card
188
188
  test(
189
- &vec!["4S 6C 7S 8D 5H", "5S 7H 8S 9D 6H"],
190
- &vec!["5S 7H 8S 9D 6H"],
189
+ &["4S 6C 7S 8D 5H", "5S 7H 8S 9D 6H"],
190
+ &["5S 7H 8S 9D 6H"],
191
191
  )
192
192
  }
193
193
 
@@ -196,8 +196,8 @@ fn test_straight_cascade() {
196
196
  fn test_straight_scoring() {
197
197
  // even though an ace is usually high, a 5-high straight is the lowest-scoring straight
198
198
  test(
199
- &vec!["2H 3C 4D 5D 6H", "4S AH 3S 2D 5H"],
200
- &vec!["2H 3C 4D 5D 6H"],
199
+ &["2H 3C 4D 5D 6H", "4S AH 3S 2D 5H"],
200
+ &["2H 3C 4D 5D 6H"],
201
201
  )
202
202
  }
203
203
 
@@ -205,8 +205,8 @@ fn test_straight_scoring() {
205
205
  #[ignore]
206
206
  fn test_flush_beats_a_straight() {
207
207
  test(
208
- &vec!["4C 6H 7D 8D 5H", "2S 4S 5S 6S 7S"],
209
- &vec!["2S 4S 5S 6S 7S"],
208
+ &["4C 6H 7D 8D 5H", "2S 4S 5S 6S 7S"],
209
+ &["2S 4S 5S 6S 7S"],
210
210
  )
211
211
  }
212
212
 
@@ -215,8 +215,8 @@ fn test_flush_beats_a_straight() {
215
215
  fn test_flush_cascade() {
216
216
  // both hands have a flush, tie goes to high card, down to the last one if necessary
217
217
  test(
218
- &vec!["4H 7H 8H 9H 6H", "2S 4S 5S 6S 7S"],
219
- &vec!["4H 7H 8H 9H 6H"],
218
+ &["4H 7H 8H 9H 6H", "2S 4S 5S 6S 7S"],
219
+ &["4H 7H 8H 9H 6H"],
220
220
  )
221
221
  }
222
222
 
@@ -224,8 +224,8 @@ fn test_flush_cascade() {
224
224
  #[ignore]
225
225
  fn test_full_house_beats_a_flush() {
226
226
  test(
227
- &vec!["3H 6H 7H 8H 5H", "4S 5C 4C 5D 4H"],
228
- &vec!["4S 5C 4C 5D 4H"],
227
+ &["3H 6H 7H 8H 5H", "4S 5C 4C 5D 4H"],
228
+ &["4S 5C 4C 5D 4H"],
229
229
  )
230
230
  }
231
231
 
@@ -234,8 +234,8 @@ fn test_full_house_beats_a_flush() {
234
234
  fn test_full_house_ranks() {
235
235
  // both hands have a full house, tie goes to highest-ranked triplet
236
236
  test(
237
- &vec!["4H 4S 4D 9S 9D", "5H 5S 5D 8S 8D"],
238
- &vec!["5H 5S 5D 8S 8D"],
237
+ &["4H 4S 4D 9S 9D", "5H 5S 5D 8S 8D"],
238
+ &["5H 5S 5D 8S 8D"],
239
239
  )
240
240
  }
241
241
 
@@ -244,8 +244,8 @@ fn test_full_house_ranks() {
244
244
  fn test_full_house_cascade() {
245
245
  // with multiple decks, both hands have a full house with the same triplet, tie goes to the pair
246
246
  test(
247
- &vec!["5H 5S 5D 9S 9D", "5H 5S 5D 8S 8D"],
248
- &vec!["5H 5S 5D 9S 9D"],
247
+ &["5H 5S 5D 9S 9D", "5H 5S 5D 8S 8D"],
248
+ &["5H 5S 5D 9S 9D"],
249
249
  )
250
250
  }
251
251
 
@@ -253,8 +253,8 @@ fn test_full_house_cascade() {
253
253
  #[ignore]
254
254
  fn test_four_of_a_kind_beats_full_house() {
255
255
  test(
256
- &vec!["4S 5H 4D 5D 4H", "3S 3H 2S 3D 3C"],
257
- &vec!["3S 3H 2S 3D 3C"],
256
+ &["4S 5H 4D 5D 4H", "3S 3H 2S 3D 3C"],
257
+ &["3S 3H 2S 3D 3C"],
258
258
  )
259
259
  }
260
260
 
@@ -263,8 +263,8 @@ fn test_four_of_a_kind_beats_full_house() {
263
263
  fn test_four_of_a_kind_ranks() {
264
264
  // both hands have four of a kind, tie goes to high quad
265
265
  test(
266
- &vec!["2S 2H 2C 8D 2D", "4S 5H 5S 5D 5C"],
267
- &vec!["4S 5H 5S 5D 5C"],
266
+ &["2S 2H 2C 8D 2D", "4S 5H 5S 5D 5C"],
267
+ &["4S 5H 5S 5D 5C"],
268
268
  )
269
269
  }
270
270
 
@@ -273,8 +273,8 @@ fn test_four_of_a_kind_ranks() {
273
273
  fn test_four_of_a_kind_cascade() {
274
274
  // with multiple decks, both hands with identical four of a kind, tie determined by kicker
275
275
  test(
276
- &vec!["3S 3H 2S 3D 3C", "3S 3H 4S 3D 3C"],
277
- &vec!["3S 3H 4S 3D 3C"],
276
+ &["3S 3H 2S 3D 3C", "3S 3H 4S 3D 3C"],
277
+ &["3S 3H 4S 3D 3C"],
278
278
  )
279
279
  }
280
280
 
@@ -282,8 +282,8 @@ fn test_four_of_a_kind_cascade() {
282
282
  #[ignore]
283
283
  fn test_straight_flush_beats_four_of_a_kind() {
284
284
  test(
285
- &vec!["4S 5H 5S 5D 5C", "7S 8S 9S 6S 10S"],
286
- &vec!["7S 8S 9S 6S 10S"],
285
+ &["4S 5H 5S 5D 5C", "7S 8S 9S 6S 10S"],
286
+ &["7S 8S 9S 6S 10S"],
287
287
  )
288
288
  }
289
289
 
@@ -292,7 +292,7 @@ fn test_straight_flush_beats_four_of_a_kind() {
292
292
  fn test_straight_flush_ranks() {
293
293
  // both hands have straight flush, tie goes to highest-ranked card
294
294
  test(
295
- &vec!["4H 6H 7H 8H 5H", "5S 7S 8S 9S 6S"],
296
- &vec!["5S 7S 8S 9S 6S"],
295
+ &["4H 6H 7H 8H 5H", "5S 7S 8S 9S 6S"],
296
+ &["5S 7S 8S 9S 6S"],
297
297
  )
298
298
  }
@@ -31,7 +31,7 @@ fn error_setting_a_nonexistent_input_cell() {
31
31
  fn compute_cells_calculate_initial_value() {
32
32
  let mut reactor = Reactor::new();
33
33
  let input = reactor.create_input(1);
34
- let output = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
34
+ let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
35
35
  assert_eq!(reactor.value(output), Some(2));
36
36
  }
37
37
 
@@ -41,7 +41,7 @@ fn compute_cells_take_inputs_in_the_right_order() {
41
41
  let mut reactor = Reactor::new();
42
42
  let one = reactor.create_input(1);
43
43
  let two = reactor.create_input(2);
44
- let output = reactor.create_compute(&vec![one, two], |v| v[0] + v[1] * 10).unwrap();
44
+ let output = reactor.create_compute(&[one, two], |v| v[0] + v[1] * 10).unwrap();
45
45
  assert_eq!(reactor.value(output), Some(21));
46
46
  }
47
47
 
@@ -50,7 +50,7 @@ fn compute_cells_take_inputs_in_the_right_order() {
50
50
  fn error_creating_compute_cell_if_input_doesnt_exist() {
51
51
  let mut dummy_reactor = Reactor::new();
52
52
  let input = dummy_reactor.create_input(1);
53
- assert!(Reactor::new().create_compute(&vec![input], |_| 0).is_err());
53
+ assert!(Reactor::new().create_compute(&[input], |_| 0).is_err());
54
54
  }
55
55
 
56
56
  #[test]
@@ -61,7 +61,7 @@ fn do_not_break_cell_if_creating_compute_cell_with_valid_and_invalid_input() {
61
61
  let dummy_cell = dummy_reactor.create_input(2);
62
62
  let mut reactor = Reactor::new();
63
63
  let input = reactor.create_input(1);
64
- assert!(reactor.create_compute(&vec![input, dummy_cell], |_| 0).is_err());
64
+ assert!(reactor.create_compute(&[input, dummy_cell], |_| 0).is_err());
65
65
  assert!(reactor.set_value(input, 5).is_ok());
66
66
  assert_eq!(reactor.value(input), Some(5));
67
67
  }
@@ -71,7 +71,7 @@ fn do_not_break_cell_if_creating_compute_cell_with_valid_and_invalid_input() {
71
71
  fn compute_cells_update_value_when_dependencies_are_changed() {
72
72
  let mut reactor = Reactor::new();
73
73
  let input = reactor.create_input(1);
74
- let output = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
74
+ let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
75
75
  assert_eq!(reactor.value(output), Some(2));
76
76
  assert!(reactor.set_value(input, 3).is_ok());
77
77
  assert_eq!(reactor.value(output), Some(4));
@@ -82,9 +82,9 @@ fn compute_cells_update_value_when_dependencies_are_changed() {
82
82
  fn compute_cells_can_depend_on_other_compute_cells() {
83
83
  let mut reactor = Reactor::new();
84
84
  let input = reactor.create_input(1);
85
- let times_two = reactor.create_compute(&vec![input], |v| v[0] * 2).unwrap();
86
- let times_thirty = reactor.create_compute(&vec![input], |v| v[0] * 30).unwrap();
87
- let output = reactor.create_compute(&vec![times_two, times_thirty], |v| v[0] + v[1]).unwrap();
85
+ let times_two = reactor.create_compute(&[input], |v| v[0] * 2).unwrap();
86
+ let times_thirty = reactor.create_compute(&[input], |v| v[0] * 30).unwrap();
87
+ let output = reactor.create_compute(&[times_two, times_thirty], |v| v[0] + v[1]).unwrap();
88
88
  assert_eq!(reactor.value(output), Some(32));
89
89
  assert!(reactor.set_value(input, 3).is_ok());
90
90
  assert_eq!(reactor.value(output), Some(96));
@@ -95,7 +95,7 @@ fn compute_cells_can_depend_on_other_compute_cells() {
95
95
  fn error_setting_a_compute_cell() {
96
96
  let mut reactor = Reactor::new();
97
97
  let input = reactor.create_input(1);
98
- let output = reactor.create_compute(&vec![input], |_| 0).unwrap();
98
+ let output = reactor.create_compute(&[input], |_| 0).unwrap();
99
99
  assert!(reactor.set_value(output, 3).is_err());
100
100
  }
101
101
 
@@ -108,7 +108,7 @@ fn compute_cells_fire_callbacks() {
108
108
  {
109
109
  let mut reactor = Reactor::new();
110
110
  let input = reactor.create_input(1);
111
- let output = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
111
+ let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
112
112
  assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
113
113
  assert!(reactor.set_value(input, 3).is_ok());
114
114
  }
@@ -120,7 +120,7 @@ fn compute_cells_fire_callbacks() {
120
120
  fn error_adding_callback_to_nonexistent_cell() {
121
121
  let mut dummy_reactor = Reactor::new();
122
122
  let input = dummy_reactor.create_input(1);
123
- let output = dummy_reactor.create_compute(&vec![input], |_| 0).unwrap();
123
+ let output = dummy_reactor.create_compute(&[input], |_| 0).unwrap();
124
124
  assert!(Reactor::new().add_callback(output, |_: usize| println!("hi")).is_err());
125
125
  }
126
126
 
@@ -131,7 +131,7 @@ fn callbacks_only_fire_on_change() {
131
131
  {
132
132
  let mut reactor = Reactor::new();
133
133
  let input = reactor.create_input(1);
134
- let output = reactor.create_compute(&vec![input], |v| if v[0] < 3 { 111 } else { 222 }).unwrap();
134
+ let output = reactor.create_compute(&[input], |v| if v[0] < 3 { 111 } else { 222 }).unwrap();
135
135
  assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
136
136
  assert!(reactor.set_value(input, 2).is_ok());
137
137
  assert!(reactor.set_value(input, 4).is_ok());
@@ -148,7 +148,7 @@ fn callbacks_can_be_added_and_removed() {
148
148
  {
149
149
  let mut reactor = Reactor::new();
150
150
  let input = reactor.create_input(11);
151
- let output = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
151
+ let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
152
152
  let callback = reactor.add_callback(output, |v| values1.push(v)).unwrap();
153
153
  assert!(reactor.add_callback(output, |v| values2.push(v)).is_ok());
154
154
  assert!(reactor.set_value(input, 31).is_ok());
@@ -169,7 +169,7 @@ fn removing_a_callback_multiple_times_doesnt_interfere_with_other_callbacks() {
169
169
  {
170
170
  let mut reactor = Reactor::new();
171
171
  let input = reactor.create_input(1);
172
- let output = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
172
+ let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
173
173
  let callback = reactor.add_callback(output, |v| values1.push(v)).unwrap();
174
174
  assert!(reactor.add_callback(output, |v| values2.push(v)).is_ok());
175
175
  // We want the first remove to be Ok, but we don't care about the others.
@@ -190,10 +190,10 @@ fn callbacks_should_only_be_called_once_even_if_multiple_dependencies_change() {
190
190
  {
191
191
  let mut reactor = Reactor::new();
192
192
  let input = reactor.create_input(1);
193
- let plus_one = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
194
- let minus_one1 = reactor.create_compute(&vec![input], |v| v[0] - 1).unwrap();
195
- let minus_one2 = reactor.create_compute(&vec![minus_one1], |v| v[0] - 1).unwrap();
196
- let output = reactor.create_compute(&vec![plus_one, minus_one2], |v| v[0] * v[1]).unwrap();
193
+ let plus_one = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
194
+ let minus_one1 = reactor.create_compute(&[input], |v| v[0] - 1).unwrap();
195
+ let minus_one2 = reactor.create_compute(&[minus_one1], |v| v[0] - 1).unwrap();
196
+ let output = reactor.create_compute(&[plus_one, minus_one2], |v| v[0] * v[1]).unwrap();
197
197
  assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
198
198
  assert!(reactor.set_value(input, 4).is_ok());
199
199
  }
@@ -207,9 +207,9 @@ fn callbacks_should_not_be_called_if_dependencies_change_but_output_value_doesnt
207
207
  {
208
208
  let mut reactor = Reactor::new();
209
209
  let input = reactor.create_input(1);
210
- let plus_one = reactor.create_compute(&vec![input], |v| v[0] + 1).unwrap();
211
- let minus_one = reactor.create_compute(&vec![input], |v| v[0] - 1).unwrap();
212
- let always_two = reactor.create_compute(&vec![plus_one, minus_one], |v| v[0] - v[1]).unwrap();
210
+ let plus_one = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
211
+ let minus_one = reactor.create_compute(&[input], |v| v[0] - 1).unwrap();
212
+ let always_two = reactor.create_compute(&[plus_one, minus_one], |v| v[0] - v[1]).unwrap();
213
213
  assert!(reactor.add_callback(always_two, |v| values.push(v)).is_ok());
214
214
  for i in 2..5 {
215
215
  assert!(reactor.set_value(input, i).is_ok());
@@ -228,14 +228,14 @@ fn test_adder_with_boolean_values() {
228
228
  let b = reactor.create_input(false);
229
229
  let carry_in = reactor.create_input(false);
230
230
 
231
- let a_xor_b = reactor.create_compute(&vec![a, b], |v| v[0] ^ v[1]).unwrap();
232
- let sum = reactor.create_compute(&vec![a_xor_b, carry_in], |v| v[0] ^ v[1]).unwrap();
231
+ let a_xor_b = reactor.create_compute(&[a, b], |v| v[0] ^ v[1]).unwrap();
232
+ let sum = reactor.create_compute(&[a_xor_b, carry_in], |v| v[0] ^ v[1]).unwrap();
233
233
 
234
- let a_xor_b_and_cin = reactor.create_compute(&vec![a_xor_b, carry_in], |v| v[0] && v[1]).unwrap();
235
- let a_and_b = reactor.create_compute(&vec![a, b], |v| v[0] && v[1]).unwrap();
236
- let carry_out = reactor.create_compute(&vec![a_xor_b_and_cin, a_and_b], |v| v[0] || v[1]).unwrap();
234
+ let a_xor_b_and_cin = reactor.create_compute(&[a_xor_b, carry_in], |v| v[0] && v[1]).unwrap();
235
+ let a_and_b = reactor.create_compute(&[a, b], |v| v[0] && v[1]).unwrap();
236
+ let carry_out = reactor.create_compute(&[a_xor_b_and_cin, a_and_b], |v| v[0] || v[1]).unwrap();
237
237
 
238
- let tests = vec![
238
+ let tests = &[
239
239
  (false, false, false, false, false),
240
240
  (false, false, true, false, true),
241
241
  (false, true, false, false, true),
@@ -246,7 +246,7 @@ fn test_adder_with_boolean_values() {
246
246
  (true, true, true, true, true),
247
247
  ];
248
248
 
249
- for (aval, bval, cinval, expected_cout, expected_sum) in tests {
249
+ for &(aval, bval, cinval, expected_cout, expected_sum) in tests {
250
250
  assert!(reactor.set_value(a, aval).is_ok());
251
251
  assert!(reactor.set_value(b, bval).is_ok());
252
252
  assert!(reactor.set_value(carry_in, cinval).is_ok());