{type:"func", params:[{name:"funcTestDict"}], body:{type:"block", exprs:[{type:"def", name:"expectedOutput", val:{type:"trapCall", target:{type:"var", name:"trap"}, args:[{type:"var", name:"funcTestDict"}, {type:"literal", val:"output"}]}}, {type:"def", name:"evaluatedExpectedOutput", val:{type:"call", target:{type:"var", name:"eval"}, args:[{type:"var", name:"expectedOutput"}]}}, {type:"def", name:"funcName", val:{type:"trapCall", target:{type:"var", name:"trap"}, args:[{type:"var", name:"funcTestDict"}, {type:"literal", val:"funcName"}]}}, {type:"def", name:"args", val:{type:"trapCall", target:{type:"var", name:"trap"}, args:[{type:"var", name:"funcTestDict"}, {type:"literal", val:"args"}]}}, {type:"if", cond:{type:"dotCall", target:{type:"var", name:"has"}, args:[{type:"var", name:"funcTestDict"}, {type:"literal", val:"maxRuntime"}]}, ifExpr:{type:"block", exprs:[{type:"throw", expr:{type:"literal", val:"Unimplemented"}}]}, elseExpr:{type:"block", exprs:[{type:"try", tryExpr:{type:"block", exprs:[{type:"def", name:"output", val:{type:"call", target:{type:"var", name:"call"}, args:[{type:"var", name:"funcName"}, {type:"var", name:"args"}]}}, {type:"def", name:"outputMatches", val:{type:"dotCall", target:{type:"var", name:"equals"}, args:[{type:"var", name:"output"}, {type:"var", name:"evaluatedExpectedOutput"}]}}, {type:"def", name:"info", val:{type:"if", cond:{type:"var", name:"outputMatches"}, ifExpr:{type:"block", exprs:[{type:"literal", val:null}]}, elseExpr:{type:"block", exprs:[{type:"literal", val:"Output does not match"}]}}}, {type:"call", target:{type:"var", name:"funcTestInfo"}, args:[{type:"var", name:"funcTestDict"}, {type:"var", name:"outputMatches"}, {type:"var", name:"info"}, {type:"literal", val:null}]}]}, errVarName:"ex", catchExpr:{type:"block", exprs:[{type:"call", target:{type:"var", name:"funcTestInfo"}, args:[{type:"var", name:"funcTestDict"}, {type:"literal", val:false}, {type:"literal", val:"Exception"}, {type:"var", name:"ex"}]}]}}]}}]}}