summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/hash.c2
-rw-r--r--test-suite/tests/hash.test15
2 files changed, 14 insertions, 3 deletions
diff --git a/libguile/hash.c b/libguile/hash.c
index c0a6109b4..342931051 100644
--- a/libguile/hash.c
+++ b/libguile/hash.c
@@ -245,7 +245,7 @@ scm_hasher(SCM obj, unsigned long n, size_t d)
{
i = len;
h = n - 1;
- d2 = (d - 1) / len;
+ d2 = len > 0 ? (d - 1) / len : 0;
}
while (i--)
diff --git a/test-suite/tests/hash.test b/test-suite/tests/hash.test
index ad247f50a..64d10bb38 100644
--- a/test-suite/tests/hash.test
+++ b/test-suite/tests/hash.test
@@ -1,6 +1,7 @@
;;;; hash.test --- test guile hashing -*- scheme -*-
;;;;
-;;;; Copyright (C) 2004, 2005, 2006, 2008, 2011, 2012 Free Software Foundation, Inc.
+;;;; Copyright (C) 2004, 2005, 2006, 2008, 2011, 2012,
+;;;; 2014 Free Software Foundation, Inc.
;;;;
;;;; This library is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU Lesser General Public
@@ -36,7 +37,17 @@
(pass-if (= 0 (hash noop 1)))
(pass-if (= 0 (hash +inf.0 1)))
(pass-if (= 0 (hash -inf.0 1)))
- (pass-if (= 0 (hash +nan.0 1))))
+ (pass-if (= 0 (hash +nan.0 1)))
+ (pass-if (= 0 (hash '#() 1)))
+
+ (pass-if "cyclic vectors"
+ (let ()
+ (define (cyclic-vector n)
+ (let ((v (make-vector n)))
+ (vector-fill! v v)
+ v))
+ (and (= 0 (hash (cyclic-vector 3) 1))
+ (= 0 (hash (cyclic-vector 10) 1))))))
;;;
;;; hashv