From 28036bfb36ac504c2035062a7eb5c37dd517cf6d Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Tue, 19 Jul 2022 08:12:04 -0700 Subject: [PATCH] Minor cleanup --- ...leLibrary_FunctionRegistryLibrary_test.res | 130 +++++++++--------- .../FunctionRegistry_Core.res | 7 +- 2 files changed, 68 insertions(+), 69 deletions(-) diff --git a/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res b/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res index 77052d9b..d4f52e5c 100644 --- a/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res +++ b/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res @@ -8,71 +8,73 @@ let expectEvalToBeOk = (expr: string) => let registry = FunctionRegistry_Library.registry let examples = E.A.to_list(FunctionRegistry_Core.Registry.allExamples(registry)) -describe("Fn auto-testing", () => { - testAll("tests of validity", examples, r => { - expectEvalToBeOk(r) +describe("FunctionRegistry Library", () => { + describe("Regular tests", () => { + testEvalToBe("List.make(3, 'HI')", "Ok(['HI','HI','HI'])") + testEvalToBe("make(3, 'HI')", "Error(Function not found: make(Number,String))") + testEvalToBe("List.upTo(1,3)", "Ok([1,2,3])") + testEvalToBe("List.first([3,5,8])", "Ok(3)") + testEvalToBe("List.last([3,5,8])", "Ok(8)") + testEvalToBe("List.reverse([3,5,8])", "Ok([8,5,3])") + testEvalToBe("Dist.normal(5,2)", "Ok(Normal(5,2))") + testEvalToBe("normal(5,2)", "Ok(Normal(5,2))") + testEvalToBe("normal({mean:5,stdev:2})", "Ok(Normal(5,2))") + testEvalToBe("-2 to 4", "Ok(Normal(1,1.8238704957353074))") + testEvalToBe("pointMass(5)", "Ok(PointMass(5))") + testEvalToBe("Number.floor(5.5)", "Ok(5)") + testEvalToBe("Number.ceil(5.5)", "Ok(6)") + testEvalToBe("floor(5.5)", "Ok(5)") + testEvalToBe("ceil(5.5)", "Ok(6)") + testEvalToBe("Number.abs(5.5)", "Ok(5.5)") + testEvalToBe("abs(5.5)", "Ok(5.5)") + testEvalToBe("Number.exp(10)", "Ok(22026.465794806718)") + testEvalToBe("Number.log10(10)", "Ok(1)") + testEvalToBe("Number.log2(10)", "Ok(3.321928094887362)") + testEvalToBe("Number.sum([2,5,3])", "Ok(10)") + testEvalToBe("sum([2,5,3])", "Ok(10)") + testEvalToBe("Number.product([2,5,3])", "Ok(30)") + testEvalToBe("Number.min([2,5,3])", "Ok(2)") + testEvalToBe("Number.max([2,5,3])", "Ok(5)") + testEvalToBe("Number.mean([0,5,10])", "Ok(5)") + testEvalToBe("Number.geomean([1,5,18])", "Ok(4.481404746557164)") + testEvalToBe("Number.stdev([0,5,10,15])", "Ok(5.5901699437494745)") + testEvalToBe("Number.variance([0,5,10,15])", "Ok(31.25)") + testEvalToBe("Number.sort([10,0,15,5])", "Ok([0,5,10,15])") + testEvalToBe("Number.cumsum([1,5,3])", "Ok([1,6,9])") + testEvalToBe("Number.cumprod([1,5,3])", "Ok([1,5,15])") + testEvalToBe("Number.diff([1,5,3])", "Ok([4,-2])") + testEvalToBe( + "Dist.logScore({estimate: normal(5,2), answer: normal(5.2,1), prior: normal(5.5,3)})", + "Ok(-0.33591375663884876)", + ) + testEvalToBe( + "Dist.logScore({estimate: normal(5,2), answer: normal(5.2,1)})", + "Ok(0.32244107041564646)", + ) + testEvalToBe("Dist.logScore({estimate: normal(5,2), answer: 4.5})", "Ok(1.6433360626394853)") + testEvalToBe("Dist.klDivergence(normal(5,2), normal(5,1.5))", "Ok(0.06874342818671068)") }) - testAll( - "tests of type", - E.A.to_list( - FunctionRegistry_Core.Registry.allExamplesWithFns(registry)->E.A2.filter(((fn, _)) => - E.O.isSome(fn.output) - ), - ), - ((fn, example)) => { - let responseType = - example - ->Reducer.evaluate - ->E.R2.fmap(ReducerInterface_InternalExpressionValue.externalValueToValueType) - let expectedOutputType = fn.output |> E.O.toExn("") - expect(responseType)->toEqual(Ok(expectedOutputType)) - }, - ) -}) + describe("Fn auto-testing", () => { + testAll("tests of validity", examples, r => { + expectEvalToBeOk(r) + }) -describe("FunctionRegistry Library", () => { - testEvalToBe("List.make(3, 'HI')", "Ok(['HI','HI','HI'])") - testEvalToBe("make(3, 'HI')", "Error(Function not found: make(Number,String))") - testEvalToBe("List.upTo(1,3)", "Ok([1,2,3])") - testEvalToBe("List.first([3,5,8])", "Ok(3)") - testEvalToBe("List.last([3,5,8])", "Ok(8)") - testEvalToBe("List.reverse([3,5,8])", "Ok([8,5,3])") - testEvalToBe("Dist.normal(5,2)", "Ok(Normal(5,2))") - testEvalToBe("normal(5,2)", "Ok(Normal(5,2))") - testEvalToBe("normal({mean:5,stdev:2})", "Ok(Normal(5,2))") - testEvalToBe("-2 to 4", "Ok(Normal(1,1.8238704957353074))") - testEvalToBe("pointMass(5)", "Ok(PointMass(5))") - testEvalToBe("Number.floor(5.5)", "Ok(5)") - testEvalToBe("Number.ceil(5.5)", "Ok(6)") - testEvalToBe("floor(5.5)", "Ok(5)") - testEvalToBe("ceil(5.5)", "Ok(6)") - testEvalToBe("Number.abs(5.5)", "Ok(5.5)") - testEvalToBe("abs(5.5)", "Ok(5.5)") - testEvalToBe("Number.exp(10)", "Ok(22026.465794806718)") - testEvalToBe("Number.log10(10)", "Ok(1)") - testEvalToBe("Number.log2(10)", "Ok(3.321928094887362)") - testEvalToBe("Number.sum([2,5,3])", "Ok(10)") - testEvalToBe("sum([2,5,3])", "Ok(10)") - testEvalToBe("Number.product([2,5,3])", "Ok(30)") - testEvalToBe("Number.min([2,5,3])", "Ok(2)") - testEvalToBe("Number.max([2,5,3])", "Ok(5)") - testEvalToBe("Number.mean([0,5,10])", "Ok(5)") - testEvalToBe("Number.geomean([1,5,18])", "Ok(4.481404746557164)") - testEvalToBe("Number.stdev([0,5,10,15])", "Ok(5.5901699437494745)") - testEvalToBe("Number.variance([0,5,10,15])", "Ok(31.25)") - testEvalToBe("Number.sort([10,0,15,5])", "Ok([0,5,10,15])") - testEvalToBe("Number.cumsum([1,5,3])", "Ok([1,6,9])") - testEvalToBe("Number.cumprod([1,5,3])", "Ok([1,5,15])") - testEvalToBe("Number.diff([1,5,3])", "Ok([4,-2])") - testEvalToBe( - "Dist.logScore({estimate: normal(5,2), answer: normal(5.2,1), prior: normal(5.5,3)})", - "Ok(-0.33591375663884876)", - ) - testEvalToBe( - "Dist.logScore({estimate: normal(5,2), answer: normal(5.2,1)})", - "Ok(0.32244107041564646)", - ) - testEvalToBe("Dist.logScore({estimate: normal(5,2), answer: 4.5})", "Ok(1.6433360626394853)") - testEvalToBe("Dist.klDivergence(normal(5,2), normal(5,1.5))", "Ok(0.06874342818671068)") + testAll( + "tests of type", + E.A.to_list( + FunctionRegistry_Core.Registry.allExamplesWithFns(registry)->E.A2.filter(((fn, _)) => + E.O.isSome(fn.output) + ), + ), + ((fn, example)) => { + let responseType = + example + ->Reducer.evaluate + ->E.R2.fmap(ReducerInterface_InternalExpressionValue.externalValueToValueType) + let expectedOutputType = fn.output |> E.O.toExn("") + expect(responseType)->toEqual(Ok(expectedOutputType)) + }, + ) + }) }) diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res index 9d1c6669..25eb87b7 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res @@ -350,9 +350,6 @@ module FnDefinition = { } } - let toFfiFn = (t: t): Reducer_Expression_T.optionFfiFn => - (args, environment) => run(t, args, environment)->E.R.toOption - let make = (~name, ~inputs, ~run, ()): t => { name: name, inputs: inputs, @@ -414,7 +411,7 @@ module Registry = { let allExamplesWithFns = (r: registry) => r.functions->E.A2.fmap(fn => fn.examples->E.A2.fmap(example => (fn, example)))->E.A.concatMany - let buildFnNameDict = (r: array): fnNameDict => { + let _buildFnNameDict = (r: array): fnNameDict => { let allDefinitionsWithFns = r ->E.A2.fmap(fn => fn.definitions->E.A2.fmap(definitions => (fn, definitions))) @@ -441,7 +438,7 @@ module Registry = { } let make = (fns: array): registry => { - let dict = buildFnNameDict(fns) + let dict = _buildFnNameDict(fns) {functions: fns, fnNameDict: dict} }