mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 03:30:27 +02:00
fix bit-set*! bug (!)
* libguile/bitvectors.c (scm_bit_set_star_x): Fix a long-standing (since 2005) bug in which instead of using the kv bitvector, we actually use the `v' bitvector. Also, change to allow `kv' being shorter than `v'. * test-suite/tests/bitvectors.test ("bit-set*!"): Add tests.
This commit is contained in:
parent
fb135e12a4
commit
39c5363b4f
2 changed files with 22 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1997,1998,2000,2001,2002,2003,2004, 2005, 2006, 2009, 2010, 2011 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 License
|
||||
|
@ -568,7 +568,7 @@ SCM_DEFINE (scm_bit_set_star_x, "bit-set*!", 3, 0, 0,
|
|||
"\n"
|
||||
"If @var{kv} is a bit vector, then those entries where it has\n"
|
||||
"@code{#t} are the ones in @var{v} which are set to @var{obj}.\n"
|
||||
"@var{kv} and @var{v} must be the same length. When @var{obj}\n"
|
||||
"@var{v} must be at least as long as @var{kv}. When @var{obj}\n"
|
||||
"is @code{#t} it's like @var{kv} is OR'ed into @var{v}. Or when\n"
|
||||
"@var{obj} is @code{#f} it can be seen as an ANDNOT.\n"
|
||||
"\n"
|
||||
|
@ -611,10 +611,10 @@ SCM_DEFINE (scm_bit_set_star_x, "bit-set*!", 3, 0, 0,
|
|||
ssize_t kv_inc;
|
||||
const scm_t_uint32 *kv_bits;
|
||||
|
||||
kv_bits = scm_bitvector_elements (v, &kv_handle,
|
||||
kv_bits = scm_bitvector_elements (kv, &kv_handle,
|
||||
&kv_off, &kv_len, &kv_inc);
|
||||
|
||||
if (v_len != kv_len)
|
||||
if (v_len < kv_len)
|
||||
scm_misc_error (NULL,
|
||||
"bit vectors must have equal length",
|
||||
SCM_EOL);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;;; bitvectors.test --- tests guile's bitvectors -*- scheme -*-
|
||||
;;;;
|
||||
;;;; Copyright 2010 Free Software Foundation, Inc.
|
||||
;;;; Copyright 2010, 2011 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
|
||||
|
@ -55,5 +55,20 @@
|
|||
(uniform-vector-set! bv 0 #t)
|
||||
(pass-if (eqv? (uniform-vector-ref bv 0) #t)))))
|
||||
|
||||
|
||||
|
||||
(with-test-prefix "bit-set*!"
|
||||
(pass-if "#t"
|
||||
(let ((v (bitvector #t #t #f #f)))
|
||||
(bit-set*! v #*1010 #t)
|
||||
(equal? v #*1110)))
|
||||
(pass-if "#f"
|
||||
(let ((v (bitvector #t #t #f #f)))
|
||||
(bit-set*! v #*1010 #f)
|
||||
(equal? v #*0100)))
|
||||
(pass-if "#t, shorter"
|
||||
(let ((v (bitvector #t #t #f #f)))
|
||||
(bit-set*! v #*101 #t)
|
||||
(equal? v #*1110)))
|
||||
(pass-if "#f, shorter"
|
||||
(let ((v (bitvector #t #t #f #f)))
|
||||
(bit-set*! v #*101 #f)
|
||||
(equal? v #*0100))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue