From e0fe160f46cffe0d6ac973dfd5dba52f9752c55e Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Fri, 19 May 2017 23:04:06 +0900 Subject: [PATCH] fixing off-by-one error in first-set-bit --- lib/srfi/142/bitwise.scm | 2 +- lib/srfi/142/test.sld | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/srfi/142/bitwise.scm b/lib/srfi/142/bitwise.scm index 09154062..578bf095 100644 --- a/lib/srfi/142/bitwise.scm +++ b/lib/srfi/142/bitwise.scm @@ -36,7 +36,7 @@ (define (first-set-bit i) (if (zero? i) -1 - (integer-length (- i (bit-and i (- i 1)))))) + (- (integer-length (- i (bit-and i (- i 1)))) 1))) (define (mask len) (- (arithmetic-shift 1 len) 1)) diff --git a/lib/srfi/142/test.sld b/lib/srfi/142/test.sld index 9d9e2f29..5e1ef066 100644 --- a/lib/srfi/142/test.sld +++ b/lib/srfi/142/test.sld @@ -132,6 +132,14 @@ (test #b1010111 (bits #t #t #t #f #t #f #t)) (test #b1010111 (bits #t #t #t #f #t #f #t #f #f)) + (test 0 (first-set-bit 1)) + (test 1 (first-set-bit 2)) + (test -1 (first-set-bit 0)) + (test 3 (first-set-bit 40)) + (test 2 (first-set-bit -28)) + (test 99 (first-set-bit (expt 2 99))) + (test 99 (first-set-bit (expt -2 99))) + (test '(#t #f #t #f #t #t #t) (bitwise-fold cons '() #b1010111)) (test 5