Как мне написать контрольный пример для этого кода? - PullRequest
0 голосов
/ 20 апреля 2019

Я только начал изучать деревья и кучи, и я не уверен, как писать тестовый пример.Эти коды взяты из слайдов моего урока.Хотя они дают коды, они, к сожалению, не предоставляют тестовые случаи указанных кодов, поэтому я не понимаю, как бы я их назвал.

Я пробовал тестовые случаи, такие как любые обычные целые числа, такие как 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)))

1 Ответ

1 голос
/ 29 апреля 2019

Ваши тестовые примеры должны точно объяснить, что вы хотите сделать.

Это способ объяснить, используя код, предполагаемое использование написанных вами функций.

В вашем конкретном случае я, очевидно, не могу вам помочь, потому что это именно то, чего не хватает в вашем коде: значение, которое оно должно иметь.

Но я все еще могу объяснить, как писать модульные тесты в 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
...