trackler 2.1.0.6 → 2.1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/common/exercises/rail-fence-cipher/canonical-data.json +7 -7
  3. data/common/exercises/scrabble-score/description.md +2 -2
  4. data/lib/trackler/version.rb +1 -1
  5. data/tracks/delphi/exercises/clock/uClockExample.pas +5 -5
  6. data/tracks/delphi/exercises/clock/uClockTest.pas +435 -49
  7. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  8. data/tracks/ocaml/exercises/triangle/test.ml +8 -8
  9. data/tracks/ocaml/exercises/triangle/triangle.mli +1 -1
  10. data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +3 -3
  11. data/tracks/perl6/exercises/all-your-base/AllYourBase.pm6 +1 -1
  12. data/tracks/perl6/exercises/all-your-base/Example.pm +2 -2
  13. data/tracks/perl6/exercises/all-your-base/all-your-base.t +215 -138
  14. data/tracks/perl6/exercises/all-your-base/example.yaml +14 -0
  15. data/tracks/ruby/exercises/acronym/.meta/generator/acronym_cases.rb +1 -1
  16. data/tracks/ruby/exercises/all-your-base/.meta/generator/all_your_base_cases.rb +4 -10
  17. data/tracks/ruby/exercises/all-your-base/all_your_base_test.rb +3 -0
  18. data/tracks/ruby/exercises/alphametics/.meta/generator/alphametics_cases.rb +1 -1
  19. data/tracks/ruby/exercises/alphametics/{example.tt → .meta/generator/test_template.erb} +0 -0
  20. data/tracks/ruby/exercises/anagram/.meta/generator/anagram_cases.rb +1 -1
  21. data/tracks/ruby/exercises/beer-song/.meta/generator/beer_song_cases.rb +3 -6
  22. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -1
  23. data/tracks/ruby/exercises/binary/.meta/generator/binary_cases.rb +1 -1
  24. data/tracks/ruby/exercises/bowling/.meta/generator/bowling_cases.rb +1 -1
  25. data/tracks/ruby/exercises/bowling/{example.tt → .meta/generator/test_template.erb} +0 -0
  26. data/tracks/ruby/exercises/bracket-push/.meta/generator/bracket_push_cases.rb +1 -1
  27. data/tracks/ruby/exercises/clock/.meta/generator/clock_cases.rb +1 -1
  28. data/tracks/ruby/exercises/connect/.meta/generator/connect_cases.rb +1 -1
  29. data/tracks/ruby/exercises/connect/{example.tt → .meta/generator/test_template.erb} +0 -0
  30. data/tracks/ruby/exercises/custom-set/.meta/generator/custom_set_cases.rb +1 -1
  31. data/tracks/ruby/exercises/difference-of-squares/.meta/generator/difference_of_squares_cases.rb +1 -1
  32. data/tracks/ruby/exercises/difference-of-squares/difference_of_squares_test.rb +0 -6
  33. data/tracks/ruby/exercises/dominoes/.meta/generator/dominoes_cases.rb +1 -1
  34. data/tracks/ruby/exercises/dominoes/{example.tt → .meta/generator/test_template.erb} +0 -0
  35. data/tracks/ruby/exercises/etl/.meta/generator/etl_cases.rb +1 -1
  36. data/tracks/ruby/exercises/gigasecond/.meta/generator/gigasecond_cases.rb +1 -1
  37. data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +3 -5
  38. data/tracks/ruby/exercises/grains/.meta/generator/grains_cases.rb +1 -1
  39. data/tracks/ruby/exercises/hamming/.meta/generator/hamming_cases.rb +1 -1
  40. data/tracks/ruby/exercises/hello-world/.meta/generator/hello_world_cases.rb +1 -1
  41. data/tracks/ruby/exercises/hello-world/{example.tt → .meta/generator/test_template.erb} +0 -0
  42. data/tracks/ruby/exercises/isogram/.meta/generator/isogram_cases.rb +1 -1
  43. data/tracks/ruby/exercises/largest-series-product/.meta/generator/largest_series_product_cases.rb +1 -1
  44. data/tracks/ruby/exercises/leap/.meta/generator/leap_cases.rb +1 -1
  45. data/tracks/ruby/exercises/leap/{example.tt → .meta/generator/test_template.erb} +0 -0
  46. data/tracks/ruby/exercises/luhn/.meta/generator/luhn_cases.rb +1 -1
  47. data/tracks/ruby/exercises/nth-prime/.meta/generator/nth_prime_cases.rb +1 -1
  48. data/tracks/ruby/exercises/ocr-numbers/.meta/generator/ocr_numbers_cases.rb +1 -1
  49. data/tracks/ruby/exercises/pangram/.meta/generator/pangram_cases.rb +1 -1
  50. data/tracks/ruby/exercises/pig-latin/.meta/generator/pig_latin_cases.rb +1 -1
  51. data/tracks/ruby/exercises/queen-attack/.meta/generator/queen_attack_cases.rb +1 -1
  52. data/tracks/ruby/exercises/raindrops/.meta/generator/raindrops_cases.rb +1 -1
  53. data/tracks/ruby/exercises/rna-transcription/.meta/generator/rna_transcription_cases.rb +1 -1
  54. data/tracks/ruby/exercises/roman-numerals/.meta/generator/roman_numerals_cases.rb +1 -1
  55. data/tracks/ruby/exercises/run-length-encoding/.meta/generator/run_length_encoding_cases.rb +1 -1
  56. data/tracks/ruby/exercises/say/.meta/generator/say_cases.rb +1 -1
  57. data/tracks/ruby/exercises/sieve/.meta/generator/sieve_cases.rb +1 -1
  58. data/tracks/ruby/exercises/tournament/.meta/generator/tournament_cases.rb +7 -24
  59. data/tracks/ruby/exercises/tournament/tournament_test.rb +37 -38
  60. data/tracks/ruby/exercises/transpose/.meta/generator/transpose_cases.rb +7 -23
  61. data/tracks/ruby/exercises/transpose/transpose_test.rb +22 -22
  62. data/tracks/ruby/exercises/triangle/.meta/generator/triangle_cases.rb +1 -1
  63. data/tracks/ruby/exercises/two-bucket/.meta/generator/two_bucket_cases.rb +1 -1
  64. data/tracks/ruby/exercises/word-count/.meta/generator/word_count_cases.rb +1 -1
  65. data/tracks/ruby/exercises/wordy/.meta/generator/wordy_cases.rb +1 -1
  66. data/tracks/ruby/lib/generator/exercise_case/assertion.rb +33 -0
  67. data/tracks/ruby/lib/generator/exercise_cases.rb +46 -49
  68. data/tracks/ruby/lib/generator/files/generator_cases.rb +0 -14
  69. data/tracks/ruby/test/fixtures/xruby/{lib → exercises/alpha/.meta/generator}/alpha_cases.rb +0 -0
  70. data/tracks/ruby/test/fixtures/xruby/exercises/beta/.meta/generator/beta_cases.rb +1 -1
  71. data/tracks/ruby/test/generator/case_values_test.rb +5 -5
  72. data/tracks/ruby/test/generator/exercise_case/assertion_test.rb +46 -0
  73. data/tracks/ruby/test/generator/exercise_cases_test.rb +47 -0
  74. data/tracks/ruby/test/generator/files/generate_cases_test.rb +0 -12
  75. metadata +13 -15
  76. data/tracks/ruby/exercises/all-your-base/example.tt +0 -18
  77. data/tracks/ruby/exercises/beer-song/example.tt +0 -24
  78. data/tracks/ruby/exercises/difference-of-squares/example.tt +0 -27
  79. data/tracks/ruby/exercises/gigasecond/example.tt +0 -23
  80. data/tracks/ruby/exercises/tournament/example.tt +0 -25
  81. data/tracks/ruby/exercises/transpose/example.tt +0 -24
@@ -10,6 +10,6 @@ let is_triangle a b c =
10
10
 
11
11
  let is_equilateral a b c = is_triangle a b c && a = b && b = c
12
12
 
13
- let is_isoceles a b c = is_triangle a b c && (a = b || b = c || a = c)
13
+ let is_isosceles a b c = is_triangle a b c && (a = b || b = c || a = c)
14
14
 
15
15
  let is_scalene a b c = is_triangle a b c && (a <> b && b <> c)
@@ -15,19 +15,19 @@ let equilateral_tests = [
15
15
  ae false (is_equilateral 0 0 0);
16
16
  ]
17
17
 
18
- let isoceles_tests = [
18
+ let isosceles_tests = [
19
19
  "true if last two sides are equal" >::
20
- ae true (is_isoceles 3 4 4);
20
+ ae true (is_isosceles 3 4 4);
21
21
  "true if first two sides are equal" >::
22
- ae true (is_isoceles 4 4 3);
22
+ ae true (is_isosceles 4 4 3);
23
23
  "true if first and last sides are equal" >::
24
- ae true (is_isoceles 4 3 4);
24
+ ae true (is_isosceles 4 3 4);
25
25
  "equilateral triangles are also isosceles" >::
26
- ae true (is_isoceles 4 4 4);
26
+ ae true (is_isosceles 4 4 4);
27
27
  "false if no sides are equal" >::
28
- ae false (is_isoceles 2 3 4);
28
+ ae false (is_isosceles 2 3 4);
29
29
  "Sides that violate triangle inequality are not isosceles, even if two are equal" >::
30
- ae false (is_isoceles 1 1 3);
30
+ ae false (is_isosceles 1 1 3);
31
31
  ]
32
32
 
33
33
  let scalene_tests = [
@@ -44,5 +44,5 @@ let scalene_tests = [
44
44
  let () =
45
45
  run_test_tt_main (
46
46
  "triangle tests" >:::
47
- List.concat [equilateral_tests; isoceles_tests; scalene_tests]
47
+ List.concat [equilateral_tests; isosceles_tests; scalene_tests]
48
48
  )
@@ -1,5 +1,5 @@
1
1
  val is_equilateral : int -> int -> int -> bool
2
2
 
3
- val is_isoceles : int -> int -> int -> bool
3
+ val is_isosceles : int -> int -> int -> bool
4
4
 
5
5
  val is_scalene : int -> int -> int -> bool
@@ -11,10 +11,10 @@ let (* SUITE returns_true_if_the_triangle_is_equilateral *)equilateral_tests = [
11
11
  END TEST *)
12
12
  ]
13
13
  (* END SUITE *)
14
- let (* SUITE returns_true_if_the_triangle_is_isosceles *)isoceles_tests = [
14
+ let (* SUITE returns_true_if_the_triangle_is_isosceles *)isosceles_tests = [
15
15
  (* TEST
16
16
  "$description" >::
17
- ae $expected (is_isoceles $sides);
17
+ ae $expected (is_isosceles $sides);
18
18
  END TEST *)
19
19
  ]
20
20
  (* END SUITE *)
@@ -29,5 +29,5 @@ let (* SUITE returns_true_if_the_triangle_is_scalene *)scalene_tests = [
29
29
  let () =
30
30
  run_test_tt_main (
31
31
  "triangle tests" >:::
32
- List.concat [equilateral_tests; isoceles_tests; scalene_tests]
32
+ List.concat [equilateral_tests; isosceles_tests; scalene_tests]
33
33
  )
@@ -1 +1 @@
1
- unit module AllYourBase:ver<1>;
1
+ unit module AllYourBase:ver<2>;
@@ -1,4 +1,4 @@
1
- unit module AllYourBase:ver<1>;
1
+ unit module AllYourBase:ver<2>;
2
2
 
3
3
  class X::AllYourBase::InvalidBase is Exception {
4
4
  has $.payload;
@@ -18,7 +18,7 @@ sub convert-base (Int:D $input-base, @input-digits, Int:D $output-base --> Array
18
18
  }
19
19
 
20
20
  sub to-decimal ($input-base, @input-digits) {
21
- return [] if !@input-digits;
21
+ return [].Slip if !@input-digits;
22
22
  my $elems = @input-digits.elems;
23
23
  for @input-digits {
24
24
  if $_ == 0 { $elems-- }
@@ -1,15 +1,17 @@
1
1
  #!/usr/bin/env perl6
2
2
  use v6;
3
3
  use Test;
4
- use lib $?FILE.IO.dirname;
4
+ use lib my $dir = $?FILE.IO.dirname;
5
+ use JSON::Tiny;
5
6
 
6
7
  my $exercise = 'AllYourBase';
7
- my $version = v1;
8
+ my $version = v2;
8
9
  my $module = %*ENV<EXERCISM> ?? 'Example' !! $exercise;
9
10
  plan 23;
10
11
 
11
12
  use-ok $module or bail-out;
12
13
  require ::($module);
14
+
13
15
  if ::($exercise).^ver !~~ $version {
14
16
  warn "\nExercise version mismatch. Further tests may fail!"
15
17
  ~ "\n$exercise is $(::($exercise).^ver.gist). "
@@ -17,147 +19,222 @@ if ::($exercise).^ver !~~ $version {
17
19
  bail-out 'Example version must match test version.' if %*ENV<EXERCISM>;
18
20
  }
19
21
 
20
- my @subs;
21
- BEGIN { @subs = <&convert-base> }
22
- subtest 'Subroutine(s)', {
23
- plan 1;
24
- eval-lives-ok "use $module; ::('$_').defined or die '$_ is not defined.'", $_ for @subs;
25
- } or bail-out 'All subroutines must be defined and exported.';
26
- require ::($module) @subs.eager;
27
-
28
- is convert-base(|.<input_base input_digits output_base>), |.<expected description> for @(my %cases.<valid>);
22
+ require ::($module) <&convert-base>;
29
23
 
30
- my $exception = 'Exception';
31
- for @(%cases<invalid>) {
32
- $exception = 'X::AllYourBase::Invalid' ~ (.<description> ~~ /«digit»/ ?? 'Digit' !! 'Base') if %*ENV<EXERCISM>;
33
- throws-like {convert-base |.<input_base input_digits output_base>}, ::($exception), .<description>;
24
+ my $c-data;
25
+ sub test ($case, $expected) { is-deeply &::('convert-base')(|$case<input_base input_digits output_base>), $expected, $case<description> }
26
+ for @($c-data<cases>) {
27
+ when .<expected> ~~ Array { test $_, .<expected> }
28
+ when .<description> ~~ /base|digit/ { throws-like {&::('convert-base')(|.<input_base input_digits output_base>)}, Exception, .<description> }
29
+ when .<description> eq 'leading zeros' { test $_, [4,2] }
30
+ when .<description> eq 'empty list' { test $_, [] }
31
+ when .<description> ~~ /zero/ { test $_, [0] }
32
+ default { flunk .<description> } # To ensure that no canonical-data cases are missed.
34
33
  }
35
34
 
35
+ if %*ENV<EXERCISM> && (my $c-data-file =
36
+ "$dir/../../x-common/exercises/{$dir.IO.resolve.basename}/canonical-data.json".IO.resolve) ~~ :f
37
+ { is-deeply $c-data, from-json($c-data-file.slurp), 'canonical-data' } else { skip }
38
+
36
39
  done-testing;
37
40
 
38
41
  INIT {
39
- require JSON::Tiny <&from-json>;
40
- %cases := from-json 「
41
- {
42
- "valid":[
43
- { "description" : "single bit one to decimal"
44
- , "input_base" : 2
45
- , "input_digits" : [1]
46
- , "output_base" : 10
47
- , "expected" : [1]
48
- },
49
- { "description" : "binary to single decimal"
50
- , "input_base" : 2
51
- , "input_digits" : [1, 0, 1]
52
- , "output_base" : 10
53
- , "expected" : [5]
54
- },
55
- { "description" : "single decimal to binary"
56
- , "input_base" : 10
57
- , "input_digits" : [5]
58
- , "output_base" : 2
59
- , "expected" : [1, 0, 1]
60
- },
61
- { "description" : "binary to multiple decimal"
62
- , "input_base" : 2
63
- , "input_digits" : [1, 0, 1, 0, 1, 0]
64
- , "output_base" : 10
65
- , "expected" : [4, 2]
66
- },
67
- { "description" : "decimal to binary"
68
- , "input_base" : 10
69
- , "input_digits" : [4, 2]
70
- , "output_base" : 2
71
- , "expected" : [1, 0, 1, 0, 1, 0]
72
- },
73
- { "description" : "trinary to hexadecimal"
74
- , "input_base" : 3
75
- , "input_digits" : [1, 1, 2, 0]
76
- , "output_base" : 16
77
- , "expected" : [2, 10]
78
- },
79
- { "description" : "hexadecimal to trinary"
80
- , "input_base" : 16
81
- , "input_digits" : [2, 10]
82
- , "output_base" : 3
83
- , "expected" : [1, 1, 2, 0]
84
- },
85
- { "description" : "15-bit integer"
86
- , "input_base" : 97
87
- , "input_digits" : [3,46,60]
88
- , "output_base" : 73
89
- , "expected" : [6,10,45]
90
- },
91
- { "description" : "empty list outputs empty list"
92
- , "input_base" : 2
93
- , "input_digits" : []
94
- , "output_base" : 10
95
- , "expected" : []
96
- },
97
- { "description" : "single zero outputs 0"
98
- , "input_base" : 10
99
- , "input_digits" : [0]
100
- , "output_base" : 2
101
- , "expected" : [0]
102
- },
103
- { "description" : "multiple zeros outputs 0"
104
- , "input_base" : 10
105
- , "input_digits" : [0, 0, 0]
106
- , "output_base" : 2
107
- , "expected" : [0]
108
- },
109
- { "description" : "leading zeros are stripped"
110
- , "input_base" : 7
111
- , "input_digits" : [0, 6, 0]
112
- , "output_base" : 10
113
- , "expected" : [4, 2]
114
- } ],
115
- "invalid":[
116
- { "description" : "negative digit is invalid"
117
- , "input_base" : 2
118
- , "input_digits" : [1, -1, 1, 0, 1, 0]
119
- , "output_base" : 10
120
- },
121
- { "description" : "invalid positive digit"
122
- , "input_base" : 2
123
- , "input_digits" : [1, 2, 1, 0, 1, 0]
124
- , "output_base" : 10
125
- },
126
- { "description" : "first base is one"
127
- , "input_base" : 1
128
- , "input_digits" : []
129
- , "output_base" : 10
130
- },
131
- { "description" : "second base is one"
132
- , "input_base" : 2
133
- , "input_digits" : [1, 0, 1, 0, 1, 0]
134
- , "output_base" : 1
135
- },
136
- { "description" : "first base is zero"
137
- , "input_base" : 0
138
- , "input_digits" : []
139
- , "output_base" : 10
140
- },
141
- { "description" : "second base is zero"
142
- , "input_base" : 10
143
- , "input_digits" : [7]
144
- , "output_base" : 0
145
- },
146
- { "description" : "first base is negative"
147
- , "input_base" : -2
148
- , "input_digits" : [1]
149
- , "output_base" : 10
150
- },
151
- { "description" : "second base is negative"
152
- , "input_base" : 2
153
- , "input_digits" : [1]
154
- , "output_base" : -7
155
- },
156
- { "description" : "both bases are negative"
157
- , "input_base" : -2
158
- , "input_digits" : [1]
159
- , "output_base" : -7
160
- } ]
42
+ $c-data := from-json q:to/END/;
43
+
44
+ {
45
+ "exercise": "all-your-base",
46
+ "version": "1.0.0",
47
+ "comments": [
48
+ "It's up to each track do decide:",
49
+ "",
50
+ "1. What's the canonical representation of zero?",
51
+ " - []?",
52
+ " - [0]?",
53
+ "",
54
+ "2. What representations of zero are allowed?",
55
+ " - []?",
56
+ " - [0]?",
57
+ " - [0,0]?",
58
+ "",
59
+ "3. Are leading zeroes allowed?",
60
+ "",
61
+ "4. How should invalid input be handled?",
62
+ "",
63
+ "All the undefined cases are marked as null.",
64
+ "",
65
+ "All your numeric-base are belong to [2..]. :)"
66
+ ],
67
+ "cases": [
68
+ {
69
+ "description": "single bit one to decimal",
70
+ "property": "rebase",
71
+ "input_base": 2,
72
+ "input_digits": [1],
73
+ "output_base": 10,
74
+ "expected": [1]
75
+ },
76
+ {
77
+ "description": "binary to single decimal",
78
+ "property": "rebase",
79
+ "input_base": 2,
80
+ "input_digits": [1, 0, 1],
81
+ "output_base": 10,
82
+ "expected": [5]
83
+ },
84
+ {
85
+ "description": "single decimal to binary",
86
+ "property": "rebase",
87
+ "input_base": 10,
88
+ "input_digits": [5],
89
+ "output_base": 2,
90
+ "expected": [1, 0, 1]
91
+ },
92
+ {
93
+ "description": "binary to multiple decimal",
94
+ "property": "rebase",
95
+ "input_base": 2,
96
+ "input_digits": [1, 0, 1, 0, 1, 0],
97
+ "output_base": 10,
98
+ "expected": [4, 2]
99
+ },
100
+ {
101
+ "description": "decimal to binary",
102
+ "property": "rebase",
103
+ "input_base": 10,
104
+ "input_digits": [4, 2],
105
+ "output_base": 2,
106
+ "expected": [1, 0, 1, 0, 1, 0]
107
+ },
108
+ {
109
+ "description": "trinary to hexadecimal",
110
+ "property": "rebase",
111
+ "input_base": 3,
112
+ "input_digits": [1, 1, 2, 0],
113
+ "output_base": 16,
114
+ "expected": [2, 10]
115
+ },
116
+ {
117
+ "description": "hexadecimal to trinary",
118
+ "property": "rebase",
119
+ "input_base": 16,
120
+ "input_digits": [2, 10],
121
+ "output_base": 3,
122
+ "expected": [1, 1, 2, 0]
123
+ },
124
+ {
125
+ "description": "15-bit integer",
126
+ "property": "rebase",
127
+ "input_base": 97,
128
+ "input_digits": [3, 46, 60],
129
+ "output_base": 73,
130
+ "expected": [6, 10, 45]
131
+ },
132
+ {
133
+ "description": "empty list",
134
+ "property": "rebase",
135
+ "input_base": 2,
136
+ "input_digits": [],
137
+ "output_base": 10,
138
+ "expected": null
139
+ },
140
+ {
141
+ "description": "single zero",
142
+ "property": "rebase",
143
+ "input_base": 10,
144
+ "input_digits": [0],
145
+ "output_base": 2,
146
+ "expected": null
147
+ },
148
+ {
149
+ "description": "multiple zeros",
150
+ "property": "rebase",
151
+ "input_base": 10,
152
+ "input_digits": [0, 0, 0],
153
+ "output_base": 2,
154
+ "expected": null
155
+ },
156
+ {
157
+ "description": "leading zeros",
158
+ "property": "rebase",
159
+ "input_base": 7,
160
+ "input_digits": [0, 6, 0],
161
+ "output_base": 10,
162
+ "expected": null
163
+ },
164
+ {
165
+ "description": "negative digit",
166
+ "property": "rebase",
167
+ "input_base": 2,
168
+ "input_digits": [1, -1, 1, 0, 1, 0],
169
+ "output_base": 10,
170
+ "expected": null
171
+ },
172
+ {
173
+ "description": "invalid positive digit",
174
+ "property": "rebase",
175
+ "input_base": 2,
176
+ "input_digits": [1, 2, 1, 0, 1, 0],
177
+ "output_base": 10,
178
+ "expected": null
179
+ },
180
+ {
181
+ "description": "first base is one",
182
+ "property": "rebase",
183
+ "input_base": 1,
184
+ "input_digits": [],
185
+ "output_base": 10,
186
+ "expected": null
187
+ },
188
+ {
189
+ "description": "second base is one",
190
+ "property": "rebase",
191
+ "input_base": 2,
192
+ "input_digits": [1, 0, 1, 0, 1, 0],
193
+ "output_base": 1,
194
+ "expected": null
195
+ },
196
+ {
197
+ "description": "first base is zero",
198
+ "property": "rebase",
199
+ "input_base": 0,
200
+ "input_digits": [],
201
+ "output_base": 10,
202
+ "expected": null
203
+ },
204
+ {
205
+ "description": "second base is zero",
206
+ "property": "rebase",
207
+ "input_base": 10,
208
+ "input_digits": [7],
209
+ "output_base": 0,
210
+ "expected": null
211
+ },
212
+ {
213
+ "description": "first base is negative",
214
+ "property": "rebase",
215
+ "input_base": -2,
216
+ "input_digits": [1],
217
+ "output_base": 10,
218
+ "expected": null
219
+ },
220
+ {
221
+ "description": "second base is negative",
222
+ "property": "rebase",
223
+ "input_base": 2,
224
+ "input_digits": [1],
225
+ "output_base": -7,
226
+ "expected": null
227
+ },
228
+ {
229
+ "description": "both bases are negative",
230
+ "property": "rebase",
231
+ "input_base": -2,
232
+ "input_digits": [1],
233
+ "output_base": -7,
234
+ "expected": null
161
235
  }
162
-
236
+ ]
237
+ }
238
+
239
+ END
163
240
  }