From 11f12d69bd898e20b46ce19f959cc7b699ba6bfd Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 16 Jan 2019 20:50:41 -0700 Subject: [PATCH] cs: fix hashing on vector cycles --- .../tests/racket/testing.rktl | 30 +++++++++++-------- racket/src/cs/rumble/hash-code.ss | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/testing.rktl b/pkgs/racket-test-core/tests/racket/testing.rktl index 6bc7ffd9b5..6e88f152cf 100644 --- a/pkgs/racket-test-core/tests/racket/testing.rktl +++ b/pkgs/racket-test-core/tests/racket/testing.rktl @@ -356,15 +356,21 @@ transcript. (define non-z void) (define (find-depth go) - ; Find depth that triggers a stack overflow (assuming no other - ; threads are running and overflowing) - (let ([v0 (make-vector 6)] - [v1 (make-vector 6)]) - (let find-loop ([d 100]) - (vector-set-performance-stats! v0) - (go d) - (vector-set-performance-stats! v1) - (if (> (vector-ref v1 5) - (vector-ref v0 5)) - d - (find-loop (* 2 d)))))) + (cond + [(eq? 'racket (system-type 'vm)) + ; Find depth that triggers a stack overflow (assuming no other + ; threads are running and overflowing) + (let ([v0 (make-vector 6)] + [v1 (make-vector 6)]) + (let find-loop ([d 100]) + (vector-set-performance-stats! v0) + (go d) + (vector-set-performance-stats! v1) + (if (> (vector-ref v1 5) + (vector-ref v0 5)) + d + (find-loop (* 2 d)))))] + [else + ;; No way to detect stack overflow, and it's less interesting anyway, + ;; but make up a number for testing purposes + 1000])) diff --git a/racket/src/cs/rumble/hash-code.ss b/racket/src/cs/rumble/hash-code.ss index d91aeef20f..6e9a8fa09e 100644 --- a/racket/src/cs/rumble/hash-code.ss +++ b/racket/src/cs/rumble/hash-code.ss @@ -122,7 +122,7 @@ (cond [(fx= i len) (values hc burn)] [else - (let-values ([(hc0 burn) (equal-hash-loop (vector-ref x i) burn 0)]) + (let-values ([(hc0 burn) (equal-hash-loop (vector-ref x i) (fx+ burn 2) 0)]) (vec-loop (fx+ i 1) burn (+/fx (mix2 hc) hc0)))]))]))]