如何在我的阶乘函数中对堆栈溢出进行单元测试?

时间:2016-09-27 01:31:55

标签: scheme racket factorial

我在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")

在很多帮助下,我能够得到负面的工作条件。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

-1为否定时,您的函数会返回number。所以测试不应该是:

(check-equal? (recursive_factorial -4) -1)

更新

怎么样:

 #lang racket
 (provide recursive_factorial)
 (define (recursive_factorial number)
  (cond [(= 0 number)       1]
        [(negative? number) (error 'recursive_factorial
                                   "Cannot pass a negative number")]
        [else               (*  number (recursive_factorial (- number 1)))]))