Skip to content

Commit 1b933f8

Browse files
TonsOfFunclaude
andcommitted
Add Usage addition and multi-turn accumulation tests
PR #274 (Improved Usage Tracking) introduced Usage#+ for combining statistics across multi-turn tool-calling conversations, but shipped without tests for this feature. This adds: - Basic addition combining two usage objects - Addition with nil optional fields - Addition with nil operand returns self - Chained addition simulating multi-turn accumulation cc @TheRealNeil Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent b34f257 commit 1b933f8

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

test/providers/common/usage_test.rb

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,54 @@ class UsageTest < ActiveSupport::TestCase
242242
assert_equal 1000, usage.provider_details[:cache_creation][:ephemeral_5m_input_tokens]
243243
assert_equal 2, usage.provider_details[:server_tool_use][:web_fetch_requests]
244244
end
245+
246+
# --- Usage addition (multi-turn accumulation) ---
247+
248+
test "addition combines two usage objects" do
249+
usage1 = Usage.new(input_tokens: 100, output_tokens: 50, cached_tokens: 20)
250+
usage2 = Usage.new(input_tokens: 75, output_tokens: 25, cached_tokens: 10)
251+
252+
combined = usage1 + usage2
253+
254+
assert_equal 175, combined.input_tokens
255+
assert_equal 75, combined.output_tokens
256+
assert_equal 250, combined.total_tokens
257+
assert_equal 30, combined.cached_tokens
258+
end
259+
260+
test "addition handles nil optional fields" do
261+
usage1 = Usage.new(input_tokens: 100, output_tokens: 50)
262+
usage2 = Usage.new(input_tokens: 75, output_tokens: 25, reasoning_tokens: 10)
263+
264+
combined = usage1 + usage2
265+
266+
assert_equal 175, combined.input_tokens
267+
assert_equal 75, combined.output_tokens
268+
assert_equal 10, combined.reasoning_tokens
269+
assert_nil combined.cached_tokens
270+
end
271+
272+
test "addition with nil returns self" do
273+
usage = Usage.new(input_tokens: 100, output_tokens: 50)
274+
275+
combined = usage + nil
276+
277+
assert_equal 100, combined.input_tokens
278+
assert_equal 50, combined.output_tokens
279+
end
280+
281+
test "chained addition accumulates across multiple turns" do
282+
turn1 = Usage.new(input_tokens: 50, output_tokens: 20)
283+
turn2 = Usage.new(input_tokens: 80, output_tokens: 30, cached_tokens: 10)
284+
turn3 = Usage.new(input_tokens: 60, output_tokens: 25, cached_tokens: 5)
285+
286+
cumulative = turn1 + turn2 + turn3
287+
288+
assert_equal 190, cumulative.input_tokens
289+
assert_equal 75, cumulative.output_tokens
290+
assert_equal 265, cumulative.total_tokens
291+
assert_equal 15, cumulative.cached_tokens
292+
end
245293
end
246294
end
247295
end

0 commit comments

Comments
 (0)