Skip to content

Commit 2ea02d1

Browse files
committed
fix(P4.03): ensure pie slices sum to exactly 100 using last-remainder method [codexPreflight]
1 parent e2eb4c2 commit 2ea02d1

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

src/lib/components/AiLinesPieChart/AiLinesPieChartHelpers.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ describe('computeAiLinesSlices', () => {
4848
const slices = computeAiLinesSlices(summaries)
4949
expect(slices).not.toBeNull()
5050
const total = slices!.reduce((sum, s) => sum + s.value, 0)
51-
expect(total).toBeCloseTo(100, 1)
51+
expect(total).toBe(100)
5252
})
5353

5454
it('each slice value is proportional to its share of total lines', () => {

src/lib/components/AiLinesPieChart/AiLinesPieChartHelpers.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,17 @@ export function computeAiLinesSlices(summaries: SummariesResult): AiLinesSlice[]
2727

2828
const pct = (n: number) => Math.round((n / total) * 10000) / 100
2929

30-
return [
30+
const raw = [
3131
{ name: 'AI Additions', value: pct(totals.ai_additions) },
3232
{ name: 'AI Deletions', value: pct(totals.ai_deletions) },
3333
{ name: 'Human Additions', value: pct(totals.human_additions) },
34-
{ name: 'Human Deletions', value: pct(totals.human_deletions) },
34+
{ name: 'Human Deletions', value: 0 },
3535
]
36+
// Assign the last slice as remainder so slices sum to exactly 100
37+
const sumFirst = raw.slice(0, -1).reduce((a, s) => a + s.value, 0)
38+
raw[raw.length - 1].value = Math.round((100 - sumFirst) * 100) / 100
39+
40+
return raw
3641
}
3742

3843
export function buildAiLinesPieOption(slices: AiLinesSlice[]): AiLinesPieOption {

0 commit comments

Comments
 (0)