squiggle/packages/squiggle-lang/__tests__/XYShape_test.res

64 lines
1.9 KiB
Plaintext
Raw Normal View History

2022-01-29 22:43:08 +00:00
open Jest
open Expect
let makeTest = (~only=false, str, item1, item2) =>
only
2022-04-12 23:59:40 +00:00
? Only.test(str, () => expect(item1)->toEqual(item2))
: test(str, () => expect(item1)->toEqual(item2))
2022-01-29 22:43:08 +00:00
2022-02-15 21:13:33 +00:00
let pointSetDist1: PointSetTypes.xyShape = {xs: [1., 4., 8.], ys: [0.2, 0.4, 0.8]}
2022-01-29 22:43:08 +00:00
2022-02-15 21:13:33 +00:00
let pointSetDist2: PointSetTypes.xyShape = {
2022-01-29 22:43:08 +00:00
xs: [1., 5., 10.],
ys: [0.2, 0.5, 0.8],
}
2022-02-15 21:13:33 +00:00
let pointSetDist3: PointSetTypes.xyShape = {
2022-01-29 22:43:08 +00:00
xs: [1., 20., 50.],
ys: [0.2, 0.5, 0.8],
}
describe("XYShapes", () => {
2022-04-28 18:52:44 +00:00
describe("Validator", () => {
makeTest("with no errors", XYShape.T.Validator.validate(pointSetDist1), None)
makeTest(
"when empty",
XYShape.T.Validator.validate({xs: [], ys: []})->E.O2.fmap(Errors.toString),
Some("XYShape validate Xs is empty"),
)
makeTest(
"when not sorted, different lengths, and not finite",
XYShape.T.Validator.validate({xs: [2.0, 1.0, infinity, 0.0], ys: [3.0, Js.Float._NaN]})->E.O2.fmap(
2022-04-28 18:52:44 +00:00
Errors.toString,
),
Some(
"Multiple Errors: [XYShape validate Xs is not sorted], [XYShape validate Xs and Ys have different lengths. Xs has length 4 and Ys has length 2], [XYShape validate Xs is not finite. Example value: Infinity], [XYShape validate Ys is not finite. Example value: NaN]",
2022-04-28 18:52:44 +00:00
),
)
})
2022-01-29 22:43:08 +00:00
describe("logScorePoint", () => {
2022-02-15 21:13:33 +00:00
makeTest("When identical", XYShape.logScorePoint(30, pointSetDist1, pointSetDist1), Some(0.0))
2022-04-12 23:59:40 +00:00
makeTest(
"When similar",
XYShape.logScorePoint(30, pointSetDist1, pointSetDist2),
Some(1.658971191043856),
)
2022-01-29 22:43:08 +00:00
makeTest(
"When very different",
2022-02-15 21:13:33 +00:00
XYShape.logScorePoint(30, pointSetDist1, pointSetDist3),
2022-01-29 22:43:08 +00:00
Some(210.3721280423322),
)
})
describe("integrateWithTriangles", () =>
makeTest(
"integrates correctly",
2022-02-15 21:13:33 +00:00
XYShape.Range.integrateWithTriangles(pointSetDist1),
2022-01-29 22:43:08 +00:00
Some({
xs: [1., 4., 8.],
ys: [0.0, 0.9000000000000001, 3.3000000000000007],
}),
)
)
})