open Jest open Expect open TestHelpers describe("Scale logarithm", () => { /* These tests may not be important, because scalelog isn't normalized The first one may be failing for a number of reasons. */ Skip.test("mean of the base e scalar logarithm of an exponential(10)", () => { let rate = 10.0 let scalelog = DistributionOperation.Constructors.scaleLogarithm( ~env, mkExponential(rate), MagicNumbers.Math.e, ) let meanResult = E.R2.bind(DistributionOperation.Constructors.mean(~env), scalelog) // expected value of log of exponential distribution. let meanAnalytical = Js.Math.log(rate) +. 1.0 switch meanResult { | Ok(meanValue) => meanValue->expect->toBeCloseTo(meanAnalytical) | Error(err) => err->expect->toBe(DistributionTypes.OperationError(DivisionByZeroError)) } }) let low = 10.0 let high = 100.0 let scalelog = DistributionOperation.Constructors.scaleLogarithm(~env, mkUniform(low, high), 2.0) test("mean of the base 2 scalar logarithm of a uniform(10, 100)", () => { //For uniform pdf `_ => 1 / (b - a)`, the expected value of log of uniform is `integral from a to b of x * log(1 / (b -a)) dx` let meanResult = E.R2.bind(DistributionOperation.Constructors.mean(~env), scalelog) let meanAnalytical = -.Js.Math.log2(high -. low) /. 2.0 *. (high ** 2.0 -. low ** 2.0) // -. Js.Math.log2(high -. low) switch meanResult { | Ok(meanValue) => meanValue->expect->toBeCloseTo(meanAnalytical) | Error(err) => err->expect->toEqual(DistributionTypes.OperationError(NegativeInfinityError)) } }) })