我刚刚开始学习树和堆,但不确定如何编写测试用例。这些代码来自我的课程幻灯片。尽管他们提供了代码,但可悲的是他们没有提供上述代码的测试用例,所以我对如何称呼它感到困惑。
我已经尝试过测试用例,例如像5这样的任何常规整数,我也尝试过使用列表进行处理,但是我遇到了错误,而且从我从图中可以看出,堆似乎是不正确的就像树的根是最小值,亚堆一样。
(define (value H)
(car H))
(define (weight H)
(cdr H))
(define (create-heap vw-pair left-child right-child)
(list vw-pair left-child right-child))
(define (h-min heap)
(car heap))
(define (left heap)
(cadr heap))
(define (right heap)
(caddr heap))
(define (insert vw-pair heap)
(cond ((null? heap) (create-heap vw-pair '() '()))
((< (weight vw-pair) (weight (h-min heap)))
(create-heap vw-pair (right heap) (insert (h-min heap) (left heap))))
(else
(create-heap (h-min heap) (right heap) (insert vw-pair (left heap))))))
(define (insert-list-of-pairs vw-pair-list heap)
(if (null? vw-pair-list)
heap
(insert-list-of-pairs (cdr vw-pair-list) (insert (car vw-pair-list) heap))))
(define (remove-min heap)
(define (combine-heaps h1 h2)
(cond ((null? h1) h2)
((null? h2) h1)
((< (cdr (h-min h1)) (cdr (h-min h2)))
(create-heap (h-min h1) h2 (combine-heaps (left h1) (right h1))))
(else
(create-heap (h-min h2)
h1
(combine-heaps (left h2) (right h2))))))
(combine-heaps (left heap) (right heap)))
答案 0 :(得分:1)
您的测试用例应确切说明您想做什么。
它们是使用代码解释所编写函数的预期用途的方式。
对于您的特定情况,我显然无法为您提供帮助,因为这正是您的代码中所缺少的:它的含义。
但是我仍然可以解释如何在Racket中编写单元测试:
;; This is a function you would write.
;; It does something, but it's not completely obvious
;; how to use it.
(define (find type basket)
(let ([obj (assq type basket)])
(and obj
(cadr obj))))
;; By creating a test module, you add code that describes
;; how to use the functions in this file.
(module+ test
(require rackunit)
;; This is some sample data.
;; It's useful to understand what kind of data
;; your functions are expected to process.
(define basket '((bread baguette)
(fruit ananas)
(fruit banana)
(vegetable carrot)
(misc fork&knife)))
;; Here we call the function and show the expected result.
;; It's now clear how to use it.
(check-equal? (find 'fruit basket) 'ananas)
(check-equal? (find 'vegetable basket) 'carrot)
(check-false (find 'fruit '()))
)
您可以使用raco
运行这些测试:
> raco test myfile.rkt
raco test: (submod "myfile.rkt" test)
3 tests passed