* 实现方案
函数定义及测试函数文件内容格式
- (defun foobar (para1 para2)
- "函数说明"
- "返回值"
- "示例"
- ;; 函数 实现代码
- )
- (fun:test foobar
- '(
- ((x1 x2) . res1)) ;; 测试用例1
- ((y1 y2) . res2)) ;; 测试用例2
- ((z1 z2) . res3)) ;; 测试用例3
- ))
* 实现核心代码
- ;; 测试通过为 t ,失败为 nil
- (defun fun:test (fun usecases)
- "函数测试,fun:函数名,usecases:测试用例,测试用例为参数和返回值组成的点对表。"
- "lst,对应测试用例的测试结果,t为通过,nil为失败"
- "(fun:test point:mid '((((0 0)(2 2)) . (1 1))(((3 3)(5 5)) . (4 4))))"
- (mapcar
- '(lambda (x)
- (list:equal (apply (function fun) (car x))
- (cdr x)
- 1e-6)
- )
- usecases))
上述代码如参数不致会导致错误退出。可改用vl catch 进行错误处理,保证测试用例全部执行。
* 使用说明
用法:(fun:test 函数名 用例列表)
示例:
- (fun:test
- point:mid
- '((((0 0)(2 2)) . (1 1))
- (((3 3)(5 5)) . (4 4))))
- ;; 上例为测试求两点的中点:
- (point:mid '(0 0) '(2 2)) ;执行结果 (1 1)
- (point:mid '(3 3) '(5 5)) ;执行结果 (4 4)
* 自动测试
创建 test 文件夹,文件夹下以函数名为文件名,文件内容为 *测试用例*
用这样的文件结构为源数据,生成测试代码并执行。
如上例:在test文件夹下创建 point:mid 文件。
其内容:(一行为一个测试用例)
- (((0 0)(2 2)) . (1 1))
- (((3 3)(5 5)) . (4 4))
讨论可至: https://gitee.com/atlisp/atlisp-lib/issues/I593AT
|