Skip to content

Commit 0080337

Browse files
committed
Tighten candidate budget accounting
1 parent ef5f371 commit 0080337

4 files changed

Lines changed: 10 additions & 8 deletions

File tree

iss/strategies/balanced_root_scale.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@ def search(self, n: int, budget: SearchBudget) -> SearchAttempt:
3434
prime_checks = 0
3535

3636
for p in local_prime_candidates(center, budget.radius):
37-
candidates_tested += 1
38-
prime_checks += 1
39-
40-
if candidates_tested > budget.max_candidates:
37+
if candidates_tested >= budget.max_candidates:
4138
return self._budget_exhausted(
4239
budget=budget,
4340
candidates_tested=candidates_tested,
4441
prime_checks=prime_checks,
4542
)
4643

44+
candidates_tested += 1
45+
prime_checks += 1
46+
4747
if n % p != 0:
4848
continue
4949

iss/strategies/log_scale_semiprime.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@ def search(self, n: int, budget: SearchBudget) -> SearchAttempt:
4040
center = integer_nth_root_floor(n, denominator)
4141

4242
for p in local_prime_candidates(center, budget.radius):
43-
candidates_tested += 1
44-
prime_checks += 1
45-
46-
if candidates_tested > budget.max_candidates:
43+
if candidates_tested >= budget.max_candidates:
4744
return self._budget_exhausted(
4845
budget=budget,
4946
candidates_tested=candidates_tested,
5047
prime_checks=prime_checks,
5148
)
5249

50+
candidates_tested += 1
51+
prime_checks += 1
52+
5353
if n % p != 0:
5454
continue
5555

tests/test_balanced_root_scale.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def test_balanced_root_scale_respects_candidate_budget() -> None:
5151
assert result.status == "no_match"
5252
assert result.attempts[0].status == "budget_exhausted"
5353
assert result.attempts[0].reason == "max_candidates_exceeded"
54+
assert result.attempts[0].bounds.candidates_tested == 0
5455

5556

5657
def test_balanced_root_scale_payload_is_structural_dataclass() -> None:

tests/test_log_scale_semiprime.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def test_log_scale_semiprime_respects_candidate_budget() -> None:
5353
assert result.status == "no_match"
5454
assert result.attempts[0].status == "budget_exhausted"
5555
assert result.attempts[0].reason == "max_candidates_exceeded"
56+
assert result.attempts[0].bounds.candidates_tested == 1
5657

5758

5859
def test_log_scale_semiprime_returns_structural_payload_dataclass() -> None:

0 commit comments

Comments
 (0)