squiggle/packages/squiggle-lang/__tests__/GenericDist/GenericOperation__Test.res

74 lines
2.1 KiB
Plaintext
Raw Normal View History

2022-03-28 19:14:39 +00:00
open Jest
open Expect
let env: DistributionOperation.env = {
2022-03-28 19:14:39 +00:00
sampleCount: 100,
xyPointLength: 100,
}
2022-04-08 06:51:38 +00:00
let {normalDist5, normalDist10, normalDist20, uniformDist} = module(GenericDist_Fixtures)
let {toFloat, toDist, toString, toError} = module(DistributionOperation.Output)
let {run} = module(DistributionOperation)
let {fmap} = module(DistributionOperation.Output)
let run = run(~env)
let outputMap = fmap(~env)
2022-03-28 19:14:39 +00:00
let toExt: option<'a> => 'a = E.O.toExt(
"Should be impossible to reach (This error is in test file)",
)
describe("normalize", () => {
test("has no impact on normal dist", () => {
2022-04-06 19:19:27 +00:00
let result = run(FromDist(ToDist(Normalize), normalDist5))
expect(result)->toEqual(Dist(normalDist5))
2022-03-28 19:14:39 +00:00
})
})
describe("mean", () => {
test("for a normal distribution", () => {
2022-04-06 19:19:27 +00:00
let result = DistributionOperation.run(~env, FromDist(ToFloat(#Mean), normalDist5))
expect(result)->toEqual(Float(5.0))
2022-03-28 19:14:39 +00:00
})
})
describe("mixture", () => {
test("on two normal distributions", () => {
let result =
run(Mixture([(normalDist10, 0.5), (normalDist20, 0.5)]))
->outputMap(FromDist(ToFloat(#Mean)))
->toFloat
->toExt
2022-03-28 19:14:39 +00:00
expect(result)->toBeCloseTo(15.28)
})
})
describe("toPointSet", () => {
test("on symbolic normal distribution", () => {
let result =
2022-04-06 19:19:27 +00:00
run(FromDist(ToDist(ToPointSet), normalDist5))
->outputMap(FromDist(ToFloat(#Mean)))
->toFloat
->toExt
2022-03-28 19:14:39 +00:00
expect(result)->toBeCloseTo(5.09)
})
test("on sample set distribution with under 4 points", () => {
let result =
run(FromDist(ToDist(ToPointSet), SampleSet([0.0, 1.0, 2.0, 3.0])))->outputMap(
FromDist(ToFloat(#Mean)),
2022-03-28 19:14:39 +00:00
)
expect(result)->toEqual(GenDistError(Other("Converting sampleSet to pointSet failed")))
2022-03-28 19:14:39 +00:00
})
2022-03-31 12:37:04 +00:00
Skip.test("on sample set", () => {
2022-03-28 19:14:39 +00:00
let result =
2022-04-06 19:19:27 +00:00
run(FromDist(ToDist(ToPointSet), normalDist5))
->outputMap(FromDist(ToDist(ToSampleSet(1000))))
->outputMap(FromDist(ToDist(ToPointSet)))
->outputMap(FromDist(ToFloat(#Mean)))
->toFloat
->toExt
2022-03-28 19:14:39 +00:00
expect(result)->toBeCloseTo(5.09)
})
})