我在Racket中製作了一個階乘函數,它需要進行單元測試以傳遞一個非常大的數字,以捕獲溢出異常。如果發現異常,測試應該通過,反之亦然。這是我的代碼。如何在我的階乘函數中對堆棧溢出進行單元測試?
#lang racket
(provide recursive_factorial)
(provide tail_factorial)
(define (recursive_factorial number)
(cond [(= 0 number) 1]
[(negative? number) (raise-argument-error 'recursive_factorial "negative?" number)]
[(* number (recursive_factorial (- number 1)))]))
(define (tail_factorial number accumulator)
(cond[(= number 0) accumulator]
[(negative? number) accumulator (raise-argument-error 'tail_factorial "negative?" number accumulator)]
[(tail_factorial (- number 1) (* accumulator number))]
))
這裏是我試圖單元測試它。
(check-not-exn (λ() (recursive_factorial(100000000)))"stack overflow")
(check-not-exn (λ() (tail_factorial(100000000)))"stack overflow")
有了很大的幫助,我是能夠得到一個負的狀態下。任何幫助表示讚賞。
球拍沒有堆棧溢出(見http://docs.racket-lang.org/ 。導向/ Lists__Iteration__and_Recursion.html#%28part ._ Recursion_versus_.Iteration%29);直到您耗盡Racket的所有可用內存(然後Racket VM可能剛剛退出),您將不會收到錯誤。 –
@RyanCulpepper所以有沒有辦法單元測試呢? – user6800688