自己写一个scheme测试工具

端午在家休息了好几天,基本上就是带孩子和睡觉了。荒废了好几天之后,今天重操旧业。
The Little Scheme看到第99页了。要写一个函数numbered?来判断一个表达式是否是数字表达式。
上代码:
(define atom?
(lambda (a)
(not (or (null? a) (pair? a)))))
(define operator?
(lambda (op)
(or (eq? (quote +) op) (eq? (quote -) op) (eq? (quote *) op) (eq? (quote /) op))))
(define numbered?
(lambda (lat)
(cond
((atom? lat) (number? lat))
((null? lat) #f)
((null? (cdr lat)) #f)
((null? (cdr (cdr lat))) #f)
(else (and (numbered? (car lat)) (operator? (car (cdr lat))) (numbered? (car (cdr (cdr lat)))))))))

然后我自己写了一系列的测试用例来测试上面的函数。但是,慢慢的觉得这样太麻烦了。开始萌生自己写个测试工具的想法:我提供测试用例,工具来把参数传给被测试的函数,再把得到结果与预期结果相比较。这有点像JUnit中的AssertEqual。

时间不长写出来了,名字就叫testN吧。
上代码:
(define testN
(lambda (func test-cases)
(cond
((null? test-cases) '())
(else (map (lambda (it)
(eq? (apply func (list (car it))) (car (cdr it)))) test-cases)))))

那来测一下之前写的函数numbered?
(testN numbered? '(
(1 #t)
('a #f)
(() #f)
((1) #f)
((1 2) #f)
((1 'a) #f)
((1 + 2) #t)
((1 + (1 + 2)) #t)
((1 + (1 2)) #f)
(((1 + 2) + (1 + 9)) #t)
(((1 2) + (1 + 2)) #f)
))

结果是:
'(#t #t #t #t #t #t #t #t #t #t #t)

哈哈,通过了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值