Added tests for "default" generic method implementations to work like #:methods.
Specifically, it should be possible for a "default" implementation to have unsupported methods, and to use define/generic.
This commit is contained in:
parent
6e01d1d9a3
commit
d3d67c5978
|
@ -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")))))
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user