From 291637b79fb6032dc4c756fb8f4c03f2da1f8ef7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 May 2026 21:07:14 +0000 Subject: [PATCH] Add coercion coverage tests Agent-Logs-Url: https://github.com/compas-dev/compas/sessions/f010d5d8-9dc7-4ee2-81e9-290bde8b4212 Co-authored-by: tomvanmele <29653489+tomvanmele@users.noreply.github.com> --- tests/compas/data/test_coercion.py | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/compas/data/test_coercion.py diff --git a/tests/compas/data/test_coercion.py b/tests/compas/data/test_coercion.py new file mode 100644 index 000000000000..d970cd50b799 --- /dev/null +++ b/tests/compas/data/test_coercion.py @@ -0,0 +1,47 @@ +import pytest + +from compas.data.coercion import coerce_sequence_of_list +from compas.data.coercion import coerce_sequence_of_tuple + + +def test_coerce_sequence_of_tuple_converts_iterables_and_scalars(): + sequence = [(1, 2), [3, 4], range(2), 5] + + assert coerce_sequence_of_tuple(sequence) == [(1, 2), (3, 4), (0, 1), (5,)] + + +def test_coerce_sequence_of_tuple_treats_strings_as_iterable(): + assert coerce_sequence_of_tuple(["ab", ""]) == [("a", "b"), ()] + + +def test_coerce_sequence_of_tuple_accepts_iterators(): + sequence = (item for item in ([1, 2], 3)) + + assert coerce_sequence_of_tuple(sequence) == [(1, 2), (3,)] + + +def test_coerce_sequence_of_list_converts_iterables_and_scalars(): + sequence = [[1, 2], (3, 4), range(2), 5] + + assert coerce_sequence_of_list(sequence) == [[1, 2], [3, 4], [0, 1], [5]] + + +def test_coerce_sequence_of_list_treats_strings_as_iterable(): + assert coerce_sequence_of_list(["ab", ""]) == [["a", "b"], []] + + +def test_coerce_sequence_of_list_accepts_iterators(): + sequence = (item for item in ((1, 2), 3)) + + assert coerce_sequence_of_list(sequence) == [[1, 2], [3]] + + +@pytest.mark.parametrize("coerce", [coerce_sequence_of_tuple, coerce_sequence_of_list]) +def test_coerce_sequence_requires_an_iterable_sequence(coerce): + with pytest.raises(TypeError): + coerce(1) + + +@pytest.mark.parametrize("coerce", [coerce_sequence_of_tuple, coerce_sequence_of_list]) +def test_coerce_sequence_handles_empty_sequences(coerce): + assert coerce([]) == []