首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用单元测试框架的功能,有一个动态输出的球拍?

如何使用单元测试框架的功能,有一个动态输出的球拍?
EN

Stack Overflow用户
提问于 2016-10-18 00:02:17
回答 1查看 34关注 0票数 0

我正在做SICP书上的练习3.5。

Racket中的Monte实现生成以下代码:

代码语言:javascript
复制
(define (monte-carlo trials experiment)
  (define (iter trials-remaining trials-passed)
    (cond ((= trials-remaining 0)
           (/ trials-passed trials))
          ((experiment)
           (iter (- trials-remaining 1) (+ trials-passed 1)))
          (else
           (iter (- trials-remaining 1) trials-passed))))
  (iter trials 0))

(define (random-in-range low high)
  (let ((range (- high low)))
    (+ low (random range))))
; questão propriamente dita
(define (estimate-integral predicate x1 x2 y1 y2 trials)
  (*(* (- x1 x2) (- y1 y2))
    (monte-carlo trials predicate)))

(define (circulo?)
  (>= 1 (+ (square (random-in-range -1 1))
           (square (random-in-range -2 1)))))

(define (estimate-pi)
  (estimate-integral circulo? -1.0 1 -2 1 100000))
; Fiquei brincando com os os parametros do retangulo, desde que o circulo continue dentro dele
(define square
  (lambda (x) (* x x)))

密码是对的但是,我决定插入一些单元测试。

因此,我导入了库rackunit并使用了以下测试:

代码语言:javascript
复制
(require rackunit)

(check-equal? (estimate-pi) 3.00906)

这显然是一个问题,测试总是失败的,因为输出是动态的,因为有一个随机函数。

在这种情况下我该怎么办?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 00:12:33

这里有一个内置的检查,这是首选的解决方案:

代码语言:javascript
复制
(check-= (estimate-pi) 3.1416 1e-4 "Incorrect value for pi")

上一次检查验证结果是否在可接受的容忍值(也称为epsilon)范围内,它相当于:

代码语言:javascript
复制
(check-true (<= (abs (- (estimate-pi) 3.1416)) 1e-4))

1e-4部分是科学表示法中的公差,它意味着如果实际值和期望值之间的差值小于0.0001,那么我们认为结果是正确的。当然,您可以调整公差值以满足您的需要--数量越小,所需的精度就越高。另外,如果check-=不存在,我们可以定义自己的检查,这一点很有用,如下所示:

代码语言:javascript
复制
(define-binary-check (check-in-tolerance actual expected tolerance)
  (<= (abs (- actual expected)) tolerance))

(check-in-tolerance (estimate-pi) 3.1416 1e-4)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40097480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档