Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/commands/compare.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import assert from "node:assert/strict";
import { describe, it } from "node:test";
import { diffSimilarity, parseDiff } from "../scoring/diff-parser.js";

describe("compare logic", () => {
const diffA = "diff --git a/a.ts b/a.ts\n--- a/a.ts\n+++ b/a.ts\n@@ -1 +1 @@\n+const x = 1;";
const diffB = "diff --git a/b.ts b/b.ts\n--- a/b.ts\n+++ b/b.ts\n@@ -1 +1 @@\n+const y = 2;";

it("computes similarity between two diffs", () => {
const sim = diffSimilarity(diffA, diffA);
assert.equal(sim, 1);
});

it("returns 0 for completely different diffs", () => {
const sim = diffSimilarity(diffA, diffB);
assert.equal(sim, 0);
});

it("identifies files changed by each agent", () => {
const filesA = new Set(parseDiff(diffA).map((f) => f.path));
const filesB = new Set(parseDiff(diffB).map((f) => f.path));
const allFiles = new Set([...filesA, ...filesB]);

assert.equal(allFiles.size, 2);
assert.ok(allFiles.has("a.ts"));
assert.ok(allFiles.has("b.ts"));
});

it("counts shared vs unique added lines", () => {
const linesA = new Set(parseDiff(diffA).flatMap((f) => f.addedLines.map((l) => l.trim())));
const linesB = new Set(parseDiff(diffB).flatMap((f) => f.addedLines.map((l) => l.trim())));

let shared = 0;
for (const line of linesA) {
if (linesB.has(line)) shared++;
}
assert.equal(shared, 0); // completely different
});
});
41 changes: 41 additions & 0 deletions src/commands/evaluate.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import assert from "node:assert/strict";
import { describe, it } from "node:test";

// Test the bordaRecommend logic from evaluate.ts
// Since bordaRecommend is not exported, we test the evaluation concept
describe("evaluate scoring comparison", () => {
it("borda count: lowest rank sum wins", () => {
// Simulate: 3 agents ranked on 3 criteria
// Agent 1: rank 0, 1, 2 = sum 3
// Agent 2: rank 1, 0, 0 = sum 1 (winner)
// Agent 3: rank 2, 2, 1 = sum 5
const ranks = new Map([
[1, 3],
[2, 1],
[3, 5],
]);
let bestId = -1;
let bestRank = Infinity;
for (const [id, rank] of ranks) {
if (rank < bestRank) {
bestRank = rank;
bestId = id;
}
}
assert.equal(bestId, 2);
});

it("agreement detection: methods agree when same agent recommended", () => {
const weighted = 1;
const copeland = 1;
const borda = 1;
assert.equal(weighted === copeland && copeland === borda, true);
});

it("disagreement detection: methods disagree when different agents", () => {
const weighted: number = 1;
const copeland: number = 2;
const borda: number = 2;
assert.equal(weighted === copeland && copeland === borda, false);
});
});
Loading