open Jest open Reducer_TestHelpers describe("Parse for Bindings", () => { testParseOuterToBe( "x", "Ok((:$$bindExpression (:$$bindings) :x))", ) testParseOuterToBe( "x+1", "Ok((:$$bindExpression (:$$bindings) (:add :x 1)))", ) testParseOuterToBe( "y = x+1; y", "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) :y))", ) }) describe("Parse for Bindings", () => { testParsePartialToBe( "x", "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) :x) (:$exportVariablesExpression)))", ) testParsePartialToBe( "y=x", "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y :x)) (:$exportVariablesExpression)))", ) testParsePartialToBe( "y=x+1", "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$exportVariablesExpression)))", ) testParsePartialToBe( "y = x+1; z = y", "Ok((:$$bindExpression (:$$bindStatement (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$let :z :y)) (:$exportVariablesExpression)))", ) }) describe("Eval with Bindings", () => { testEvalBindingsToBe( "x", list{("x", ExpressionValue.EvNumber(1.))}, "Ok(1)", ) testEvalBindingsToBe( "x+1", list{("x", ExpressionValue.EvNumber(1.))}, "Ok(2)", ) testEvalBindingsToBe( "y = x+1; y", list{("x", ExpressionValue.EvNumber(1.))}, "Ok(2)", ) }) /* Partial code is a partial code fragment that is cut out from a larger code. Therefore it does not end with an expression. */ Only.describe("Eval Partial", () => { testEvalPartialBindingsToBe( // A partial cannot end with an expression "x", list{("x", ExpressionValue.EvNumber(1.))}, "Error(Assignment expected)", ) testEvalPartialBindingsToBe( "y=x", list{("x", ExpressionValue.EvNumber(1.))}, "Ok({x: 1, y: 1})", ) testEvalPartialBindingsToBe( "y=x+1", list{("x", ExpressionValue.EvNumber(1.))}, "Ok({x: 1, y: 2})", ) MyOnly.testEvalPartialBindingsToBe( "y = x+1; z = y", list{("x", ExpressionValue.EvNumber(1.))}, "Ok({x: 1, y: 2, z: 2})", ) })