Skip to content

test: cover insertion sort stability with equal-priority items - #15480

Merged
cclauss merged 3 commits into
TheAlgorithms:masterfrom
gcomneno:test/insertion-sort-stability-doctest
Oct 3, 2026
Merged

cclauss merged 3 commits into
TheAlgorithms:masterfrom
gcomneno:test/insertion-sort-stability-doctest

Conversation

@gcomneno

@gcomneno gcomneno commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Describe your change

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.
  • Documentation change?

Add a doctest demonstrating that insertion sort preserves the relative order
of equal-priority items. The example compares items by priority only, keeping
their labels distinguishable.

Only the docstring in sorts/insertion_sort.py changes.

Validation

  • All 18 module doctests passed on Python 3.15t.
  • Applicable repository pre-commit hooks and git diff --check passed.
  • An in-memory mutation from < to <= reversed equal-priority items,
    confirming that the example detects loss of stability.
  • The full repository test suite was not run.

AI assistance

ChatGPT helped explain stability and prepare the example.
I reviewed the diff and ran the reported checks locally.

Checklist

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • All new algorithms include at least one URL that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues, then the description above includes the issue number(s) with a closing keyword: "Fixes #ISSUE-NUMBER".

Unchecked conditional items are not applicable: no new files or algorithms are added, and this PR does not resolve an existing issue.

@algorithms-keeper algorithms-keeper Bot added awaiting reviews This PR is ready to be reviewed enhancement This PR modified some existing files labels Oct 2, 2026
Comment thread sorts/insertion_sort.py Outdated
... 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)]

@cclauss cclauss Oct 3, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use @dataclass(order=True) so you can just insertion_sort(items) instead of adding an extra list comprehension.

Python/tests/test_sorts.py

Lines 134 to 137 in 84b73d0

@dataclass(order=True)
class Person:
name: str = "Bob"
age: int = 37

@algorithms-keeper algorithms-keeper Bot added awaiting changes A maintainer has requested changes to this PR and removed awaiting reviews This PR is ready to be reviewed labels Oct 3, 2026
@algorithms-keeper algorithms-keeper Bot added awaiting reviews This PR is ready to be reviewed and removed awaiting changes A maintainer has requested changes to this PR labels Oct 3, 2026
Comment thread sorts/insertion_sort.py
>>> 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')]

@cclauss cclauss Oct 3, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add a test that proves that label values are not examined in the sort...

Suggested change
>>> other = [Item(2, "B"), Item(1, "Y"), Item(2, "A"), Item(1, "X")]
>>> insertion_sort(other) # doctest: +NORMALIZE_WHITESPACE

@algorithms-keeper algorithms-keeper Bot added awaiting changes A maintainer has requested changes to this PR and removed awaiting reviews This PR is ready to be reviewed labels Oct 3, 2026
@algorithms-keeper algorithms-keeper Bot added awaiting reviews This PR is ready to be reviewed and removed awaiting changes A maintainer has requested changes to this PR labels Oct 3, 2026
@algorithms-keeper algorithms-keeper Bot removed the awaiting reviews This PR is ready to be reviewed label Oct 3, 2026
@cclauss
cclauss merged commit 0465a5f into TheAlgorithms:master Oct 3, 2026
6 checks passed
@cclauss cclauss added the hacktoberfest-accepted Accepted to be counted towards Hacktoberfest label Oct 3, 2026
@gcomneno
gcomneno deleted the test/insertion-sort-stability-doctest branch October 3, 2026 07:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement This PR modified some existing files hacktoberfest-accepted Accepted to be counted towards Hacktoberfest

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants