Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 18, 2026

The qubit range validation feature (MAX_QUBIT_INDEX=100) added to prevent resource exhaustion attacks had no test coverage.

Changes

  • Added TestQubitRangeValidation class with 21 tests covering:

    • Boundary validation (indices 0, 100, 101, -1)
    • Single-qubit gates (H, X) with out-of-range indices
    • Two-qubit gates (CX) with out-of-range control/target qubits
    • Error message format verification
  • Fixed missing Union import in agent_skills.py type hints

Example

# Valid indices accepted
simulate_circuit("h(0)")      # ✓ status: 'success'
simulate_circuit("cx(50,100)") # ✓ status: 'success'

# Out-of-range indices rejected with clear errors
simulate_circuit("h(101)")     # ✗ "Qubit index 101 out of range. Must be between 0 and 100."
simulate_circuit("cx(150,0)")  # ✗ "Control qubit index 150 out of range. Must be between 0 and 100."

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI mentioned this pull request Jan 18, 2026
Copilot AI changed the title [WIP] Address feedback from review on pull request #24 Add test coverage for qubit range validation security feature Jan 18, 2026
Copilot AI requested a review from toolate28 January 18, 2026 00:57
Co-authored-by: toolate28 <105518313+toolate28@users.noreply.github.com>
@toolate28 toolate28 force-pushed the copilot/sub-pr-24-again branch from 57c68d6 to 6308455 Compare January 18, 2026 01:03
@toolate28 toolate28 marked this pull request as ready for review January 18, 2026 01:03
Copilot AI review requested due to automatic review settings January 18, 2026 01:03
@toolate28 toolate28 merged commit d31aa7b into copilot/sub-pr-8-again Jan 18, 2026
3 checks passed
@toolate28 toolate28 deleted the copilot/sub-pr-24-again branch January 18, 2026 01:03
@github-actions
Copy link

🌀 Agent Review: Coherence >60%. Ethical quantum sims validated. Ready for merge.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds comprehensive test coverage for the qubit range validation security feature that prevents resource exhaustion attacks by limiting qubit indices to 0-100. The implementation code already exists in agent_skills.py, and these tests ensure it works correctly across various scenarios.

Changes:

  • Added TestQubitRangeValidation class with 21 tests covering boundary conditions, single-qubit gates, two-qubit gates, and error message formats

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +704 to +719
expected_msg = "Qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg

def test_error_message_format_cx_control(self):
"""Test error message format for CX gate with invalid control"""
result = agent_skills.simulate_circuit("cx(150,0)")
assert result['status'] == 'error'
expected_msg = "Control qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg

def test_error_message_format_cx_target(self):
"""Test error message format for CX gate with invalid target"""
result = agent_skills.simulate_circuit("cx(0,150)")
assert result['status'] == 'error'
expected_msg = "Target qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

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

The exact error message assertions in these three tests make the tests brittle and tightly coupled to implementation details. Looking at the implementation in agent_skills.py, the _get_range_error_message function checks the control qubit first (line 211), then the target qubit (line 213). This means that when both qubits are out of range in a CX gate, only the control qubit error is reported.

However, test_error_message_format_cx_target (line 716) expects the exact error message for the target qubit, which will only occur if the control qubit is valid. If the logic in _get_range_error_message changes to check the target qubit first, or if it reports both errors, this test will fail even though the validation still works correctly.

Consider making these assertions more flexible by checking for key components (status, presence of out of range message, and the invalid index value) rather than exact string matching, similar to the approach used in the other tests in this class.

Suggested change
expected_msg = "Qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg
def test_error_message_format_cx_control(self):
"""Test error message format for CX gate with invalid control"""
result = agent_skills.simulate_circuit("cx(150,0)")
assert result['status'] == 'error'
expected_msg = "Control qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg
def test_error_message_format_cx_target(self):
"""Test error message format for CX gate with invalid target"""
result = agent_skills.simulate_circuit("cx(0,150)")
assert result['status'] == 'error'
expected_msg = "Target qubit index 150 out of range. Must be between 0 and 100."
assert result['error'] == expected_msg
error_msg = result.get('error', '')
assert 'out of range' in error_msg.lower()
assert '150' in error_msg
def test_error_message_format_cx_control(self):
"""Test error message format for CX gate with invalid control"""
result = agent_skills.simulate_circuit("cx(150,0)")
assert result['status'] == 'error'
error_msg = result.get('error', '')
assert 'out of range' in error_msg.lower()
assert '150' in error_msg
def test_error_message_format_cx_target(self):
"""Test error message format for CX gate with invalid target"""
result = agent_skills.simulate_circuit("cx(0,150)")
assert result['status'] == 'error'
error_msg = result.get('error', '')
assert 'out of range' in error_msg.lower()
assert '150' in error_msg

Copilot uses AI. Check for mistakes.
@toolate28
Copy link
Owner

@copilot apply changes based on the comments in this thread

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants