test(image-pipeline): add cpu webgl parity coverage

This commit is contained in:
Matthias
2026-04-04 22:16:08 +02:00
parent 195a812ba2
commit 455458cb1e
3 changed files with 624 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
// @vitest-environment jsdom
import { afterEach, describe, expect, it } from "vitest";
import {
createParityPipelines,
evaluateCpuWebglParity,
installParityWebglContextMock,
parityTolerances,
restoreParityWebglContextMock,
} from "@/tests/image-pipeline/parity/fixtures";
describe("cpu vs webgl parity", () => {
afterEach(() => {
restoreParityWebglContextMock();
});
it("keeps curves-only pipeline within parity tolerance", () => {
const pipelines = createParityPipelines();
installParityWebglContextMock();
const metrics = evaluateCpuWebglParity(pipelines.curvesOnly);
expect(metrics.maxChannelDelta).toBeLessThanOrEqual(parityTolerances.curvesOnly.maxChannelDelta);
expect(metrics.histogramSimilarity).toBeGreaterThanOrEqual(
parityTolerances.curvesOnly.histogramSimilarity,
);
});
it("keeps color-adjust-only pipeline within parity tolerance", () => {
const pipelines = createParityPipelines();
installParityWebglContextMock();
const metrics = evaluateCpuWebglParity(pipelines.colorAdjustOnly);
expect(metrics.maxChannelDelta).toBeLessThanOrEqual(
parityTolerances.colorAdjustOnly.maxChannelDelta,
);
expect(metrics.histogramSimilarity).toBeGreaterThanOrEqual(
parityTolerances.colorAdjustOnly.histogramSimilarity,
);
});
it("keeps curves + color-adjust chain within parity tolerance", () => {
const pipelines = createParityPipelines();
installParityWebglContextMock();
const metrics = evaluateCpuWebglParity(pipelines.curvesPlusColorAdjust);
expect(metrics.maxChannelDelta).toBeLessThanOrEqual(
parityTolerances.curvesPlusColorAdjust.maxChannelDelta,
);
expect(metrics.histogramSimilarity).toBeGreaterThanOrEqual(
parityTolerances.curvesPlusColorAdjust.histogramSimilarity,
);
});
});