trackler 2.2.1.95 → 2.2.1.96

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/two-bucket/canonical-data.json +31 -31
  4. data/tracks/csharp/docs/ABOUT.md +21 -3
  5. data/tracks/dart/.travis.yml +1 -2
  6. data/tracks/dart/README.md +2 -2
  7. data/tracks/dart/{tool/create-exercise → bin/create_exercise.dart} +14 -10
  8. data/tracks/dart/test/create_exercise_test.dart +132 -0
  9. data/tracks/dart/test/exercises_test.dart +1 -1
  10. data/tracks/fsharp/exercises/list-ops/Example.fs +5 -5
  11. data/tracks/fsharp/exercises/list-ops/ListOps.fs +1 -1
  12. data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +41 -62
  13. data/tracks/fsharp/generators/Common.fs +3 -0
  14. data/tracks/fsharp/generators/Formatting.fs +3 -1
  15. data/tracks/fsharp/generators/Generators.fs +21 -0
  16. data/tracks/go/config.json +14 -0
  17. data/tracks/go/exercises/grep/.meta/gen.go +76 -0
  18. data/tracks/go/exercises/grep/.meta/hints.md +13 -0
  19. data/tracks/go/exercises/grep/README.md +104 -0
  20. data/tracks/go/exercises/grep/cases_test.go +202 -0
  21. data/tracks/go/exercises/grep/example.go +102 -0
  22. data/tracks/go/exercises/grep/grep_test.go +84 -0
  23. data/tracks/java/exercises/anagram/.meta/version +1 -1
  24. data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +0 -32
  25. data/tracks/java/exercises/space-age/.meta/src/reference/java/SpaceAge.java +0 -4
  26. data/tracks/java/exercises/space-age/.meta/version +1 -0
  27. data/tracks/java/exercises/space-age/src/test/java/SpaceAgeTest.java +0 -16
  28. data/tracks/julia/.gitignore +1 -0
  29. data/tracks/julia/exercises/complex-numbers/{HINTS.md → .meta/hints.md} +0 -0
  30. data/tracks/julia/exercises/custom-set/{HINTS.md → .meta/hints.md} +0 -0
  31. data/tracks/julia/exercises/robot-name/{HINTS.md → .meta/hints.md} +0 -0
  32. data/tracks/julia/exercises/rotational-cipher/{HINTS.md → .meta/hints.md} +0 -0
  33. data/tracks/julia/runtests.jl +24 -25
  34. data/tracks/perl6/.travis.yml +7 -3
  35. data/tracks/perl6/Dockerfile +4 -0
  36. data/tracks/perl6/exercises/accumulate/Accumulate.pm6 +1 -1
  37. data/tracks/perl6/exercises/accumulate/Example.pm6 +1 -1
  38. data/tracks/perl6/exercises/accumulate/accumulate.t +6 -15
  39. data/tracks/perl6/exercises/accumulate/example.yaml +2 -3
  40. data/tracks/perl6/exercises/acronym/Acronym.pm6 +1 -1
  41. data/tracks/perl6/exercises/acronym/Example.pm6 +1 -1
  42. data/tracks/perl6/exercises/acronym/acronym.t +7 -29
  43. data/tracks/perl6/exercises/acronym/example.yaml +2 -3
  44. data/tracks/perl6/exercises/all-your-base/AllYourBase.pm6 +1 -1
  45. data/tracks/perl6/exercises/all-your-base/Example.pm6 +1 -1
  46. data/tracks/perl6/exercises/all-your-base/all-your-base.t +7 -29
  47. data/tracks/perl6/exercises/all-your-base/example.yaml +2 -3
  48. data/tracks/perl6/exercises/allergies/Allergies.pm6 +1 -1
  49. data/tracks/perl6/exercises/allergies/Example.pm6 +1 -1
  50. data/tracks/perl6/exercises/allergies/allergies.t +7 -29
  51. data/tracks/perl6/exercises/allergies/example.yaml +2 -3
  52. data/tracks/perl6/exercises/anagram/Anagram.pm6 +1 -1
  53. data/tracks/perl6/exercises/anagram/Example.pm6 +1 -1
  54. data/tracks/perl6/exercises/anagram/anagram.t +7 -29
  55. data/tracks/perl6/exercises/anagram/example.yaml +2 -3
  56. data/tracks/perl6/exercises/atbash-cipher/AtbashCipher.pm6 +1 -1
  57. data/tracks/perl6/exercises/atbash-cipher/Example.pm6 +1 -1
  58. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +7 -29
  59. data/tracks/perl6/exercises/atbash-cipher/example.yaml +2 -3
  60. data/tracks/{julia/exercises/.keep → perl6/exercises/binary/Binary.pm6} +0 -0
  61. data/tracks/perl6/exercises/binary/binary.t +3 -5
  62. data/tracks/perl6/exercises/bob/Bob.pm6 +1 -1
  63. data/tracks/perl6/exercises/bob/Example.pm6 +1 -1
  64. data/tracks/perl6/exercises/bob/bob.t +9 -32
  65. data/tracks/perl6/exercises/bob/example.yaml +3 -7
  66. data/tracks/perl6/exercises/clock/Clock.pm6 +1 -1
  67. data/tracks/perl6/exercises/clock/Example.pm6 +1 -1
  68. data/tracks/perl6/exercises/clock/clock.t +12 -32
  69. data/tracks/perl6/exercises/clock/example.yaml +6 -6
  70. data/tracks/perl6/exercises/etl/ETL.pm6 +1 -1
  71. data/tracks/perl6/exercises/etl/Example.pm6 +1 -1
  72. data/tracks/perl6/exercises/etl/etl.t +7 -29
  73. data/tracks/perl6/exercises/etl/example.yaml +2 -3
  74. data/tracks/perl6/exercises/flatten-array/Example.pm6 +1 -1
  75. data/tracks/perl6/exercises/flatten-array/FlattenArray.pm6 +1 -1
  76. data/tracks/perl6/exercises/flatten-array/example.yaml +2 -3
  77. data/tracks/perl6/exercises/flatten-array/flatten-array.t +7 -29
  78. data/tracks/perl6/exercises/grade-school/Example.pm6 +1 -1
  79. data/tracks/perl6/exercises/grade-school/GradeSchool.pm6 +1 -1
  80. data/tracks/perl6/exercises/grade-school/example.yaml +2 -3
  81. data/tracks/perl6/exercises/grade-school/grade-school.t +6 -15
  82. data/tracks/perl6/exercises/grains/Example.pm6 +1 -1
  83. data/tracks/perl6/exercises/grains/Grains.pm6 +1 -1
  84. data/tracks/perl6/exercises/grains/example.yaml +2 -3
  85. data/tracks/perl6/exercises/grains/grains.t +7 -29
  86. data/tracks/perl6/exercises/hamming/Example.pm6 +1 -1
  87. data/tracks/perl6/exercises/hamming/Hamming.pm6 +1 -1
  88. data/tracks/perl6/exercises/hamming/example.yaml +2 -3
  89. data/tracks/perl6/exercises/hamming/hamming.t +7 -29
  90. data/tracks/perl6/exercises/hello-world/Example.pm6 +1 -1
  91. data/tracks/perl6/exercises/hello-world/HelloWorld.pm6 +1 -1
  92. data/tracks/perl6/exercises/hello-world/example.yaml +2 -8
  93. data/tracks/perl6/exercises/hello-world/hello-world.t +7 -33
  94. data/tracks/perl6/exercises/leap/Example.pm6 +1 -1
  95. data/tracks/perl6/exercises/leap/Leap.pm6 +1 -1
  96. data/tracks/perl6/exercises/leap/example.yaml +2 -3
  97. data/tracks/perl6/exercises/leap/leap.t +7 -29
  98. data/tracks/perl6/exercises/linked-list/Example.pm6 +1 -1
  99. data/tracks/perl6/exercises/linked-list/LinkedList.pm6 +1 -1
  100. data/tracks/perl6/exercises/linked-list/example.yaml +3 -3
  101. data/tracks/perl6/exercises/linked-list/linked-list.t +9 -16
  102. data/tracks/perl6/exercises/luhn/Example.pm6 +1 -1
  103. data/tracks/perl6/exercises/luhn/Luhn.pm6 +1 -1
  104. data/tracks/perl6/exercises/luhn/example.yaml +2 -3
  105. data/tracks/perl6/exercises/luhn/luhn.t +7 -29
  106. data/tracks/perl6/exercises/meetup/Example.pm6 +1 -1
  107. data/tracks/perl6/exercises/meetup/Meetup.pm6 +1 -1
  108. data/tracks/perl6/exercises/meetup/example.yaml +2 -3
  109. data/tracks/perl6/exercises/meetup/meetup.t +7 -29
  110. data/tracks/perl6/exercises/nucleotide-count/Example.pm6 +1 -1
  111. data/tracks/perl6/exercises/nucleotide-count/NucleotideCount.pm6 +1 -1
  112. data/tracks/perl6/exercises/nucleotide-count/example.yaml +2 -3
  113. data/tracks/perl6/exercises/nucleotide-count/nucleotide-count.t +7 -29
  114. data/tracks/perl6/exercises/pangram/Example.pm6 +1 -1
  115. data/tracks/perl6/exercises/pangram/Pangram.pm6 +1 -1
  116. data/tracks/perl6/exercises/pangram/example.yaml +2 -3
  117. data/tracks/perl6/exercises/pangram/pangram.t +7 -29
  118. data/tracks/perl6/exercises/phone-number/Example.pm6 +1 -1
  119. data/tracks/perl6/exercises/phone-number/Phone.pm6 +1 -1
  120. data/tracks/perl6/exercises/phone-number/example.yaml +2 -3
  121. data/tracks/perl6/exercises/phone-number/phone-number.t +7 -29
  122. data/tracks/perl6/exercises/raindrops/Example.pm6 +1 -1
  123. data/tracks/perl6/exercises/raindrops/Raindrops.pm6 +1 -1
  124. data/tracks/perl6/exercises/raindrops/example.yaml +2 -3
  125. data/tracks/perl6/exercises/raindrops/raindrops.t +7 -29
  126. data/tracks/perl6/exercises/rna-transcription/Example.pm6 +1 -1
  127. data/tracks/perl6/exercises/rna-transcription/RNA.pm6 +1 -1
  128. data/tracks/perl6/exercises/rna-transcription/example.yaml +2 -3
  129. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +7 -29
  130. data/tracks/perl6/exercises/robot-name/Example.pm6 +1 -1
  131. data/tracks/perl6/exercises/robot-name/Robot.pm6 +1 -1
  132. data/tracks/perl6/exercises/robot-name/example.yaml +5 -5
  133. data/tracks/perl6/exercises/robot-name/robot-name.t +10 -17
  134. data/tracks/perl6/exercises/roman-numerals/Example.pm6 +1 -1
  135. data/tracks/perl6/exercises/roman-numerals/RomanNumerals.pm6 +1 -1
  136. data/tracks/perl6/exercises/roman-numerals/example.yaml +2 -3
  137. data/tracks/perl6/exercises/roman-numerals/roman-numerals.t +7 -29
  138. data/tracks/perl6/exercises/scrabble-score/Example.pm6 +1 -1
  139. data/tracks/perl6/exercises/scrabble-score/Scrabble.pm6 +1 -1
  140. data/tracks/perl6/exercises/scrabble-score/example.yaml +2 -3
  141. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +7 -29
  142. data/tracks/perl6/exercises/space-age/Example.pm6 +1 -1
  143. data/tracks/perl6/exercises/space-age/SpaceAge.pm6 +1 -1
  144. data/tracks/perl6/exercises/space-age/example.yaml +2 -3
  145. data/tracks/perl6/exercises/space-age/space-age.t +7 -29
  146. data/tracks/perl6/exercises/trinary/Trinary.pm6 +0 -0
  147. data/tracks/perl6/exercises/trinary/trinary.t +2 -5
  148. data/tracks/perl6/exercises/two-fer/Example.pm6 +1 -1
  149. data/tracks/perl6/exercises/two-fer/TwoFer.pm6 +1 -1
  150. data/tracks/perl6/exercises/two-fer/example.yaml +2 -8
  151. data/tracks/perl6/exercises/two-fer/two-fer.t +7 -33
  152. data/tracks/perl6/exercises/word-count/Example.pm6 +1 -1
  153. data/tracks/perl6/exercises/word-count/WordCount.pm6 +1 -1
  154. data/tracks/perl6/exercises/word-count/example.yaml +2 -3
  155. data/tracks/perl6/exercises/word-count/word-count.t +7 -29
  156. data/tracks/perl6/exercises/wordy/Example.pm6 +1 -1
  157. data/tracks/perl6/exercises/wordy/Wordy.pm6 +1 -1
  158. data/tracks/perl6/exercises/wordy/example.yaml +2 -3
  159. data/tracks/perl6/exercises/wordy/wordy.t +7 -29
  160. data/tracks/perl6/templates/test.mustache +10 -39
  161. data/tracks/python/config.json +10 -0
  162. data/tracks/python/exercises/all-your-base/all_your_base_test.py +2 -2
  163. data/tracks/python/exercises/binary-search/binary_search_test.py +2 -2
  164. data/tracks/python/exercises/binary/binary_test.py +2 -2
  165. data/tracks/python/exercises/bob/bob_test.py +4 -2
  166. data/tracks/python/exercises/bob/example.py +5 -2
  167. data/tracks/python/exercises/circular-buffer/circular_buffer_test.py +2 -2
  168. data/tracks/python/exercises/custom-set/README.md +20 -0
  169. data/tracks/python/exercises/custom-set/custom_set.py +30 -0
  170. data/tracks/python/exercises/custom-set/custom_set_test.py +212 -0
  171. data/tracks/python/exercises/custom-set/example.py +45 -0
  172. data/tracks/python/exercises/dot-dsl/dot_dsl_test.py +20 -10
  173. data/tracks/python/exercises/error-handling/error_handling_test.py +2 -2
  174. data/tracks/python/exercises/forth/forth_test.py +18 -18
  175. data/tracks/python/exercises/grains/grains_test.py +2 -2
  176. data/tracks/python/exercises/hamming/hamming_test.py +2 -2
  177. data/tracks/python/exercises/hexadecimal/hexadecimal_test.py +2 -2
  178. data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +2 -2
  179. data/tracks/python/exercises/meetup/meetup_test.py +2 -2
  180. data/tracks/python/exercises/minesweeper/minesweeper_test.py +2 -2
  181. data/tracks/python/exercises/nth-prime/nth_prime_test.py +2 -2
  182. data/tracks/python/exercises/nucleotide-count/nucleotide_count_test.py +2 -2
  183. data/tracks/python/exercises/ocr-numbers/ocr_numbers_test.py +2 -2
  184. data/tracks/python/exercises/octal/octal_test.py +2 -2
  185. data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +2 -2
  186. data/tracks/python/exercises/phone-number/phone_number_test.py +2 -2
  187. data/tracks/python/exercises/pov/pov_test.py +2 -2
  188. data/tracks/python/exercises/protein-translation/protein_translation_test.py +2 -2
  189. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet_test.py +2 -2
  190. data/tracks/python/exercises/queen-attack/queen_attack_test.py +2 -2
  191. data/tracks/python/exercises/rna-transcription/rna_transcription_test.py +2 -2
  192. data/tracks/python/exercises/saddle-points/saddle_points_test.py +2 -2
  193. data/tracks/python/exercises/say/say_test.py +2 -2
  194. data/tracks/python/exercises/scale-generator/scale_generator_test.py +2 -2
  195. data/tracks/python/exercises/series/series_test.py +2 -2
  196. data/tracks/python/exercises/simple-cipher/simple_cipher_test.py +2 -2
  197. data/tracks/python/exercises/simple-linked-list/simple_linked_list_test.py +2 -2
  198. data/tracks/python/exercises/tree-building/tree_building_test.py +2 -2
  199. data/tracks/python/exercises/triangle/example.py +14 -24
  200. data/tracks/python/exercises/triangle/triangle.py +6 -6
  201. data/tracks/python/exercises/triangle/triangle_test.py +42 -44
  202. data/tracks/python/exercises/variable-length-quantity/variable_length_quantity_test.py +2 -2
  203. data/tracks/python/exercises/wordy/wordy_test.py +2 -2
  204. data/tracks/python/test/check-exercises.py +2 -1
  205. metadata +22 -8
@@ -37,9 +37,9 @@ class DNATests(unittest.TestCase):
37
37
  # Utility functions
38
38
  def setUp(self):
39
39
  try:
40
- self.assertRaisesRegex = self.assertRaisesRegexp
40
+ self.assertRaisesRegex
41
41
  except AttributeError:
42
- pass
42
+ self.assertRaisesRegex = self.assertRaisesRegexp
43
43
 
44
44
  def assertRaisesWithMessage(self, exception):
45
45
  return self.assertRaisesRegex(exception, r".+")
@@ -44,9 +44,9 @@ class SaddlePointTest(unittest.TestCase):
44
44
  # Utility functions
45
45
  def setUp(self):
46
46
  try:
47
- self.assertRaisesRegex = self.assertRaisesRegexp
47
+ self.assertRaisesRegex
48
48
  except AttributeError:
49
- pass
49
+ self.assertRaisesRegex = self.assertRaisesRegexp
50
50
 
51
51
  def assertRaisesWithMessage(self, exception):
52
52
  return self.assertRaisesRegex(exception, r".+")
@@ -74,9 +74,9 @@ class SayTest(unittest.TestCase):
74
74
  # Utility functions
75
75
  def setUp(self):
76
76
  try:
77
- self.assertRaisesRegex = self.assertRaisesRegexp
77
+ self.assertRaisesRegex
78
78
  except AttributeError:
79
- pass
79
+ self.assertRaisesRegex = self.assertRaisesRegexp
80
80
 
81
81
  def assertRaisesWithMessage(self, exception):
82
82
  return self.assertRaisesRegex(exception, r".+")
@@ -122,9 +122,9 @@ class ScaleGeneratorTest(unittest.TestCase):
122
122
  # Utility functions
123
123
  def setUp(self):
124
124
  try:
125
- self.assertRaisesRegex = self.assertRaisesRegexp
125
+ self.assertRaisesRegex
126
126
  except AttributeError:
127
- pass
127
+ self.assertRaisesRegex = self.assertRaisesRegexp
128
128
 
129
129
  def assertRaisesWithMessage(self, exception):
130
130
  return self.assertRaisesRegex(exception, r".+")
@@ -47,9 +47,9 @@ class SeriesTest(unittest.TestCase):
47
47
  # Utility functions
48
48
  def setUp(self):
49
49
  try:
50
- self.assertRaisesRegex = self.assertRaisesRegexp
50
+ self.assertRaisesRegex
51
51
  except AttributeError:
52
- pass
52
+ self.assertRaisesRegex = self.assertRaisesRegexp
53
53
 
54
54
  def assertRaisesWithMessage(self, exception):
55
55
  return self.assertRaisesRegex(exception, r".+")
@@ -76,9 +76,9 @@ class CipherTest(unittest.TestCase):
76
76
  # Utility functions
77
77
  def setUp(self):
78
78
  try:
79
- self.assertRaisesRegex = self.assertRaisesRegexp
79
+ self.assertRaisesRegex
80
80
  except AttributeError:
81
- pass
81
+ self.assertRaisesRegex = self.assertRaisesRegexp
82
82
 
83
83
  def assertRaisesWithMessage(self, exception):
84
84
  return self.assertRaisesRegex(exception, r".+")
@@ -110,9 +110,9 @@ class LinkedListTest(unittest.TestCase):
110
110
  # Utility functions
111
111
  def setUp(self):
112
112
  try:
113
- self.assertRaisesRegex = self.assertRaisesRegexp
113
+ self.assertRaisesRegex
114
114
  except AttributeError:
115
- pass
115
+ self.assertRaisesRegex = self.assertRaisesRegexp
116
116
 
117
117
  def assertRaisesWithMessage(self, exception):
118
118
  return self.assertRaisesRegex(exception, r".+")
@@ -181,9 +181,9 @@ class TestBuildingTest(unittest.TestCase):
181
181
  # Utility functions
182
182
  def setUp(self):
183
183
  try:
184
- self.assertRaisesRegex = self.assertRaisesRegexp
184
+ self.assertRaisesRegex
185
185
  except AttributeError:
186
- pass
186
+ self.assertRaisesRegex = self.assertRaisesRegexp
187
187
 
188
188
  def assertRaisesWithMessage(self, exception):
189
189
  return self.assertRaisesRegex(exception, r".+")
@@ -1,30 +1,20 @@
1
- class TriangleError(Exception):
2
- pass
1
+ def valid(sides):
2
+ return (
3
+ sum(sorted(sides)[:2]) >= sorted(sides)[2] and
4
+ all(s > 0 for s in sides)
5
+ )
3
6
 
4
7
 
5
- class Triangle(object):
6
- def __init__(self, x, y, z):
7
- self.sides = (x, y, z)
8
+ def is_equilateral(sides):
9
+ return valid(sides) and all(sides[0] == s for s in sides)
8
10
 
9
- if self._invalid_lengths() or self._violates_inequality():
10
- raise TriangleError("Side lengths are invalid for a triangle")
11
11
 
12
- def _invalid_lengths(self):
13
- return any([side <= 0 for side in self.sides])
12
+ def is_isosceles(sides):
13
+ return (
14
+ valid(sides) and
15
+ any(s1 == s2 for s1, s2 in zip(sorted(sides), sorted(sides)[1:]))
16
+ )
14
17
 
15
- def _violates_inequality(self):
16
- x, y, z = self.sides
17
- return any([
18
- x + y <= z,
19
- x + z <= y,
20
- y + z <= x,
21
- ])
22
18
 
23
- def kind(self):
24
- distinct = len(set(self.sides))
25
- if distinct == 1:
26
- return 'equilateral'
27
- elif distinct == 2:
28
- return 'isosceles'
29
- else:
30
- return 'scalene'
19
+ def is_scalene(sides):
20
+ return valid(sides) and not is_isosceles(sides)
@@ -1,10 +1,10 @@
1
- class TriangleError(Exception):
1
+ def is_equilateral(sides):
2
2
  pass
3
3
 
4
4
 
5
- class Triangle(object):
6
- def __init__(self, side_a, side_b, side_c):
7
- pass
5
+ def is_isosceles(sides):
6
+ pass
7
+
8
8
 
9
- def kind(self):
10
- pass
9
+ def is_scalene(sides):
10
+ pass
@@ -1,67 +1,65 @@
1
1
  import unittest
2
2
 
3
- from triangle import Triangle, TriangleError
3
+ from triangle import is_equilateral, is_isosceles, is_scalene
4
4
 
5
5
 
6
- class TriangleTests(unittest.TestCase):
7
- def test_equilateral_triangles_have_equal_sides(self):
8
- self.assertEqual(Triangle(2, 2, 2).kind(), "equilateral")
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
9
7
 
10
- def test_larger_equilateral_triangles_also_have_equal_sides(self):
11
- self.assertEqual(Triangle(10, 10, 10).kind(), "equilateral")
8
+ class is_equilateralTests(unittest.TestCase):
9
+ def test_true_if_all_sides_are_equal(self):
10
+ self.assertIs(is_equilateral([2, 2, 2]), True)
12
11
 
13
- def test_isosceles_triangles_have_last_two_sides_equal(self):
14
- self.assertEqual(Triangle(3, 4, 4).kind(), "isosceles")
12
+ def test_false_if_any_side_is_unequal(self):
13
+ self.assertIs(is_equilateral([2, 3, 2]), False)
15
14
 
16
- def test_isosceles_triangles_have_first_and_last_sides_equal(self):
17
- self.assertEqual(Triangle(4, 3, 4).kind(), "isosceles")
15
+ def test_false_if_no_sides_are_equal(self):
16
+ self.assertIs(is_equilateral([5, 4, 6]), False)
18
17
 
19
- def test_isosceles_triangles_have_two_first_sides_equal(self):
20
- self.assertEqual(Triangle(4, 4, 3).kind(), "isosceles")
18
+ def test_false_if_all_sides_are_zero(self):
19
+ self.assertIs(is_equilateral([0, 0, 0]), False)
21
20
 
22
- def test_isosceles_triangles_have_in_fact_exactly_two_sides_equal(self):
23
- self.assertEqual(Triangle(10, 10, 2).kind(), "isosceles")
21
+ def test_sides_may_be_floats(self):
22
+ self.assertIs(is_equilateral([0.5, 0.5, 0.5]), True)
24
23
 
25
- def test_scalene_triangles_have_no_equal_sides(self):
26
- self.assertEqual(Triangle(3, 4, 5).kind(), "scalene")
27
24
 
28
- def test_scalene_triangles_have_no_equal_sides_at_a_larger_scale_too(self):
29
- self.assertEqual(Triangle(10, 11, 12).kind(), "scalene")
25
+ class is_isoscelesTests(unittest.TestCase):
26
+ def test_true_if_last_two_sides_are_equal(self):
27
+ self.assertIs(is_isosceles([3, 4, 4]), True)
30
28
 
31
- self.assertEqual(Triangle(5, 4, 2).kind(), "scalene")
29
+ def test_true_if_first_two_sides_are_equal(self):
30
+ self.assertIs(is_isosceles([4, 4, 3]), True)
32
31
 
33
- def test_very_small_triangles_are_legal(self):
34
- self.assertEqual(Triangle(0.4, 0.6, 0.3).kind(), "scalene")
32
+ def test_true_if_first_and_last_sides_are_equal(self):
33
+ self.assertIs(is_isosceles([4, 3, 4]), True)
35
34
 
36
- def test_triangles_with_no_size_are_illegal(self):
37
- with self.assertRaisesWithMessage(TriangleError):
38
- Triangle(0, 0, 0)
35
+ def test_is_equilateral_triangles_are_also_is_isosceles(self):
36
+ self.assertIs(is_isosceles([4, 4, 4]), True)
39
37
 
40
- def test_triangles_with_negative_sides_are_illegal(self):
41
- with self.assertRaisesWithMessage(TriangleError):
42
- Triangle(3, 4, -5)
38
+ def test_false_if_no_sides_are_equal(self):
39
+ self.assertIs(is_isosceles([2, 3, 4]), False)
43
40
 
44
- def test_triangles_violating_triangle_inequality_are_illegal(self):
45
- with self.assertRaisesWithMessage(TriangleError):
46
- Triangle(1, 1, 3)
41
+ def test_violation_of_triangle_inequality_not_is_isosceles(self):
42
+ self.assertIs(is_isosceles([1, 1, 3]), False)
47
43
 
48
- def test_triangles_violating_triangle_inequality_are_illegal_2(self):
49
- with self.assertRaisesWithMessage(TriangleError):
50
- Triangle(2, 4, 2)
44
+ def test_sides_may_be_floats(self):
45
+ self.assertIs(is_isosceles([0.5, 0.4, 0.5]), True)
51
46
 
52
- def test_triangles_violating_triangle_inequality_are_illegal_3(self):
53
- with self.assertRaisesWithMessage(TriangleError):
54
- Triangle(7, 3, 2)
55
47
 
56
- # Utility functions
57
- def setUp(self):
58
- try:
59
- self.assertRaisesRegex = self.assertRaisesRegexp
60
- except AttributeError:
61
- pass
48
+ class is_scaleneTests(unittest.TestCase):
49
+ def test_true_if_no_sides_are_equal(self):
50
+ self.assertIs(is_scalene([5, 4, 6]), True)
62
51
 
63
- def assertRaisesWithMessage(self, exception):
64
- return self.assertRaisesRegex(exception, r".+")
52
+ def test_false_if_all_sides_are_equal(self):
53
+ self.assertIs(is_scalene([4, 4, 4]), False)
54
+
55
+ def test_false_if_two_sides_are_equal(self):
56
+ self.assertIs(is_scalene([4, 4, 3]), False)
57
+
58
+ def test_violation_of_triangle_inequality_not_is_scalene(self):
59
+ self.assertIs(is_scalene([7, 3, 2]), False)
60
+
61
+ def test_sides_may_be_floats(self):
62
+ self.assertIs(is_scalene([0.5, 0.4, 0.6]), True)
65
63
 
66
64
 
67
65
  if __name__ == '__main__':
@@ -98,9 +98,9 @@ class TestVLQ(unittest.TestCase):
98
98
  # Utility functions
99
99
  def setUp(self):
100
100
  try:
101
- self.assertRaisesRegex = self.assertRaisesRegexp
101
+ self.assertRaisesRegex
102
102
  except AttributeError:
103
- pass
103
+ self.assertRaisesRegex = self.assertRaisesRegexp
104
104
 
105
105
  def assertRaisesWithMessage(self, exception):
106
106
  return self.assertRaisesRegex(exception, r".+")
@@ -71,9 +71,9 @@ class WordyTest(unittest.TestCase):
71
71
  # Utility functions
72
72
  def setUp(self):
73
73
  try:
74
- self.assertRaisesRegex = self.assertRaisesRegexp
74
+ self.assertRaisesRegex
75
75
  except AttributeError:
76
- pass
76
+ self.assertRaisesRegex = self.assertRaisesRegexp
77
77
 
78
78
  def assertRaisesWithMessage(self, exception):
79
79
  return self.assertRaisesRegex(exception, r".+")
@@ -47,7 +47,8 @@ def load_config():
47
47
  raise SystemExit(1)
48
48
 
49
49
  try:
50
- problems = [entry['slug'] for entry in data['exercises']]
50
+ problems = [entry['slug'] for entry in data['exercises']
51
+ if "deprecated" not in entry]
51
52
  except KeyError:
52
53
  print('FAIL: config.json has an incorrect format')
53
54
  raise SystemExit(1)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.95
4
+ version: 2.2.1.96
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-18 00:00:00.000000000 Z
11
+ date: 2018-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -3230,6 +3230,7 @@ files:
3230
3230
  - tracks/dart/README.md
3231
3231
  - tracks/dart/analysis_options.yaml
3232
3232
  - tracks/dart/bin/check_formatting
3233
+ - tracks/dart/bin/create_exercise.dart
3233
3234
  - tracks/dart/bin/fetch-configlet
3234
3235
  - tracks/dart/config.json
3235
3236
  - tracks/dart/config/exercise_readme.go.tmpl
@@ -3312,8 +3313,8 @@ files:
3312
3313
  - tracks/dart/img/icon.svg
3313
3314
  - tracks/dart/pubspec.lock
3314
3315
  - tracks/dart/pubspec.yaml
3316
+ - tracks/dart/test/create_exercise_test.dart
3315
3317
  - tracks/dart/test/exercises_test.dart
3316
- - tracks/dart/tool/create-exercise
3317
3318
  - tracks/delphi/.git
3318
3319
  - tracks/delphi/.github/stale.yml
3319
3320
  - tracks/delphi/.gitignore
@@ -6024,6 +6025,12 @@ files:
6024
6025
  - tracks/go/exercises/grains/cases_test.go
6025
6026
  - tracks/go/exercises/grains/example.go
6026
6027
  - tracks/go/exercises/grains/grains_test.go
6028
+ - tracks/go/exercises/grep/.meta/gen.go
6029
+ - tracks/go/exercises/grep/.meta/hints.md
6030
+ - tracks/go/exercises/grep/README.md
6031
+ - tracks/go/exercises/grep/cases_test.go
6032
+ - tracks/go/exercises/grep/example.go
6033
+ - tracks/go/exercises/grep/grep_test.go
6027
6034
  - tracks/go/exercises/hamming/.meta/gen.go
6028
6035
  - tracks/go/exercises/hamming/.meta/hints.md
6029
6036
  - tracks/go/exercises/hamming/README.md
@@ -7757,6 +7764,7 @@ files:
7757
7764
  - tracks/java/exercises/simple-linked-list/src/main/java/.keep
7758
7765
  - tracks/java/exercises/simple-linked-list/src/test/java/SimpleLinkedListTest.java
7759
7766
  - tracks/java/exercises/space-age/.meta/src/reference/java/SpaceAge.java
7767
+ - tracks/java/exercises/space-age/.meta/version
7760
7768
  - tracks/java/exercises/space-age/README.md
7761
7769
  - tracks/java/exercises/space-age/build.gradle
7762
7770
  - tracks/java/exercises/space-age/src/main/java/SpaceAge.java
@@ -8171,7 +8179,6 @@ files:
8171
8179
  - tracks/julia/docs/RESOURCES.md
8172
8180
  - tracks/julia/docs/SNIPPET.txt
8173
8181
  - tracks/julia/docs/TESTS.md
8174
- - tracks/julia/exercises/.keep
8175
8182
  - tracks/julia/exercises/anagram/README.md
8176
8183
  - tracks/julia/exercises/anagram/anagram.jl
8177
8184
  - tracks/julia/exercises/anagram/example.jl
@@ -8188,12 +8195,12 @@ files:
8188
8195
  - tracks/julia/exercises/collatz-conjecture/collatz-conjecture.jl
8189
8196
  - tracks/julia/exercises/collatz-conjecture/example.jl
8190
8197
  - tracks/julia/exercises/collatz-conjecture/runtests.jl
8191
- - tracks/julia/exercises/complex-numbers/HINTS.md
8198
+ - tracks/julia/exercises/complex-numbers/.meta/hints.md
8192
8199
  - tracks/julia/exercises/complex-numbers/README.md
8193
8200
  - tracks/julia/exercises/complex-numbers/complex-numbers.jl
8194
8201
  - tracks/julia/exercises/complex-numbers/example.jl
8195
8202
  - tracks/julia/exercises/complex-numbers/runtests.jl
8196
- - tracks/julia/exercises/custom-set/HINTS.md
8203
+ - tracks/julia/exercises/custom-set/.meta/hints.md
8197
8204
  - tracks/julia/exercises/custom-set/README.md
8198
8205
  - tracks/julia/exercises/custom-set/custom-set.jl
8199
8206
  - tracks/julia/exercises/custom-set/example.jl
@@ -8258,7 +8265,7 @@ files:
8258
8265
  - tracks/julia/exercises/rna-transcription/example.jl
8259
8266
  - tracks/julia/exercises/rna-transcription/rna-transcription.jl
8260
8267
  - tracks/julia/exercises/rna-transcription/runtests.jl
8261
- - tracks/julia/exercises/robot-name/HINTS.md
8268
+ - tracks/julia/exercises/robot-name/.meta/hints.md
8262
8269
  - tracks/julia/exercises/robot-name/README.md
8263
8270
  - tracks/julia/exercises/robot-name/example.jl
8264
8271
  - tracks/julia/exercises/robot-name/robot-name.jl
@@ -8271,7 +8278,7 @@ files:
8271
8278
  - tracks/julia/exercises/roman-numerals/example.jl
8272
8279
  - tracks/julia/exercises/roman-numerals/roman-numerals.jl
8273
8280
  - tracks/julia/exercises/roman-numerals/runtests.jl
8274
- - tracks/julia/exercises/rotational-cipher/HINTS.md
8281
+ - tracks/julia/exercises/rotational-cipher/.meta/hints.md
8275
8282
  - tracks/julia/exercises/rotational-cipher/README.md
8276
8283
  - tracks/julia/exercises/rotational-cipher/example.jl
8277
8284
  - tracks/julia/exercises/rotational-cipher/rotational-cipher.jl
@@ -10190,6 +10197,7 @@ files:
10190
10197
  - tracks/perl6/.github/stale.yml
10191
10198
  - tracks/perl6/.gitignore
10192
10199
  - tracks/perl6/.travis.yml
10200
+ - tracks/perl6/Dockerfile
10193
10201
  - tracks/perl6/LICENSE
10194
10202
  - tracks/perl6/README.md
10195
10203
  - tracks/perl6/bin/README.md
@@ -10235,6 +10243,7 @@ files:
10235
10243
  - tracks/perl6/exercises/atbash-cipher/README.md
10236
10244
  - tracks/perl6/exercises/atbash-cipher/atbash-cipher.t
10237
10245
  - tracks/perl6/exercises/atbash-cipher/example.yaml
10246
+ - tracks/perl6/exercises/binary/Binary.pm6
10238
10247
  - tracks/perl6/exercises/binary/Example.pm6
10239
10248
  - tracks/perl6/exercises/binary/README.md
10240
10249
  - tracks/perl6/exercises/binary/binary.t
@@ -10345,6 +10354,7 @@ files:
10345
10354
  - tracks/perl6/exercises/space-age/space-age.t
10346
10355
  - tracks/perl6/exercises/trinary/Example.pm6
10347
10356
  - tracks/perl6/exercises/trinary/README.md
10357
+ - tracks/perl6/exercises/trinary/Trinary.pm6
10348
10358
  - tracks/perl6/exercises/trinary/trinary.t
10349
10359
  - tracks/perl6/exercises/two-fer/Example.pm6
10350
10360
  - tracks/perl6/exercises/two-fer/README.md
@@ -11030,6 +11040,10 @@ files:
11030
11040
  - tracks/python/exercises/crypto-square/crypto_square.py
11031
11041
  - tracks/python/exercises/crypto-square/crypto_square_test.py
11032
11042
  - tracks/python/exercises/crypto-square/example.py
11043
+ - tracks/python/exercises/custom-set/README.md
11044
+ - tracks/python/exercises/custom-set/custom_set.py
11045
+ - tracks/python/exercises/custom-set/custom_set_test.py
11046
+ - tracks/python/exercises/custom-set/example.py
11033
11047
  - tracks/python/exercises/diamond/README.md
11034
11048
  - tracks/python/exercises/diamond/diamond.py
11035
11049
  - tracks/python/exercises/diamond/diamond_test.py