From 92d3c761faa5615c0015a3fc3ee1c9ab7718ad1a Mon Sep 17 00:00:00 2001 From: skejeton Date: Thu, 6 Oct 2022 16:49:33 +0300 Subject: [PATCH 1/2] feature: List.length --- ...leLibrary_FunctionRegistryLibrary_test.res | 2 ++ .../squiggle-lang/src/rescript/FR/FR_List.res | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res b/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res index af2c3d7a..3b2ec6db 100644 --- a/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res +++ b/packages/squiggle-lang/__tests__/SquiggleLibrary/SquiggleLibrary_FunctionRegistryLibrary_test.res @@ -10,6 +10,8 @@ let examples = E.A.to_list(FunctionRegistry_Core.Registry.allExamples(registry)) describe("FunctionRegistry Library", () => { describe("Regular tests", () => { + testEvalToBe("List.length([3,5,8])", "Ok(3)") + testEvalToBe("List.length([])", "Ok(0)") testEvalToBe("List.make(3, 'HI')", "Ok(['HI','HI','HI'])") testEvalToBe("make(3, 'HI')", "Error(make is not defined)") testEvalToBe("List.upTo(1,3)", "Ok([1,2,3])") diff --git a/packages/squiggle-lang/src/rescript/FR/FR_List.res b/packages/squiggle-lang/src/rescript/FR/FR_List.res index 21106978..844c5766 100644 --- a/packages/squiggle-lang/src/rescript/FR/FR_List.res +++ b/packages/squiggle-lang/src/rescript/FR/FR_List.res @@ -5,6 +5,10 @@ let nameSpace = "List" let requiresNamespace = true module Internals = { + let length = (v: array): Reducer_T.value => IEvNumber( + Belt.Int.toFloat(Array.length(v)), + ) + let makeFromNumber = (n: float, value: Reducer_T.value): Reducer_T.value => IEvArray( Belt.Array.make(E.Float.toInt(n), value), ) @@ -75,6 +79,26 @@ module Internals = { } let library = [ + Function.make( + ~name="length", + ~nameSpace, + ~output=EvtNumber, + ~requiresNamespace=false, + ~examples=[`List.length([1,4,5])`], + ~definitions=[ + FnDefinition.make( + ~name="length", + ~inputs=[FRTypeArray(FRTypeAny)], + ~run=(inputs, _, _) => + switch inputs { + | [IEvArray(array)] => Internals.length(array)->Ok + | _ => Error(impossibleError) + }, + (), + ), + ], + (), + ), Function.make( ~name="make", ~nameSpace, From 1a131828e65fe787c9d2f98254f5361fd292c2c0 Mon Sep 17 00:00:00 2001 From: skejeton Date: Thu, 6 Oct 2022 21:39:44 +0300 Subject: [PATCH 2/2] fix: List.length requiresNamespace wasn't set to true --- packages/squiggle-lang/src/rescript/FR/FR_List.res | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/squiggle-lang/src/rescript/FR/FR_List.res b/packages/squiggle-lang/src/rescript/FR/FR_List.res index 844c5766..172b1073 100644 --- a/packages/squiggle-lang/src/rescript/FR/FR_List.res +++ b/packages/squiggle-lang/src/rescript/FR/FR_List.res @@ -83,7 +83,7 @@ let library = [ ~name="length", ~nameSpace, ~output=EvtNumber, - ~requiresNamespace=false, + ~requiresNamespace=true, ~examples=[`List.length([1,4,5])`], ~definitions=[ FnDefinition.make(