mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 04:50:59 +00:00
test(guards): see a squared two-argument distance as a hand-rolled spread
This commit is contained in:
1 parent
5cbe52cada
commit
f4262e2cc6
1 file changed
+14
-6
@@ -20,7 +20,7 @@ import { readFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { walkSourceFiles } from "./helpers/source-files";
|
||||
import { stripComments, walkSourceFiles } from "./helpers/source-files";
|
||||
|
||||
const SRC = join(process.cwd(), "src");
|
||||
|
||||
@@ -32,14 +32,17 @@ const ALLOWED: Record<string, string> = {
|
||||
"lib/insights/mood-pattern-cards.ts": "A pooled variance for a t statistic.",
|
||||
"lib/insights/derived/trajectory.ts":
|
||||
"The residual standard error of a regression fit (÷ n − 2).",
|
||||
"lib/insights/derived/sleep-score.ts":
|
||||
"A circular SD of the sleep midpoint around its circular mean, the input of the consistency score; `spread` has no circular distance, and the score is never shown as a spread.",
|
||||
};
|
||||
|
||||
/**
|
||||
* A squared deviation: `(x - m) ** 2`, `(x - m) * (x - m)`, or a two-argument
|
||||
* distance squared, `dist(x, m) ** 2` (a circular or otherwise custom
|
||||
* deviation is still a hand-rolled spread).
|
||||
*/
|
||||
const SQUARED_DEVIATION =
|
||||
/\(\s*[\w.[\]]+\s*-\s*[\w.[\]]+\s*\)\s*\*\*\s*2|\(\s*([\w.[\]]+)\s*-\s*([\w.[\]]+)\s*\)\s*\*\s*\(\s*\1\s*-\s*\2\s*\)/;
|
||||
|
||||
function stripComments(text: string): string {
|
||||
return text.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^\s*\/\/.*$/gm, "");
|
||||
}
|
||||
/\(\s*[\w.[\]]+\s*-\s*[\w.[\]]+\s*\)\s*\*\*\s*2|\(\s*([\w.[\]]+)\s*-\s*([\w.[\]]+)\s*\)\s*\*\s*\(\s*\1\s*-\s*\2\s*\)|\b[A-Za-z_]\w*\s*\(\s*[\w.[\]]+\s*,\s*[\w.[\]]+\s*\)\s*\*\*\s*2/;
|
||||
|
||||
function computesSpread(code: string): boolean {
|
||||
return SQUARED_DEVIATION.test(code) && code.includes("Math.sqrt(");
|
||||
@@ -59,6 +62,11 @@ describe("one standard deviation", () => {
|
||||
expect(
|
||||
computesSpread("acc += (v - mean) * (v - mean); Math.sqrt(acc / n);"),
|
||||
).toBe(true);
|
||||
expect(
|
||||
computesSpread(
|
||||
"xs.reduce((s, v) => s + circularMinuteDistance(v, mean) ** 2, 0); Math.sqrt(x);",
|
||||
),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it("no file outside the list computes its own", () => {
|
||||
|
||||
Reference in new issue
Block a user