397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
1.4 KiB
JavaScript
29 lines
1.4 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { generateMutants, MUTATION_OPERATORS } from './mutate-operators.mjs';
|
|
|
|
describe('generateMutants', () => {
|
|
it('флип === → !== даёт мутанта, отличного от оригинала', () => {
|
|
const src = 'export const f = (a, b) => a === b;';
|
|
const muts = generateMutants(src);
|
|
expect(muts.length).toBeGreaterThan(0);
|
|
expect(muts.every((m) => m.mutated !== src)).toBe(true);
|
|
expect(muts.some((m) => m.mutated.includes('a !== b'))).toBe(true);
|
|
});
|
|
it('true → false и && → || покрыты', () => {
|
|
const muts = generateMutants('const x = ok && ready === true;');
|
|
expect(muts.some((m) => m.mutated.includes('ready === false'))).toBe(true);
|
|
expect(muts.some((m) => m.mutated.includes('ok || ready'))).toBe(true);
|
|
});
|
|
it('нет операторных целей → пустой список (нечего мутировать)', () => {
|
|
expect(generateMutants('const s = "plain string";')).toEqual([]);
|
|
});
|
|
it('детерминирован + dedup + cap (≤ MUTATION_OPERATORS.cap)', () => {
|
|
const src = 'a === b; c === d; e === f; g === h;';
|
|
const a = generateMutants(src);
|
|
const b = generateMutants(src);
|
|
expect(a).toEqual(b);
|
|
expect(new Set(a.map((m) => m.mutated)).size).toBe(a.length);
|
|
expect(a.length).toBeLessThanOrEqual(MUTATION_OPERATORS.cap);
|
|
});
|
|
});
|