From 58e9ab54cf111dbf393763625702ffd5a2f0f098 Mon Sep 17 00:00:00 2001 From: Giancarlo Cicellyn Comneno <126195429+gcomneno@users.noreply.github.com> Date: Fri, 2 Oct 2026 08:34:11 +0200 Subject: [PATCH 1/3] test: cover insertion sort stability with equal-priority items --- sorts/insertion_sort.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index e339e5062a27..95709c5cd65c 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -56,6 +56,17 @@ def insertion_sort[T: Comparable](collection: MutableSequence[T]) -> MutableSequ True >>> values [1, 2, 4, 7] + + Equal-priority items retain their original relative order: + >>> from dataclasses import dataclass, field + >>> @dataclass(order=True) + ... class Item: + ... priority: int + ... label: str = field(compare=False) + >>> items = [Item(2, "A"), Item(1, "X"), Item(2, "B"), Item(1, "Y")] + >>> [(item.priority, item.label) for item in insertion_sort(items)] + [(1, 'X'), (1, 'Y'), (2, 'A'), (2, 'B')] + >>> import random >>> collection = random.sample(range(-50, 50), 100) >>> insertion_sort(collection) == sorted(collection) From e9bd4668d078947dce578a75cc45181244e7c540 Mon Sep 17 00:00:00 2001 From: Giancarlo Cicellyn Comneno <126195429+gcomneno@users.noreply.github.com> Date: Sat, 3 Oct 2026 07:59:47 +0200 Subject: [PATCH 2/3] test: simplify insertion sort stability doctest output --- sorts/insertion_sort.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index 95709c5cd65c..03bfe4ec1a0d 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -64,8 +64,9 @@ def insertion_sort[T: Comparable](collection: MutableSequence[T]) -> MutableSequ ... priority: int ... label: str = field(compare=False) >>> items = [Item(2, "A"), Item(1, "X"), Item(2, "B"), Item(1, "Y")] - >>> [(item.priority, item.label) for item in insertion_sort(items)] - [(1, 'X'), (1, 'Y'), (2, 'A'), (2, 'B')] + >>> insertion_sort(items) # doctest: +NORMALIZE_WHITESPACE + [Item(priority=1, label='X'), Item(priority=1, label='Y'), + Item(priority=2, label='A'), Item(priority=2, label='B')] >>> import random >>> collection = random.sample(range(-50, 50), 100) From 3e020fd5089813a8fcc2c1653c35e80906425659 Mon Sep 17 00:00:00 2001 From: Giancarlo Cicellyn Comneno <126195429+gcomneno@users.noreply.github.com> Date: Sat, 3 Oct 2026 08:34:43 +0200 Subject: [PATCH 3/3] test: verify insertion sort ignores labels when ordering --- sorts/insertion_sort.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index 03bfe4ec1a0d..ae5edca3f60f 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -67,6 +67,10 @@ def insertion_sort[T: Comparable](collection: MutableSequence[T]) -> MutableSequ >>> insertion_sort(items) # doctest: +NORMALIZE_WHITESPACE [Item(priority=1, label='X'), Item(priority=1, label='Y'), Item(priority=2, label='A'), Item(priority=2, label='B')] + >>> other = [Item(2, "B"), Item(1, "Y"), Item(2, "A"), Item(1, "X")] + >>> insertion_sort(other) # doctest: +NORMALIZE_WHITESPACE + [Item(priority=1, label='Y'), Item(priority=1, label='X'), + Item(priority=2, label='B'), Item(priority=2, label='A')] >>> import random >>> collection = random.sample(range(-50, 50), 100)