如何在kdb/Q中实现比较两值并输出通过/失败信息的单元测试函数?
Q语言自定义单元测试函数checkExpect实现方案
核心逻辑
Q语言中运算符本质是一等函数,可直接作为参数传递;同时需要处理实际值为函数的场景,先执行函数得到结果再做比较,最后根据比较结果返回"Pass"或"Fail"。
代码实现
checkExpect:{[expected; op; actual] // 处理实际值:若为函数则执行,否则直接取值 actualRes: $[type[actual]=10h; actual[]; actual]; // 调用比较运算符,返回对应结果 $[op[expected; actualRes]; "Pass"; "Fail"] }
测试示例
- 相等比较通过:
checkExpect[5; =; 2+3]→ 返回"Pass" - 相等比较失败:
checkExpect[1; =; 2+3]→ 返回"Fail" - 实际值为函数的情况:
checkExpect[10; >; {6+3}]→ 返回"Pass"
关键细节说明
type[actual]=10h:Q语言中函数的类型码是10h,用于判断传入的实际值是否为函数,是则执行actual[]获取返回值。op[expected; actualRes]:直接调用传入的比较运算符(如=、>等都是内置函数),传入预期值和实际结果得到布尔判断。$[cond; t; f]:Q语言的条件表达式,类似其他语言的三元运算符,根据布尔结果返回对应字符串。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

