squiggle/packages/squiggle-lang/__tests__/Reducer/Reducer_externalBindings_test.res

84 lines
2.1 KiB
Plaintext
Raw Normal View History

2022-04-17 17:24:39 +00:00
open Jest
open Reducer_TestHelpers
2022-04-21 17:28:29 +00:00
describe("Parse for Bindings", () => {
2022-04-17 18:32:47 +00:00
testParseOuterToBe(
"x",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindings) :x))",
2022-04-17 18:32:47 +00:00
)
testParseOuterToBe(
"x+1",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindings) (:add :x 1)))",
2022-04-17 18:32:47 +00:00
)
testParseOuterToBe(
"y = x+1; y",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) :y))",
2022-04-17 18:32:47 +00:00
)
2022-04-21 20:56:06 +00:00
})
describe("Parse for Bindings", () => {
2022-04-17 18:32:47 +00:00
testParsePartialToBe(
"x",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindStatement (:$$bindings) :x) (:$exportVariablesExpression)))",
2022-04-17 18:32:47 +00:00
)
testParsePartialToBe(
"y=x",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y :x)) (:$exportVariablesExpression)))",
2022-04-17 18:32:47 +00:00
)
testParsePartialToBe(
"y=x+1",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$exportVariablesExpression)))",
2022-04-17 18:32:47 +00:00
)
testParsePartialToBe(
"y = x+1; z = y",
2022-04-21 17:05:03 +00:00
"Ok((:$$bindExpression (:$$bindStatement (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$let :z :y)) (:$exportVariablesExpression)))",
2022-04-17 18:32:47 +00:00
)
})
2022-04-17 17:24:39 +00:00
2022-04-21 17:48:07 +00:00
describe("Eval with Bindings", () => {
2022-04-17 18:32:47 +00:00
testEvalBindingsToBe(
"x",
2022-04-17 17:24:39 +00:00
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 17:28:29 +00:00
"Ok(1)",
2022-04-17 18:32:47 +00:00
)
testEvalBindingsToBe(
2022-04-17 17:24:39 +00:00
"x+1",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 17:28:29 +00:00
"Ok(2)",
2022-04-17 18:32:47 +00:00
)
testEvalBindingsToBe(
"y = x+1; y",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 17:28:29 +00:00
"Ok(2)",
2022-04-17 18:32:47 +00:00
)
2022-04-21 17:28:29 +00:00
})
2022-04-21 20:56:06 +00:00
/*
Partial code is a partial code fragment that is cut out from a larger code.
Therefore it does not end with an expression.
*/
2022-04-21 17:48:07 +00:00
Only.describe("Eval Partial", () => {
2022-04-21 20:56:06 +00:00
testEvalPartialBindingsToBe(
2022-04-21 17:48:07 +00:00
// A partial cannot end with an expression
2022-04-17 18:32:47 +00:00
"x",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 17:48:07 +00:00
"Error(Assignment expected)",
2022-04-17 18:32:47 +00:00
)
testEvalPartialBindingsToBe(
"y=x",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 20:56:06 +00:00
"Ok({x: 1, y: 1})",
2022-04-17 18:32:47 +00:00
)
2022-04-21 20:56:06 +00:00
testEvalPartialBindingsToBe(
2022-04-17 18:32:47 +00:00
"y=x+1",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 20:56:06 +00:00
"Ok({x: 1, y: 2})",
2022-04-17 18:32:47 +00:00
)
2022-04-21 20:56:06 +00:00
MyOnly.testEvalPartialBindingsToBe(
2022-04-17 18:32:47 +00:00
"y = x+1; z = y",
list{("x", ExpressionValue.EvNumber(1.))},
2022-04-21 20:56:06 +00:00
"Ok({x: 1, y: 2, z: 2})",
2022-04-17 18:32:47 +00:00
)
})