squiggle/packages/squiggle-lang/__tests__/TS/PointSet_test.ts

38 lines
1.2 KiB
TypeScript
Raw Permalink Normal View History

2022-04-20 22:48:04 +00:00
// import { errorValueToString } from "../../src/js/index";
2022-04-20 23:07:25 +00:00
import { testRun, expectErrorToBeBounded } from "./TestHelpers";
import * as fc from "fast-check";
2022-04-20 04:50:46 +00:00
2022-04-20 23:07:25 +00:00
describe("Mean of mixture is weighted average of means", () => {
test.skip("mx(beta(a,b), lognormal(m,s), [x,y])", () => {
fc.assert(
fc.property(
fc.float({ min: 1e-1 }), // alpha
fc.float({ min: 1 }), // beta
fc.float(), // mu
fc.float({ min: 1e-1 }), // sigma
fc.float({ min: 1e-7 }),
fc.float({ min: 1e-7 }),
(a, b, m, s, x, y) => {
let squiggleString = `mean(mixture(beta(${a},${b}), lognormal(${m},${s}), [${x}, ${y}]))`;
let res = testRun(squiggleString);
let weightDenom = x + y;
let betaWeight = x / weightDenom;
let lognormalWeight = y / weightDenom;
let betaMean = 1 / (1 + b / a);
let lognormalMean = m + s ** 2 / 2;
if (res.tag == "number") {
expectErrorToBeBounded(
res.value,
betaWeight * betaMean + lognormalWeight * lognormalMean,
1,
2
);
} else {
expect(res.value).toEqual("some error message");
}
}
)
);
});
});