From cc487a4d9abd333f704b83fae93e9c377b73f559 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 15 May 2019 10:41:43 -0600 Subject: [PATCH] cs: fix incorrect impersonator discard in `chaperone-of?` --- pkgs/racket-test-core/tests/racket/chaperone.rktl | 9 +++++++++ racket/src/cs/rumble/equal.ss | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/chaperone.rktl b/pkgs/racket-test-core/tests/racket/chaperone.rktl index 124967bd76..46ca4821d5 100644 --- a/pkgs/racket-test-core/tests/racket/chaperone.rktl +++ b/pkgs/racket-test-core/tests/racket/chaperone.rktl @@ -196,6 +196,15 @@ (test (void) vector-set! b2 1 'fine) (test 'fine vector-ref b 1))) +;; impersonator-of does not imply chaperone-of +(let () + (define vec1 (vector 1 2 3)) + (define vec2 (impersonate-vector vec1 (lambda (v i x) x) (lambda (v i x) x))) + (test #t impersonator-of? vec2 vec1) + (test #f chaperone-of? vec2 vec1) + (test #f impersonator-of? vec1 vec2) + (test #f chaperone-of? vec1 vec2)) + ;; test chaperone-of checks in a chaperone: (let ([b (vector 0)]) (let ([b2 (chaperone-vector b diff --git a/racket/src/cs/rumble/equal.ss b/racket/src/cs/rumble/equal.ss index f1d11b068a..46c3905901 100644 --- a/racket/src/cs/rumble/equal.ss +++ b/racket/src/cs/rumble/equal.ss @@ -42,8 +42,7 @@ (let ([ctx (deeper-context ctx)]) (equal? a2 b ctx)))] [else #f]))] - [(and (eq? mode 'chaperone-of?) - (chaperone? b)) + [(eq? mode 'chaperone-of?) ;; `a` does not include `b`, so give up #f] [else