From 2af0d8ed55f52bf81708555e4844e9443205a1fe Mon Sep 17 00:00:00 2001 From: Bogdan Popa Date: Sat, 21 Nov 2020 15:25:04 +0200 Subject: [PATCH] match: add test for _ elimination in vector patterns --- pkgs/racket-test/tests/match/examples.rkt | 34 +++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-test/tests/match/examples.rkt b/pkgs/racket-test/tests/match/examples.rkt index da96a74ae4..e4f3bb69b3 100644 --- a/pkgs/racket-test/tests/match/examples.rkt +++ b/pkgs/racket-test/tests/match/examples.rkt @@ -345,13 +345,15 @@ (comp 'ok (let () + (define impersonated? #f) (define-struct st ([x #:mutable]) #:transparent) (define a (st 1)) - (define b (impersonate-struct a st-x (lambda (_self _x) - (error "must not impersonate")))) + (define b (impersonate-struct a st-x (lambda (_self x) + (set! impersonated? #t) + x))) (match b - [(st _) 'ok]))) + [(st _) (if impersonated? 'fail 'ok)]))) (comp 'ok @@ -366,6 +368,32 @@ (match b [(st x) (if impersonated? 'ok 'fail)]))) + (comp + 'ok + (let () + (define impersonated? #f) + (define v (vector 1 2 3)) + (define b (impersonate-vector v + (lambda (self idx _) + (set! impersonated? #t) + (vector-ref self idx)) + vector-set!)) + (match b + [(vector _ _ _) (if impersonated? 'fail 'ok)]))) + + (comp + 'ok + (let () + (define impersonated? #f) + (define v (vector 1 2 3)) + (define b (impersonate-vector v + (lambda (self idx _) + (set! impersonated? #t) + (vector-ref self idx)) + vector-set!)) + (match b + [(vector a _ _) (if impersonated? 'ok 'fail)]))) + (comp 1 (match #&1 [(box a) a]