65 lines
1.9 KiB
Plaintext
65 lines
1.9 KiB
Plaintext
open Jest
|
|
open Expect
|
|
|
|
let makeTest = (~only=false, str, item1, item2) =>
|
|
only
|
|
? Only.test(str, () => expect(item1)->toEqual(item2))
|
|
: test(str, () => expect(item1)->toEqual(item2))
|
|
|
|
let pointSetDist1: PointSetTypes.xyShape = {xs: [1., 4., 8.], ys: [0.2, 0.4, 0.8]}
|
|
|
|
let pointSetDist2: PointSetTypes.xyShape = {
|
|
xs: [1., 5., 10.],
|
|
ys: [0.2, 0.5, 0.8],
|
|
}
|
|
|
|
let pointSetDist3: PointSetTypes.xyShape = {
|
|
xs: [1., 20., 50.],
|
|
ys: [0.2, 0.5, 0.8],
|
|
}
|
|
|
|
let makeAndGetErrorString = (~xs, ~ys) =>
|
|
XYShape.T.make(~xs, ~ys)->E.R.getError->E.O2.fmap(XYShape.Error.toString)
|
|
|
|
describe("XYShapes", () => {
|
|
describe("Validator", () => {
|
|
makeTest(
|
|
"with no errors",
|
|
makeAndGetErrorString(~xs=[1.0, 4.0, 8.0], ~ys=[0.2, 0.4, 0.8]),
|
|
None,
|
|
)
|
|
makeTest("when empty", makeAndGetErrorString(~xs=[], ~ys=[]), Some("Xs is empty"))
|
|
makeTest(
|
|
"when not sorted, different lengths, and not finite",
|
|
makeAndGetErrorString(~xs=[2.0, 1.0, infinity, 0.0], ~ys=[3.0, Js.Float._NaN]),
|
|
Some(
|
|
"Multiple Errors: [Xs is not sorted], [Xs and Ys have different lengths. Xs has length 4 and Ys has length 2], [Xs is not finite. Example value: Infinity], [Ys is not finite. Example value: NaN]",
|
|
),
|
|
)
|
|
})
|
|
|
|
describe("logScorePoint", () => {
|
|
makeTest("When identical", XYShape.logScorePoint(30, pointSetDist1, pointSetDist1), Some(0.0))
|
|
makeTest(
|
|
"When similar",
|
|
XYShape.logScorePoint(30, pointSetDist1, pointSetDist2),
|
|
Some(1.658971191043856),
|
|
)
|
|
makeTest(
|
|
"When very different",
|
|
XYShape.logScorePoint(30, pointSetDist1, pointSetDist3),
|
|
Some(210.3721280423322),
|
|
)
|
|
})
|
|
describe("integrateWithTriangles", () =>
|
|
makeTest(
|
|
"integrates correctly",
|
|
XYShape.Range.integrateWithTriangles(pointSetDist1),
|
|
Some({
|
|
xs: [1., 4., 8.],
|
|
ys: [0.0, 0.9000000000000001, 3.3000000000000007],
|
|
}),
|
|
)
|
|
)
|
|
})
|