diff --git a/pkgs/racket-test-extra/tests/racket/set-regression.rkt b/pkgs/racket-test-extra/tests/racket/set-regression.rkt new file mode 100644 index 0000000000..e7945d1eb7 --- /dev/null +++ b/pkgs/racket-test-extra/tests/racket/set-regression.rkt @@ -0,0 +1,28 @@ +#lang racket/base + +(require racket/generic racket/set racket/stream rackunit) + +(define-syntax-rule (delegate method params input wrap-output) + (begin + (define/generic generic-method method) + (define (method . params) (wrap-output (generic-method . input))))) + +(struct mask (s) + #:methods gen:set + [(delegate set-empty? [m] [(mask-s m)] values) + (delegate set-member? [m v] [(mask-s m) v] values) + (delegate set-add [m v] [(mask-s m) v] mask) + (delegate set-remove [m v] [(mask-s m) v] mask) + (delegate set-first [m] [(mask-s m)] values) + (delegate set-rest [m] [(mask-s m)] mask)]) + +;; --- + +(check set=? + (list 3 5 8) + (stream->list (set->stream (mask (set 3 5 8))))) + +(check set=? + (list 2 4 8) + (set->list (mask (set 2 4 8)))) + diff --git a/racket/collects/racket/private/set.rkt b/racket/collects/racket/private/set.rkt index 7b291fd77d..09a2d678d3 100644 --- a/racket/collects/racket/private/set.rkt +++ b/racket/collects/racket/private/set.rkt @@ -125,13 +125,13 @@ [(set-implements? s 'set-empty? 'set-first 'set-rest) (let loop ([s s]) (cond - [(stream-empty? s) empty-stream] + [(set-empty? s) empty-stream] [else (stream-cons (set-first s) (loop (set-rest s)))]))] [(set-implements? s 'set-empty? 'set-first 'set-remove) (let loop ([s s]) (cond - [(stream-empty? s) empty-stream] + [(set-empty? s) empty-stream] [else (stream-cons (set-first s) (loop (set-remove s (set-first s))))]))] [(set-implements? s 'set-count 'set-first 'set-rest)