8e318a8aa9
removed some extra array references rename Builder to ExpressionBuilder Expression Builder Trash Warning remove parsePartial/Outer, add context to lambda format module Bindings simplify types module Macro reduceValueList do macro call result map bindings stop replacing on macro calls Macro Test doBindStatement bind a statement bindings tested. TODO bind shadowing in lambda block tests defined block tests defined blocks tested macro lambda test defined
49 lines
2.1 KiB
Plaintext
49 lines
2.1 KiB
Plaintext
module ExpressionT = Reducer_Expression_T
|
|
module ExpressionValue = ReducerInterface.ExpressionValue
|
|
module ErrorValue = Reducer_ErrorValue
|
|
|
|
open Jest
|
|
open Expect
|
|
|
|
let unwrapRecord = rValue =>
|
|
rValue->Belt.Result.flatMap(value =>
|
|
switch value {
|
|
| ExpressionValue.EvRecord(aRecord) => Ok(aRecord)
|
|
| _ => ErrorValue.RETodo("TODO: External bindings must be returned")->Error
|
|
}
|
|
)
|
|
|
|
let expectParseToBe = (expr: string, answer: string) =>
|
|
Reducer.parse(expr)->ExpressionT.toStringResult->expect->toBe(answer)
|
|
|
|
let expectEvalToBe = (expr: string, answer: string) =>
|
|
Reducer.evaluate(expr)->ExpressionValue.toStringResult->expect->toBe(answer)
|
|
|
|
let expectEvalBindingsToBe = (expr: string, bindings: Reducer.externalBindings, answer: string) =>
|
|
Reducer.evaluateUsingOptions(expr, ~externalBindings=Some(bindings), ~environment=None)
|
|
->ExpressionValue.toStringResult
|
|
->expect
|
|
->toBe(answer)
|
|
|
|
let testParseToBe = (expr, answer) => test(expr, () => expectParseToBe(expr, answer))
|
|
let testDescriptionParseToBe = (desc, expr, answer) =>
|
|
test(desc, () => expectParseToBe(expr, answer))
|
|
|
|
let testEvalToBe = (expr, answer) => test(expr, () => expectEvalToBe(expr, answer))
|
|
let testDescriptionEvalToBe = (desc, expr, answer) => test(desc, () => expectEvalToBe(expr, answer))
|
|
let testEvalBindingsToBe = (expr, bindingsList, answer) =>
|
|
test(expr, () => expectEvalBindingsToBe(expr, bindingsList->Js.Dict.fromList, answer))
|
|
|
|
module MySkip = {
|
|
let testParseToBe = (expr, answer) => Skip.test(expr, () => expectParseToBe(expr, answer))
|
|
let testEvalToBe = (expr, answer) => Skip.test(expr, () => expectEvalToBe(expr, answer))
|
|
let testEvalBindingsToBe = (expr, bindingsList, answer) =>
|
|
Skip.test(expr, () => expectEvalBindingsToBe(expr, bindingsList->Js.Dict.fromList, answer))
|
|
}
|
|
module MyOnly = {
|
|
let testParseToBe = (expr, answer) => Only.test(expr, () => expectParseToBe(expr, answer))
|
|
let testEvalToBe = (expr, answer) => Only.test(expr, () => expectEvalToBe(expr, answer))
|
|
let testEvalBindingsToBe = (expr, bindingsList, answer) =>
|
|
Only.test(expr, () => expectEvalBindingsToBe(expr, bindingsList->Js.Dict.fromList, answer))
|
|
}
|