mean and median crash on an empty list

Done

/home/devdi/devswarm/evals/tasks/empty_input_statistics/repo · 2026-11-09 16:14:55 UTC · took 27.5s

  1. Plan (done)
  2. Code (done)
  3. Test (done)
  4. Review (done)
  5. Finish (done)
Cost
$0.0023
Tests
Passed
Iterations
1
Re-plans
0
LLM calls
10
Prompt read from cache
85%

Usage by agent

Cost per agent
planner: $0.0006 planner planner, Cost: $0.0006 $0.0006 coder: $0.0007 coder coder, Cost: $0.0007 $0.0007 tester: $0.0010 tester tester, Cost: $0.0010 $0.0010
Tokens per agent
  • Cache read
  • Cache write
  • Input
  • Output
planner: 7,345 planner planner, Cache read: 5,625 planner, Cache write: 843 planner, Output: 869 7,345 coder: 11.2K coder coder, Cache read: 8,573 coder, Cache write: 1,836 coder, Output: 804 11.2K tester: 17.7K tester tester, Cache read: 14.2K tester, Cache write: 2,367 tester, Output: 1,160 17.7K
View as table
AgentCostCache readCache writeInputOutput
planner$0.00065,6258438869
coder$0.00078,5731,8368804
tester$0.001014,1832,367101,160

Timeline

  1. planner iteration 1 Finished 3 calls · 7,345 tokens · $0.0006 · 6.2s

    Loading…

  2. coder iteration 1 Finished 3 calls · 11.2K tokens · $0.0007 · 7.2s

    Loading…

  3. tester iteration 1 Finished 4 calls · 17.7K tokens · $0.0010 · 13.0s

    Loading…

  4. verify iteration 1 Passed 0.5s
    ........                                                                 [100%]
    8 passed in 0.02s
    

Final diff

diff --git a/stats.py b/stats.py
index 1367357..0aa8739 100644
--- a/stats.py
+++ b/stats.py
@@ -1,8 +1,12 @@
 def mean(values: list[float]) -> float:
+    if not values:
+        return 0.0
     return sum(values) / len(values)
 
 
 def median(values: list[float]) -> float:
+    if not values:
+        return 0.0
     ordered = sorted(values)
     middle = len(ordered) // 2
     if len(ordered) % 2:
diff --git a/test_stats.py b/test_stats.py
index 7b17903..296491d 100644
--- a/test_stats.py
+++ b/test_stats.py
@@ -5,6 +5,35 @@ def test_mean():
     assert mean([1, 2, 3]) == 2
 
 
+def test_mean_empty():
+    assert mean([]) == 0.0
+
+
 def test_median():
     assert median([3, 1, 2]) == 2
     assert median([1, 2, 3, 4]) == 2.5
+
+
+def test_median_empty():
+    assert median([]) == 0.0
+
+
+def test_empty_returns_float():
+    assert isinstance(mean([]), float)
+    assert isinstance(median([]), float)
+
+
+def test_empty_tuple():
+    assert mean(()) == 0.0
+    assert median(()) == 0.0
+
+
+def test_single_element():
+    assert mean([5]) == 5
+    assert median([5]) == 5
+
+
+def test_median_unsorted_and_does_not_mutate_input():
+    values = [5, 1, 4, 2, 3]
+    assert median(values) == 3
+    assert values == [5, 1, 4, 2, 3]