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
82 lines
2.3 KiB
Plaintext
82 lines
2.3 KiB
Plaintext
open Jest
|
|
open Expect
|
|
|
|
module Macro = Reducer_Expression_Macro
|
|
module Bindings = Reducer_Expression_Bindings
|
|
module Expression = Reducer_Expression
|
|
module ExpressionValue = ReducerInterface_ExpressionValue
|
|
module T = Reducer_Expression_T
|
|
|
|
let testMacro_ = (
|
|
tester,
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedCode: string,
|
|
) => {
|
|
let bindings = Belt.Map.String.fromArray(bindArray)
|
|
tester(expr->T.toString, () =>
|
|
expr
|
|
->Macro.expandMacroCall(
|
|
bindings,
|
|
ExpressionValue.defaultEnvironment,
|
|
Expression.reduceExpression,
|
|
)
|
|
->T.toStringResult
|
|
->expect
|
|
->toEqual(expectedCode)
|
|
)
|
|
}
|
|
|
|
let testMacroEval_ = (
|
|
tester,
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedValue: string,
|
|
) => {
|
|
let bindings = Belt.Map.String.fromArray(bindArray)
|
|
tester(expr->T.toString, () =>
|
|
expr
|
|
->Macro.doMacroCall(bindings, ExpressionValue.defaultEnvironment, Expression.reduceExpression)
|
|
->ExpressionValue.toStringResult
|
|
->expect
|
|
->toEqual(expectedValue)
|
|
)
|
|
}
|
|
|
|
let testMacro = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedExpr: string,
|
|
) => testMacro_(test, bindArray, expr, expectedExpr)
|
|
let testMacroEval = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedValue: string,
|
|
) => testMacroEval_(test, bindArray, expr, expectedValue)
|
|
|
|
module MySkip = {
|
|
let testMacro = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedExpr: string,
|
|
) => testMacro_(Skip.test, bindArray, expr, expectedExpr)
|
|
let testMacroEval = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedValue: string,
|
|
) => testMacroEval_(Skip.test, bindArray, expr, expectedValue)
|
|
}
|
|
|
|
module MyOnly = {
|
|
let testMacro = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedExpr: string,
|
|
) => testMacro_(Only.test, bindArray, expr, expectedExpr)
|
|
let testMacroEval = (
|
|
bindArray: array<(string, ExpressionValue.expressionValue)>,
|
|
expr: T.expression,
|
|
expectedValue: string,
|
|
) => testMacroEval_(Only.test, bindArray, expr, expectedValue)
|
|
}
|