trackler 2.0.8.1 → 2.0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/fsharp/exercises/list-ops/Example.fs +5 -5
- data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +2 -2
- data/tracks/go/exercises/TRACK_HINTS.md +6 -2
- data/tracks/go/exercises/series/asktoomuch_test.go +4 -4
- data/tracks/go/exercises/series/example.go +2 -0
- data/tracks/go/exercises/series/first_test.go +3 -3
- data/tracks/go/exercises/series/series_test.go +10 -2
- data/tracks/java/exercises/pangram/src/test/java/PangramsTest.java +6 -0
- data/tracks/javascript/exercises/robot-simulator/example.js +8 -1
- data/tracks/javascript/exercises/robot-simulator/robot-simulator.spec.js +4 -4
- data/tracks/julia/docs/ABOUT.md +12 -0
- data/tracks/julia/docs/INSTALLATION.md +2 -0
- data/tracks/julia/docs/RESOURCES.md +6 -0
- data/tracks/ocaml/exercises/hello-world/example.ml +1 -4
- data/tracks/ocaml/exercises/hello-world/hello_world.ml +1 -2
- data/tracks/ocaml/exercises/hello-world/hello_world.mli +2 -10
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -3
- data/tracks/ocaml/exercises/luhn/test.ml +14 -14
- data/tracks/ocaml/tools/test-generator/src/parser.ml +2 -1
- data/tracks/ocaml/tools/test-generator/templates/hello-world/template.ml +1 -1
- data/tracks/python/.travis.yml +1 -0
- data/tracks/python/config.json +25 -0
- data/tracks/python/exercises/all-your-base/all_your_base_test.py +82 -0
- data/tracks/python/exercises/all-your-base/example.py +23 -0
- data/tracks/python/exercises/grep/example.py +57 -0
- data/tracks/python/exercises/grep/grep_test.py +225 -0
- data/tracks/python/exercises/linked-list/example.py +14 -0
- data/tracks/python/exercises/linked-list/linked_list.py +2 -1
- data/tracks/python/exercises/linked-list/linked_list_test.py +18 -0
- data/tracks/python/exercises/word-search/example.py +57 -0
- data/tracks/python/exercises/word-search/word_search.py +27 -0
- data/tracks/python/exercises/word-search/word_search_test.py +84 -0
- data/tracks/python/requirements-travis.txt +1 -1
- data/tracks/python/test/check-exercises.py +44 -19
- data/tracks/scala/config.json +9 -0
- data/tracks/scala/exercises/perfect-numbers/build.sbt +3 -0
- data/tracks/scala/exercises/perfect-numbers/example.scala +24 -0
- data/tracks/scala/exercises/perfect-numbers/src/main/scala/PerfectNumbers.scala +0 -0
- data/tracks/scala/exercises/perfect-numbers/src/test/scala/PerfectNumbersTest.scala +62 -0
- data/tracks/typescript/Makefile +8 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 628be9992a422198cd22ca843fb2037ba6c03d72
|
4
|
+
data.tar.gz: 2ee76fac59c86929d2224dcaa3b4ca3843dc7f4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 950598d86876b07601a68378108358eeeceb09dac2a380d8d5cc607eaa8b6282d0ef2dcd660900dcede06a36b1e5d3fed69ae5ed8c522715b3320c68df20b75b
|
7
|
+
data.tar.gz: 1c2ba152ea54815a1be22d9224f210cfc0b6d0dd402020481666c914569f02b69a36417f7307dddd5ca342fd6ad6df6ea45bce30e9e4b87fb2ba4a4604caee2f
|
data/lib/trackler/version.rb
CHANGED
@@ -5,7 +5,7 @@ let rec foldl folder state list =
|
|
5
5
|
| [] -> state
|
6
6
|
| x::xs -> foldl folder (folder state x) xs
|
7
7
|
|
8
|
-
let rec foldr folder state
|
8
|
+
let rec foldr folder list state =
|
9
9
|
list
|
10
10
|
|> List.rev
|
11
11
|
|> foldl (fun acc item -> folder item acc) state
|
@@ -14,10 +14,10 @@ let length list = foldl (fun acc _ -> acc + 1) 0 list
|
|
14
14
|
|
15
15
|
let reverse list = foldl (fun acc item -> item :: acc) [] list
|
16
16
|
|
17
|
-
let map f list = foldr (fun item acc -> f item :: acc) []
|
17
|
+
let map f list = foldr (fun item acc -> f item :: acc) list []
|
18
18
|
|
19
|
-
let filter f list = foldr (fun item acc -> if f item then item :: acc else acc) []
|
19
|
+
let filter f list = foldr (fun item acc -> if f item then item :: acc else acc) list []
|
20
20
|
|
21
|
-
let append xs ys = foldr (fun item acc -> item :: acc) ys
|
21
|
+
let append xs ys = foldr (fun item acc -> item :: acc) xs ys
|
22
22
|
|
23
|
-
let concat xs = foldr append []
|
23
|
+
let concat xs = foldr append xs []
|
@@ -80,12 +80,12 @@ let ``foldl is not just foldr . flip`` () =
|
|
80
80
|
[<Test>]
|
81
81
|
[<Ignore("Remove to run test")>]
|
82
82
|
let ``foldr as id`` () =
|
83
|
-
Assert.That(foldr (fun item acc -> item :: acc) [
|
83
|
+
Assert.That(foldr (fun item acc -> item :: acc) [1 .. big] [] = bigList, Is.True)
|
84
84
|
|
85
85
|
[<Test>]
|
86
86
|
[<Ignore("Remove to run test")>]
|
87
87
|
let ``foldr as append`` () =
|
88
|
-
Assert.That(foldr (fun item acc -> item :: acc) [
|
88
|
+
Assert.That(foldr (fun item acc -> item :: acc) [1 .. 99] [100 .. big] = bigList, Is.True)
|
89
89
|
|
90
90
|
[<Test>]
|
91
91
|
[<Ignore("Remove to run test")>]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
## Running the tests
|
2
|
+
|
1
3
|
To run the tests run the command `go test` from within the exercise directory.
|
2
4
|
|
3
5
|
If the test suite contains benchmarks, you can run these with the `-bench`
|
@@ -5,5 +7,7 @@ flag:
|
|
5
7
|
|
6
8
|
go test -bench .
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
## Further information
|
11
|
+
|
12
|
+
For more detailed information about the Go track, including how to get help if
|
13
|
+
you're having trouble, please visit the exercism.io [Go language page](http://exercism.io/languages/go/about).
|
@@ -8,21 +8,21 @@ func TestAskTooMuch(t *testing.T) {
|
|
8
8
|
test := allTests[0]
|
9
9
|
defer func() {
|
10
10
|
if recover() != nil {
|
11
|
-
t.Fatalf("Yikes, UnsafeFirst(%d, %
|
11
|
+
t.Fatalf("Yikes, UnsafeFirst(%d, %q) panicked!", test.n, test.s)
|
12
12
|
}
|
13
13
|
}()
|
14
14
|
for _, test = range allTests {
|
15
15
|
switch res := UnsafeFirst(test.n, test.s); {
|
16
16
|
case len(test.out) > 0: // well, this should work
|
17
17
|
if res != test.out[0] {
|
18
|
-
t.Fatalf("Yikes, UnsafeFirst(%d, %
|
18
|
+
t.Fatalf("Yikes, UnsafeFirst(%d, %q) = %q, want %q.",
|
19
19
|
test.n, test.s, res, test.out[0])
|
20
20
|
}
|
21
21
|
case len(res) != test.n:
|
22
|
-
t.Fatalf("Yikes, UnsafeFirst(%d, %
|
22
|
+
t.Fatalf("Yikes, UnsafeFirst(%d, %q) = %q, but %q doesn't have %d characters.",
|
23
23
|
test.n, test.s, res, res, test.n)
|
24
24
|
default:
|
25
|
-
t.Fatalf("Yikes, UnsafeFirst(%d, %
|
25
|
+
t.Fatalf("Yikes, UnsafeFirst(%d, %q) = %q, but %q isn't in %q",
|
26
26
|
test.n, test.s, res, res, test.s)
|
27
27
|
}
|
28
28
|
}
|
@@ -9,14 +9,14 @@ func TestFirst(t *testing.T) {
|
|
9
9
|
switch res, ok := First(test.n, test.s); {
|
10
10
|
case !ok:
|
11
11
|
if len(test.out) > 0 {
|
12
|
-
t.Fatalf("First(%d, %
|
12
|
+
t.Fatalf("First(%d, %q) returned !ok, want ok.",
|
13
13
|
test.n, test.s)
|
14
14
|
}
|
15
15
|
case len(test.out) == 0:
|
16
|
-
t.Fatalf("First(%d, %
|
16
|
+
t.Fatalf("First(%d, %q) = %q, %t. Expected ok == false",
|
17
17
|
test.n, test.s, res, ok)
|
18
18
|
case res != test.out[0]:
|
19
|
-
t.Fatalf("First(%d, %
|
19
|
+
t.Fatalf("First(%d, %q) = %q. Want %q.",
|
20
20
|
test.n, test.s, res, test.out[0])
|
21
21
|
}
|
22
22
|
}
|
@@ -34,6 +34,8 @@ import (
|
|
34
34
|
"testing"
|
35
35
|
)
|
36
36
|
|
37
|
+
const targetTestVersion = 1
|
38
|
+
|
37
39
|
var allTests = []struct {
|
38
40
|
n int
|
39
41
|
s string
|
@@ -69,13 +71,19 @@ var allTests = []struct {
|
|
69
71
|
|
70
72
|
var cx = "01032987583"
|
71
73
|
|
74
|
+
func TestTestVersion(t *testing.T) {
|
75
|
+
if testVersion != targetTestVersion {
|
76
|
+
t.Fatalf("Found testVersion = %v, want %v.", testVersion, targetTestVersion)
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
72
80
|
func TestAll(t *testing.T) {
|
73
81
|
for _, test := range allTests {
|
74
82
|
switch res := All(test.n, test.s); {
|
75
83
|
case len(res) == 0 && len(test.out) == 0:
|
76
84
|
case reflect.DeepEqual(res, test.out):
|
77
85
|
default:
|
78
|
-
t.Fatalf("All(%d, %
|
86
|
+
t.Fatalf("All(%d, %q) = %q, want %q.",
|
79
87
|
test.n, test.s, res, test.out)
|
80
88
|
}
|
81
89
|
}
|
@@ -87,7 +95,7 @@ func TestUnsafeFirst(t *testing.T) {
|
|
87
95
|
continue
|
88
96
|
}
|
89
97
|
if res := UnsafeFirst(test.n, test.s); res != test.out[0] {
|
90
|
-
t.Fatalf("UnsafeFirst(%d, %
|
98
|
+
t.Fatalf("UnsafeFirst(%d, %q) = %q, want %q.",
|
91
99
|
test.n, test.s, res, test.out[0])
|
92
100
|
}
|
93
101
|
}
|
@@ -66,4 +66,10 @@ public class PangramsTest {
|
|
66
66
|
public void panagramInAlphabetOtherThanAscii() {
|
67
67
|
assertFalse(Pangrams.isPangram("Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства."));
|
68
68
|
}
|
69
|
+
|
70
|
+
@Ignore
|
71
|
+
@Test
|
72
|
+
public void upperAndLowerCaseVersionsOfTheSameCharacterShouldNotBeCountedSeparately() {
|
73
|
+
assertFalse(Pangrams.isPangram("the quick brown fox jumped over the lazy FOX"));
|
74
|
+
}
|
69
75
|
}
|
@@ -10,6 +10,13 @@ Robot.prototype.at = function (xcoord, ycoord) {
|
|
10
10
|
};
|
11
11
|
|
12
12
|
Robot.prototype.orient = function (direction) {
|
13
|
+
if (direction != 'north' &&
|
14
|
+
direction != 'south' &&
|
15
|
+
direction != 'east' &&
|
16
|
+
direction != 'west') {
|
17
|
+
throw 'Invalid Robot Bearing'
|
18
|
+
}
|
19
|
+
|
13
20
|
this.bearing = direction;
|
14
21
|
return 'The robot is pointed ' + direction;
|
15
22
|
};
|
@@ -78,4 +85,4 @@ Robot.prototype.evaluate = function (s) {
|
|
78
85
|
}, this);
|
79
86
|
};
|
80
87
|
|
81
|
-
module.exports = Robot;
|
88
|
+
module.exports = Robot;
|
@@ -14,11 +14,11 @@ describe('Robot', function() {
|
|
14
14
|
});
|
15
15
|
|
16
16
|
xit('invalid robot bearing', function() {
|
17
|
-
|
17
|
+
var incorrectlyOrientRobot = function () {
|
18
18
|
robot.orient('crood');
|
19
|
-
}
|
20
|
-
|
21
|
-
|
19
|
+
};
|
20
|
+
|
21
|
+
expect(incorrectlyOrientRobot).toThrow(new Error('Invalid Robot Bearing'));
|
22
22
|
});
|
23
23
|
|
24
24
|
xit('turn right from north', function() {
|
data/tracks/julia/docs/ABOUT.md
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
Julia is an open-source high-level, high-performance dynamic programming language designed for technical and scientific computing while also being effective for general-purpose tasks. It is convenient to use for daily work but also runs fast enough to be deployed for high-performance applications.
|
2
|
+
|
3
|
+
Interesting features include:
|
4
|
+
- Large parts of [Julia's base library](https://github.com/julialang/julia) are written in Julia itself. Understanding and contributing to the Julia core does not require knowledge of another language.
|
5
|
+
- Easy to use interfaces to call libraries written in other languages, such as [C, Fortran](http://docs.julialang.org/en/stable/manual/calling-c-and-fortran-code/) and [Python](https://github.com/JuliaPy/PyCall.jl), directly.
|
6
|
+
- [Multiple dispatch](http://docs.julialang.org/en/stable/manual/methods/#man-methods)
|
7
|
+
- A dynamic, nominative and parametric [type system](http://docs.julialang.org/en/stable/manual/types/).
|
8
|
+
- Homoiconicity: Julia code can be represented in Julia itself, making it a good language to learn about [metaprogramming](http://docs.julialang.org/en/stable/manual/metaprogramming/).
|
9
|
+
|
10
|
+
The first public release was in 2012. You can find out more about the motivation behind it in the blog post ["Why We Created Julia"](http://julialang.org/blog/2012/02/why-we-created-julia) by the core developers.
|
11
|
+
|
12
|
+
Despite its young age, Julia is already being used in the real world in a variety of fields, such as but not limited to Finance, Data Science and Scientific Computing. You can find many showcase applications on [juliabloggers.com](http://www.juliabloggers.com/) and a list of publications about the language and its technical computing applications [here](http://julialang.org/publications/).
|
@@ -1,5 +1,7 @@
|
|
1
1
|
To install Julia on your system follow the instructions on the [Julia Language Downloads page](http://julialang.org/downloads/).
|
2
2
|
|
3
|
+
[JuliaPro](http://juliacomputing.com/products/juliapro.html) includes the latest stable version of Julia, the Juno IDE, a debugger, a Jupyter notebook environment and many of the most popular Julia packages. It is a convenient way to install everything you will need to get started.
|
4
|
+
|
3
5
|
For a local installation, it is recommended to use [Juno](http://junolab.org/). It's an IDE based on Atom and offers a powerful text editor as well as additional features for developing in Julia. Just follow the instructions on their website.
|
4
6
|
|
5
7
|
A simple way to get started with Julia without the need of a local installation is [JuliaBox](http://junolab.org/), which is an online IDE based on Jupyter notebooks. You just access it from your browser, login and you can start solving exercises.
|
@@ -0,0 +1,6 @@
|
|
1
|
+
- [Julia Style Guide](docs.julialang.org/en/stable/manual/style-guide/): Guide on how to write idiomatic Julia code.
|
2
|
+
- [Performance Tips](http://docs.julialang.org/en/stable/manual/performance-tips/): Techniques to speed up your programs.
|
3
|
+
- [Julia Manual](http://docs.julialang.org/en/stable/manual/introduction/): Additional explanations and examples.
|
4
|
+
- [juliabloggers.com](http://www.juliabloggers.com/): Aggregator of Julia blog posts.
|
5
|
+
- [Julia Discourse](https://discourse.julialang.org/): Discussions about the language.
|
6
|
+
- [Julia YouTube channel](https://www.youtube.com/user/JuliaLanguage): Archive of JuliaCon talks.
|
@@ -1,2 +1 @@
|
|
1
|
-
let
|
2
|
-
"your code here"
|
1
|
+
let hello = "Change me"
|
@@ -5,9 +5,7 @@ open Hello_world
|
|
5
5
|
let ae exp got _test_ctxt = assert_equal ~printer:String.to_string exp got
|
6
6
|
|
7
7
|
let tests = [
|
8
|
-
"
|
9
|
-
"sample name" >:: ae "Hello, Alice!" (greet (Some "Alice"));
|
10
|
-
"other sample name" >:: ae "Hello, Bob!" (greet (Some "Bob"));
|
8
|
+
"Say Hi!" >:: ae "Hello, World!" hello;
|
11
9
|
]
|
12
10
|
|
13
11
|
let () =
|
@@ -10,27 +10,27 @@ let tests = [
|
|
10
10
|
assert_valid false "1";
|
11
11
|
"A single zero is invalid" >::
|
12
12
|
assert_valid false "0";
|
13
|
-
"simple valid
|
14
|
-
assert_valid true "
|
15
|
-
"valid
|
16
|
-
assert_valid true "
|
13
|
+
"a simple valid SIN that remains valid if reversed" >::
|
14
|
+
assert_valid true "059";
|
15
|
+
"a simple valid SIN that becomes invalid if reversed" >::
|
16
|
+
assert_valid true "59";
|
17
|
+
"a valid Canadian SIN" >::
|
18
|
+
assert_valid true "055 444 285";
|
17
19
|
"invalid Canadian SIN" >::
|
18
|
-
assert_valid false "
|
20
|
+
assert_valid false "055 444 286";
|
19
21
|
"invalid credit card" >::
|
20
22
|
assert_valid false "8273 1232 7352 0569";
|
21
|
-
"valid strings with a non-digit
|
22
|
-
assert_valid false "
|
23
|
-
"punctuation
|
23
|
+
"valid strings with a non-digit included become invalid" >::
|
24
|
+
assert_valid false "055a 444 285";
|
25
|
+
"valid strings with punctuation included become invalid" >::
|
24
26
|
assert_valid false "055-444-285";
|
25
|
-
"symbols
|
27
|
+
"valid strings with symbols included become invalid" >::
|
26
28
|
assert_valid false "055\194\163 444$ 285";
|
27
29
|
"single zero with space is invalid" >::
|
28
30
|
assert_valid false " 0";
|
29
|
-
"
|
30
|
-
assert_valid true "
|
31
|
-
"
|
32
|
-
assert_valid true "055 444 285";
|
33
|
-
"nine doubled is nine" >::
|
31
|
+
"more than a single zero is valid" >::
|
32
|
+
assert_valid true "0000 0";
|
33
|
+
"input digit 9 is correctly converted to output digit 9" >::
|
34
34
|
assert_valid true "091";
|
35
35
|
]
|
36
36
|
|
@@ -35,7 +35,8 @@ let parse_single (text: string) (expected_key: string) (cases_key: string): (tes
|
|
35
35
|
Result.return (Single ts)
|
36
36
|
|
37
37
|
let is_suite (json: json) (cases_key: string) =
|
38
|
-
let
|
38
|
+
let ignorable_keys = ["exercise"; "version"; "methods"] in
|
39
|
+
let keys = List.filter (keys json) ~f:(Fn.non (List.mem ignorable_keys)) in
|
39
40
|
let keys = List.sort keys ~cmp:String.compare in
|
40
41
|
not (List.is_empty keys || keys = [cases_key] || keys = ["#"; cases_key])
|
41
42
|
|
data/tracks/python/.travis.yml
CHANGED
data/tracks/python/config.json
CHANGED
@@ -417,6 +417,31 @@
|
|
417
417
|
"difficulty": 1,
|
418
418
|
"topics": [
|
419
419
|
]
|
420
|
+
},
|
421
|
+
{
|
422
|
+
"slug": "all-your-base",
|
423
|
+
"difficulty": 4,
|
424
|
+
"topics": [
|
425
|
+
"integers",
|
426
|
+
"transforming"
|
427
|
+
]
|
428
|
+
},
|
429
|
+
{
|
430
|
+
"slug": "grep",
|
431
|
+
"difficulty": 4,
|
432
|
+
"topics": [
|
433
|
+
"files",
|
434
|
+
"text formatting",
|
435
|
+
"searching"
|
436
|
+
]
|
437
|
+
},
|
438
|
+
{
|
439
|
+
"slug": "word-search",
|
440
|
+
"difficulty": 6,
|
441
|
+
"topics": [
|
442
|
+
"strings",
|
443
|
+
"searching"
|
444
|
+
]
|
420
445
|
}
|
421
446
|
],
|
422
447
|
"deprecated": [
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import unittest
|
2
|
+
|
3
|
+
from all_your_base import rebase
|
4
|
+
|
5
|
+
|
6
|
+
class AllYourBaseTests(unittest.TestCase):
|
7
|
+
|
8
|
+
def test_single_bit_to_one_decimal(self):
|
9
|
+
self.assertEqual(rebase(2, [1], 10), [1])
|
10
|
+
|
11
|
+
def test_binary_to_single_decimal(self):
|
12
|
+
self.assertEqual(rebase(2, [1, 0, 1], 10), [5])
|
13
|
+
|
14
|
+
def test_single_decimal_to_binary(self):
|
15
|
+
self.assertEqual(rebase(10, [5], 2), [1, 0, 1])
|
16
|
+
|
17
|
+
def test_binary_to_multiple_decimal(self):
|
18
|
+
self.assertEqual(rebase(2, [1, 0, 1, 0, 1, 0], 10), [4, 2])
|
19
|
+
|
20
|
+
def test_decimal_to_binary(self):
|
21
|
+
self.assertEqual(rebase(10, [4, 2], 2), [1, 0, 1, 0, 1, 0])
|
22
|
+
|
23
|
+
def test_trinary_to_hexadecimal(self):
|
24
|
+
self.assertEqual(rebase(3, [1, 1, 2, 0], 16), [2, 10])
|
25
|
+
|
26
|
+
def test_hexadecimal_to_trinary(self):
|
27
|
+
self.assertEqual(rebase(16, [2, 10], 3), [1, 1, 2, 0])
|
28
|
+
|
29
|
+
def test_15_bit_integer(self):
|
30
|
+
self.assertEqual(rebase(97, [3, 46, 60], 73), [6, 10, 45])
|
31
|
+
|
32
|
+
def test_empty_list(self):
|
33
|
+
self.assertEqual(rebase(2, [], 10), [])
|
34
|
+
|
35
|
+
def test_single_zero(self):
|
36
|
+
self.assertEqual(rebase(10, [0], 2), [])
|
37
|
+
|
38
|
+
def test_multiple_zeroes(self):
|
39
|
+
self.assertEqual(rebase(10, [0, 0, 0], 2), [])
|
40
|
+
|
41
|
+
def test_leading_zeros(self):
|
42
|
+
self.assertEqual(rebase(7, [0, 6, 0], 10), [4, 2])
|
43
|
+
|
44
|
+
def test_negative_digit(self):
|
45
|
+
with self.assertRaises(ValueError):
|
46
|
+
rebase(2, [1, -1, 1, 0, 1, 0], 10)
|
47
|
+
|
48
|
+
def test_invalid_positive_digit(self):
|
49
|
+
with self.assertRaises(ValueError):
|
50
|
+
rebase(2, [1, 2, 1, 0, 1, 0], 10)
|
51
|
+
|
52
|
+
def test_first_base_is_one(self):
|
53
|
+
with self.assertRaises(ValueError):
|
54
|
+
rebase(1, [], 10)
|
55
|
+
|
56
|
+
def test_second_base_is_one(self):
|
57
|
+
with self.assertRaises(ValueError):
|
58
|
+
rebase(2, [1, 0, 1, 0, 1, 0], 1)
|
59
|
+
|
60
|
+
def test_first_base_is_zero(self):
|
61
|
+
with self.assertRaises(ValueError):
|
62
|
+
rebase(0, [], 10)
|
63
|
+
|
64
|
+
def test_second_base_is_zero(self):
|
65
|
+
with self.assertRaises(ValueError):
|
66
|
+
rebase(10, [7], 0)
|
67
|
+
|
68
|
+
def test_first_base_is_negative(self):
|
69
|
+
with self.assertRaises(ValueError):
|
70
|
+
rebase(-2, [1], 10)
|
71
|
+
|
72
|
+
def test_second_base_is_negative(self):
|
73
|
+
with self.assertRaises(ValueError):
|
74
|
+
rebase(2, [1], -7)
|
75
|
+
|
76
|
+
def test_both_bases_are_negative(self):
|
77
|
+
with self.assertRaises(ValueError):
|
78
|
+
rebase(-2, [1], -7)
|
79
|
+
|
80
|
+
|
81
|
+
if __name__ == '__main__':
|
82
|
+
unittest.main()
|