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

Reply via email to