aboutsummaryrefslogtreecommitdiff
path: root/challenge-285/ppentchev/python/tests/unit/test_routes.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-285/ppentchev/python/tests/unit/test_routes.py')
-rw-r--r--challenge-285/ppentchev/python/tests/unit/test_routes.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/challenge-285/ppentchev/python/tests/unit/test_routes.py b/challenge-285/ppentchev/python/tests/unit/test_routes.py
new file mode 100644
index 0000000000..743e0d20d2
--- /dev/null
+++ b/challenge-285/ppentchev/python/tests/unit/test_routes.py
@@ -0,0 +1,73 @@
+# SPDX-FileCopyrightText: Peter Pentchev <roam@ringlet.net>
+# SPDX-License-Identifier: BSD-2-Clause
+"""Test the first task in Perl weekly challenge 285, "No Connection"."""
+
+from __future__ import annotations
+
+import dataclasses
+
+import pytest
+
+from perl_weekly_285 import defs
+from perl_weekly_285 import routes
+
+
+@dataclasses.dataclass(frozen=True)
+class RoutesCase:
+ """A test case for the "No Connection" task."""
+
+ routes: list[tuple[str, str]]
+ """The routes to examine."""
+
+ expected: str
+ """The leaf destination we expect to find."""
+
+
+@pytest.mark.parametrize(
+ "tcase",
+ [
+ RoutesCase(
+ routes=[
+ ("me", "you"),
+ ],
+ expected="you",
+ ),
+ RoutesCase(
+ routes=[
+ ("here", "there"),
+ ("here", "everywhere"),
+ ("there", "everywhere"),
+ ],
+ expected="everywhere",
+ ),
+ RoutesCase(
+ routes=[("B", "C"), ("D", "B"), ("C", "A")],
+ expected="A",
+ ),
+ ],
+)
+def test_connection(*, tcase: RoutesCase) -> None:
+ """Make sure we can find the leaf destination."""
+ assert routes.solve_no_connection(tcase.routes) == tcase.expected
+
+
+@pytest.mark.parametrize(
+ "tcase",
+ [
+ RoutesCase(
+ routes=[
+ ("here", "there"),
+ ("here", "everywhere"),
+ ],
+ expected="not really",
+ ),
+ RoutesCase(
+ routes=[("me", "you"), ("you", "me")],
+ expected="not really",
+ ),
+ ],
+)
+def test_no_connection(*, tcase: RoutesCase) -> None:
+ """Make sure we cannot find any leaf destination."""
+ with pytest.raises(defs.NoSolutionError):
+ routes.solve_no_connection(tcase.routes)