首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏内部的RackUnit源位置

宏内部的RackUnit源位置
EN

Stack Overflow用户
提问于 2015-08-26 18:10:58
回答 1查看 77关注 0票数 7

我正在构建一组rackunit测试,其中实际的test-casecheck-equal?函数是在宏中定义的。代码如下所示:

代码语言:javascript
复制
#lang racket

(require rackunit
         rackunit/text-ui)

(define-syntax (my-test=? stx)
  (syntax-case stx ()
    [(_ case1 case2)
     (syntax/loc stx
       (test-case "tests"
         (check-equal? case1 case2)))]))

(define tests
  (test-suite "tests"
    (my-test=? 'a 'b)))

(run-tests tests)

但是,当我运行这段代码时,我得到了以下输出:

代码语言:javascript
复制
--------------------
tests > tests
tests
FAILURE
name:       check-equal?
location:   unsaved-editor:11:9
actual:     'a
expected:   'b
. Check failure
--------------------
0 success(es) 1 failure(s) 0 error(s) 1 test(s) run

其中第11行是宏内的check-equal?函数行:(check-equal? case1 case2)))]))

有什么方法可以在使用my-test=?的行上显示错误:(my-test=? 'a 'b)))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-26 19:33:09

您可以将语法位置直接放在check-equal?表达式上,以获得所需的行为。下面是一个例子:

代码语言:javascript
复制
(define-syntax (my-test=? stx)
  (syntax-case stx ()
    [(_ case1 case2)
     (quasisyntax
       (test-case "tests"
         #,(syntax/loc stx (check-equal? case1 case2))))]))

通常,将语法位置放在外部表达式上并不会自动传播。

通过此更改,我将位置报告为"15:4“(相对于"11:9"),而”11:9“是(my-test=? 'a 'b)表达式出现的地方。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32233757

复制
相关文章

相似问题

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