If TR lived up exactly to the R level of semantics, to wit: > Welcome to DrRacket, version 5.3.4.10--2013-05-29(05524114/d) [3m]. > Language: racket. > > (struct s ()) > > (require rackunit) > > (check-equal? (s) (s)) > -------------------- > FAILURE > actual: #<s> > expected: #<s> > name: check-equal? > location: (unsaved-editor324 5 2 126 22) > expression: (check-equal? (s) (s)) > > . . Check failure > --------------------
would you really write a different message to dev? Opaque structures pose a problem for testing and that problem exists at both levels. -- Matthias On May 29, 2013, at 8:02 AM, Robby Findler <ro...@eecs.northwestern.edu> wrote: > Well, given that replacing check-equal? with equal? (on the typed side) > works, then it seems to me that one solution would be to move more of > rackunit into TR, or to refactor rackunit to be more friendly to TR. (And if > someone is going to work on this, then it would also be great if the error > messages from failed test cases were made a bit more legible.) > > Robby > > > On Wed, May 29, 2013 at 6:53 AM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> > wrote: > That is indeed the correct fix. I'm not entirely sure how to improve > the error message, since the problem in your original code is real. > There's no way the generated contract can tell at runtime that the > values passed to `check-equal?` aren't higher-order, so it has to > conservatively reject the call. Suggestions are certainly welcome. > > Sam > > On Wed, May 29, 2013 at 7:46 AM, Robby Findler > <ro...@eecs.northwestern.edu> wrote: > > I'm not sure if this should be considered a bug or a feature request (or > > something else, but hopefully one of those two!) so I thought I'd ask here > > before sending in a PR. This program: > > > > #lang typed/racket > > (require typed/rackunit) > > (struct: s ([a : Integer])) > > (check-equal? (s 1) (s 2)) > > > > produces the output: > > > > check-equal?: broke its contract > > Attempted to use a higher-order value passed as `Any` in untyped code: > > #<s> > > in: the 1st argument of > > (recursive-contract > > (->* (Any Any) (String) any/c) > > #:impersonator) > > contract from: (interface for check-equal?) > > blaming: (interface for check-equal?) > > at: <collects>/typed/rackunit/main.rkt:20.2 > > > > which is a bit confusing. (As someone who's been around Racket long enough, > > I guessed that sticking #:transparent into the struct declaration would be a > > thing to try, but newcomers seem unlikely to find that workaround.) > > > > Robby > > > > > > _________________________ > > Racket Developers list: > > http://lists.racket-lang.org/dev > > > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev