Files
2026-07-13 13:39:12 +08:00

166 lines
6.1 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
CAVEMAN_RULES,
getRulesForContext,
getRuleByName,
} from "../../../open-sse/services/compression/cavemanRules.ts";
describe("cavemanRules", () => {
it("should have 29+ rules", () => {
assert.ok(CAVEMAN_RULES.length >= 29, `Expected 29+ rules, got ${CAVEMAN_RULES.length}`);
});
it("every rule should have a name, pattern, replacement, and context", () => {
for (const rule of CAVEMAN_RULES) {
assert.ok(rule.name, "Rule missing name");
assert.ok(rule.pattern instanceof RegExp, `Rule ${rule.name} missing pattern`);
assert.ok(rule.replacement !== undefined, `Rule ${rule.name} missing replacement`);
assert.ok(
["all", "user", "system", "assistant"].includes(rule.context),
`Rule ${rule.name} has invalid context: ${rule.context}`
);
}
});
it("all regex patterns should compile", () => {
for (const rule of CAVEMAN_RULES) {
assert.doesNotThrow(() => rule.pattern.test("test"), `Rule ${rule.name} pattern fails`);
}
});
it("getRulesForContext filters correctly", () => {
const userRules = getRulesForContext("user");
const systemRules = getRulesForContext("system");
const assistantRules = getRulesForContext("assistant");
assert.ok(userRules.length >= 20, `Expected 20+ user rules, got ${userRules.length}`);
assert.ok(systemRules.length >= 15, `Expected 15+ system rules, got ${systemRules.length}`);
assert.ok(
assistantRules.length >= 15,
`Expected 15+ assistant rules, got ${assistantRules.length}`
);
for (const rule of userRules) {
assert.ok(
rule.context === "all" || rule.context === "user",
`User rules should include ${rule.name}`
);
}
});
it("getRuleByName returns correct rule", () => {
const rule = getRuleByName("polite_framing");
assert.ok(rule);
assert.equal(rule.name, "polite_framing");
const missing = getRuleByName("nonexistent_rule");
assert.equal(missing, undefined);
});
it("polite_framing removes 'please'", () => {
const rule = getRuleByName("polite_framing");
assert.ok(rule);
const result = "Please analyze this code".replace(rule.pattern, rule.replacement);
assert.ok(
!result.toLowerCase().includes("please"),
`Expected 'please' removed, got: ${result}`
);
});
it("hedging removes 'it seems like'", () => {
const rule = getRuleByName("hedging");
assert.ok(rule);
const result = "It seems like this works".replace(rule.pattern, rule.replacement);
assert.ok(
!result.toLowerCase().includes("it seems like"),
`Expected hedging removed, got: ${result}`
);
});
it("verbose_instructions compresses", () => {
const rule = getRuleByName("verbose_instructions");
assert.ok(rule);
const result = "provide a detailed explanation".replace(
rule.pattern,
typeof rule.replacement === "function"
? (...args: string[]) => rule.replacement(args[0], ...args.slice(1))
: rule.replacement
);
assert.ok(result.includes("provide"), `Expected 'provide', got: ${result}`);
assert.ok(!result.includes("detailed"), `Expected 'detailed' removed, got: ${result}`);
});
it("filler_adverbs removes 'basically'", () => {
const rule = getRuleByName("filler_adverbs");
assert.ok(rule);
const result = "This is basically a test".replace(rule.pattern, rule.replacement);
assert.ok(
!result.toLowerCase().includes("basically"),
`Expected 'basically' removed, got: ${result}`
);
});
it("excessive_gratitude removes 'Thank you so much'", () => {
const rule = getRuleByName("excessive_gratitude");
assert.ok(rule);
const result = "Thank you so much for your help!".replace(rule.pattern, rule.replacement);
assert.ok(
!result.toLowerCase().includes("thank you so much"),
`Expected gratitude removed, got: ${result}`
);
});
it("context_setup converts 'Here is my code' to 'Code:'", () => {
const rule = getRuleByName("context_setup");
assert.ok(rule);
const result = "Here is my code for review:".replace(rule.pattern, rule.replacement);
assert.ok(result.includes("Code:"), `Expected 'Code:', got: ${result}`);
});
it("intent_clarification converts intent to 'Goal:'", () => {
const rule = getRuleByName("intent_clarification");
assert.ok(rule);
const result = "What I'm trying to do is fix the bug".replace(rule.pattern, rule.replacement);
assert.ok(result.startsWith("Goal:"), `Expected 'Goal:', got: ${result}`);
});
it("purpose_phrases converts 'in order to' to 'to'", () => {
const rule = getRuleByName("purpose_phrases");
assert.ok(rule);
const result = "in order to fix this".replace(rule.pattern, rule.replacement);
assert.ok(result.startsWith("to "), `Expected 'to ', got: ${result}`);
assert.ok(!result.includes("in order"), `Expected 'in order' removed, got: ${result}`);
});
it("passive_voice converts 'is being used' to 'uses'", () => {
const rule = getRuleByName("passive_voice");
assert.ok(rule);
const result = "The function is being used".replace(
rule.pattern,
typeof rule.replacement === "function"
? (...args: string[]) => rule.replacement(args[0])
: rule.replacement
);
assert.ok(result.includes("uses"), `Expected 'uses', got: ${result}`);
});
it("repeated_context converts to 'See above'", () => {
const rule = getRuleByName("repeated_context");
assert.ok(rule);
const result = "As we discussed earlier, this needs fixing".replace(
rule.pattern,
rule.replacement
);
assert.ok(result.includes("See above"), `Expected 'See above', got: ${result}`);
});
it("emphasis_removal removes 'very' before adjectives", () => {
const rule = getRuleByName("emphasis_removal");
assert.ok(rule);
const result = "This is very important".replace(rule.pattern, rule.replacement);
assert.ok(!result.includes("very"), `Expected 'very' removed, got: ${result}`);
assert.ok(result.includes("important"), `Expected 'important' kept, got: ${result}`);
});
});