merge_intervals gives wrong results
Done- Plan (done)
- Code (done)
- Test (done)
- Review (done)
- Finish (done)
Cost
$0.0028
Tests
Passed
Iterations
1
Re-plans
0
LLM calls
9
Prompt read from cache
80%
Usage by agent
- Cache read
- Cache write
- Input
- Output
View as table
| Agent | Cost | Cache read | Cache write | Input | Output |
|---|---|---|---|---|---|
| planner | $0.0008 | 5,810 | 948 | 8 | 1,305 |
| coder | $0.0009 | 9,170 | 2,334 | 8 | 1,037 |
| tester | $0.0011 | 10,941 | 3,268 | 8 | 1,158 |
Timeline
-
planner iteration 1 Finished 3 calls · 8,071 tokens · $0.0008 · 9.5s
Loading…
-
coder iteration 1 Finished 3 calls · 12.5K tokens · $0.0009 · 6.7s
Loading…
-
tester iteration 1 Finished 3 calls · 15.4K tokens · $0.0011 · 7.8s
Loading…
-
verify iteration 1 Passed 0.5s
............ [100%] 12 passed in 0.02s
Final diff
diff --git a/intervals.py b/intervals.py index 76e6d7f..2bafff4 100644 --- a/intervals.py +++ b/intervals.py @@ -1,8 +1,8 @@ def merge_intervals(intervals: list[tuple[int, int]]) -> list[tuple[int, int]]: merged: list[tuple[int, int]] = [] - for start, end in intervals: - if merged and start < merged[-1][1]: - merged[-1] = (merged[-1][0], end) + for start, end in sorted(intervals): + if merged and start <= merged[-1][1]: + merged[-1] = (merged[-1][0], max(merged[-1][1], end)) else: merged.append((start, end)) return merged diff --git a/test_intervals.py b/test_intervals.py index 1e6a250..c3edf81 100644 --- a/test_intervals.py +++ b/test_intervals.py @@ -7,3 +7,49 @@ def test_overlap(): def test_separate(): assert merge_intervals([(1, 2), (3, 4)]) == [(1, 2), (3, 4)] + + +def test_touching_merge(): + assert merge_intervals([(1, 2), (2, 3)]) == [(1, 3)] + + +def test_unsorted_input(): + assert merge_intervals([(5, 6), (1, 2)]) == [(1, 2), (5, 6)] + + +def test_contained_does_not_shrink(): + assert merge_intervals([(1, 10), (2, 3)]) == [(1, 10)] + + +def test_empty(): + assert merge_intervals([]) == [] + + +def test_input_not_mutated(): + data = [(5, 6), (1, 2)] + merge_intervals(data) + assert data == [(5, 6), (1, 2)] + + +def test_single_interval(): + assert merge_intervals([(1, 2)]) == [(1, 2)] + + +def test_unsorted_chain_merges(): + assert merge_intervals([(4, 6), (1, 3), (2, 5)]) == [(1, 6)] + + +def test_unsorted_contained_listed_first(): + assert merge_intervals([(2, 3), (1, 10)]) == [(1, 10)] + + +def test_equal_starts(): + assert merge_intervals([(1, 5), (1, 2)]) == [(1, 5)] + assert merge_intervals([(1, 2), (1, 5)]) == [(1, 5)] + + +def test_unsorted_input_not_mutated_order_preserved(): + data = [(3, 4), (1, 2), (2, 3)] + original = list(data) + assert merge_intervals(data) == [(1, 4)] + assert data == original