diff --git a/pkgs/racket-pkgs/racket-test/tests/generic/errors.rkt b/pkgs/racket-pkgs/racket-test/tests/generic/errors.rkt index d82faf7baa..ce0eab2a3b 100644 --- a/pkgs/racket-pkgs/racket-test/tests/generic/errors.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/generic/errors.rkt @@ -1,6 +1,6 @@ #lang racket/base -(require racket/generic unstable/macro-testing) +(require racket/generic racket/engine unstable/macro-testing) (module+ test (require rackunit) @@ -40,4 +40,16 @@ #:methods gen:foobar [(define foo 0)]) 'ignore)))) + (check-exn #rx"foo: not implemented for 5" + (lambda () (let () + (define-generics foobar + [foo foobar x] + #:defaults ([number?])) + ;; a failing implementation may loop forever, + ;; due to self-reference to the generic method foo, + ;; so using an engine here to limit the time. + (define e (engine (lambda (suspend?) (foo 5 6)))) + ;; 1000 ms should be far more than enough. + (or (engine-run 1000 e) + (error "computation did not terminate"))))) ) diff --git a/pkgs/racket-pkgs/racket-test/tests/generic/syntax-errors.rkt b/pkgs/racket-pkgs/racket-test/tests/generic/syntax-errors.rkt index 39584b86af..4728968d16 100644 --- a/pkgs/racket-pkgs/racket-test/tests/generic/syntax-errors.rkt +++ b/pkgs/racket-pkgs/racket-test/tests/generic/syntax-errors.rkt @@ -72,7 +72,20 @@ (define stream-first car) (define stream-rest cdr) (define stream-empty? null?)]) - #:defined-table stream-table)) + #:defined-table stream-table) + + (define-generics stream + (stream-first stream) + (stream-rest stream) + (stream-empty? stream) + #:defaults + ([box? + (define/generic first stream-first) + (define/generic rest stream-rest) + (define/generic empty? stream-empty?) + (define stream-first (compose first unbox)) + (define stream-rest (compose rest unbox)) + (define stream-empty? (compose empty? unbox))]))) (check-bad-syntax