(t *testing.T)
| 734 | } |
| 735 | |
| 736 | func TestComputeTokenUsageDiff_WithData(t *testing.T) { |
| 737 | tu1 := &TokenUsageSummary{ |
| 738 | TotalInputTokens: 10000, |
| 739 | TotalOutputTokens: 2000, |
| 740 | TotalCacheReadTokens: 5000, |
| 741 | TotalCacheWriteTokens: 1000, |
| 742 | TotalAIC: 0.8, |
| 743 | TotalRequests: 10, |
| 744 | CacheEfficiency: 0.333, |
| 745 | } |
| 746 | tu2 := &TokenUsageSummary{ |
| 747 | TotalInputTokens: 15000, |
| 748 | TotalOutputTokens: 3000, |
| 749 | TotalCacheReadTokens: 7000, |
| 750 | TotalCacheWriteTokens: 800, |
| 751 | TotalAIC: 1.4, |
| 752 | TotalRequests: 14, |
| 753 | CacheEfficiency: 0.318, |
| 754 | } |
| 755 | |
| 756 | diff := computeTokenUsageDiff(tu1, tu2) |
| 757 | |
| 758 | require.NotNil(t, diff, "Should produce token usage diff when data is available") |
| 759 | assert.Equal(t, 10000, diff.Run1InputTokens, "Run1 input tokens should be 10000") |
| 760 | assert.Equal(t, 15000, diff.Run2InputTokens, "Run2 input tokens should be 15000") |
| 761 | assert.Equal(t, "+50%", diff.InputTokensChange, "Input tokens should increase by 50%") |
| 762 | |
| 763 | assert.Equal(t, 2000, diff.Run1OutputTokens, "Run1 output tokens should be 2000") |
| 764 | assert.Equal(t, 3000, diff.Run2OutputTokens, "Run2 output tokens should be 3000") |
| 765 | assert.Equal(t, "+50%", diff.OutputTokensChange, "Output tokens should increase by 50%") |
| 766 | |
| 767 | assert.Equal(t, 5000, diff.Run1CacheReadTokens, "Run1 cache read tokens should be 5000") |
| 768 | assert.Equal(t, 7000, diff.Run2CacheReadTokens, "Run2 cache read tokens should be 7000") |
| 769 | assert.Equal(t, "+40%", diff.CacheReadTokensChange, "Cache read tokens should increase by 40%") |
| 770 | |
| 771 | assert.Equal(t, 1000, diff.Run1CacheWriteTokens, "Run1 cache write tokens should be 1000") |
| 772 | assert.Equal(t, 800, diff.Run2CacheWriteTokens, "Run2 cache write tokens should be 800") |
| 773 | assert.Equal(t, "-20%", diff.CacheWriteTokensChange, "Cache write tokens should decrease by 20%") |
| 774 | |
| 775 | assert.InDelta(t, 0.8, diff.Run1AIC, 1e-9, "Run1 AI Credits should be 0.8") |
| 776 | assert.InDelta(t, 1.4, diff.Run2AIC, 1e-9, "Run2 AI Credits should be 1.4") |
| 777 | assert.Equal(t, "+0.600", diff.AICChange, "AI Credits delta should be +0.600") |
| 778 | |
| 779 | assert.Equal(t, 10, diff.Run1TotalRequests, "Run1 requests should be 10") |
| 780 | assert.Equal(t, 14, diff.Run2TotalRequests, "Run2 requests should be 14") |
| 781 | assert.Equal(t, "+4", diff.RequestsDelta, "Requests delta should be +4") |
| 782 | |
| 783 | assert.InDelta(t, 0.333, diff.Run1CacheEfficiency, 0.001, "Run1 cache efficiency should match") |
| 784 | assert.InDelta(t, 0.318, diff.Run2CacheEfficiency, 0.001, "Run2 cache efficiency should match") |
| 785 | assert.Equal(t, "-1.5pp", diff.CacheEfficiencyChange, "Cache efficiency change should be -1.5pp") |
| 786 | } |
| 787 | |
| 788 | func TestComputeTokenUsageDiff_Run1Nil(t *testing.T) { |
| 789 | tu2 := &TokenUsageSummary{ |
nothing calls this directly
no test coverage detected