math.bitwise: Fix bit-range and test it.
parent
c1850f416a
commit
8e8712efab
|
@ -78,8 +78,6 @@ SPECIALIZED-ARRAY: uint-4
|
||||||
|
|
||||||
[ -1 bit-count ] [ invalid-bit-count-target? ] must-fail-with
|
[ -1 bit-count ] [ invalid-bit-count-target? ] must-fail-with
|
||||||
|
|
||||||
{ 0b11 } [ 0b110000 5 4 bit-range ] unit-test
|
|
||||||
|
|
||||||
{ 0b1111 } [ 4 on-bits ] unit-test
|
{ 0b1111 } [ 4 on-bits ] unit-test
|
||||||
{ 0 } [ 0 on-bits ] unit-test
|
{ 0 } [ 0 on-bits ] unit-test
|
||||||
{ 0 } [ -2 on-bits ] unit-test
|
{ 0 } [ -2 on-bits ] unit-test
|
||||||
|
@ -102,3 +100,11 @@ SPECIALIZED-ARRAY: uint-4
|
||||||
{ 0b10 } [ 0 1 toggle-bit ] unit-test
|
{ 0b10 } [ 0 1 toggle-bit ] unit-test
|
||||||
{ 0 } [ 0 0 toggle-bit 0 toggle-bit ] unit-test
|
{ 0 } [ 0 0 toggle-bit 0 toggle-bit ] unit-test
|
||||||
{ 0 } [ 0 1 toggle-bit 1 toggle-bit ] unit-test
|
{ 0 } [ 0 1 toggle-bit 1 toggle-bit ] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
{ 0 } [ 0b1111 33 33 bit-range ] unit-test
|
||||||
|
{ 0 } [ 0b1111 33 20 bit-range ] unit-test
|
||||||
|
{ 0b11 } [ 0b1111 3 2 bit-range ] unit-test
|
||||||
|
[ 0b1111 2 3 bit-range ] [ T{ bit-range-error f 0b1111 2 3 } = ] must-fail-with
|
||||||
|
[ 0b1111 -2 -4 bit-range ] [ T{ bit-range-error f 0b1111 -2 -4 } = ] must-fail-with
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
! Copyright (C) 2007, 2008 Slava Pestov, Doug Coleman.
|
! Copyright (C) 2007, 2008 Slava Pestov, Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: arrays assocs combinators combinators.smart fry kernel
|
USING: alien alien.c-types alien.data arrays assocs byte-arrays
|
||||||
macros math math.bits sequences sequences.private words
|
combinators combinators.short-circuit fry kernel kernel.private
|
||||||
byte-arrays alien alien.c-types alien.data specialized-arrays
|
layouts macros math math.bits sequences sequences.private
|
||||||
kernel.private layouts ;
|
specialized-arrays words ;
|
||||||
SPECIALIZED-ARRAY: uchar
|
SPECIALIZED-ARRAY: uchar
|
||||||
IN: math.bitwise
|
IN: math.bitwise
|
||||||
|
|
||||||
|
@ -28,7 +28,10 @@ IN: math.bitwise
|
||||||
: next-even ( m -- n ) >even 2 + ; foldable
|
: next-even ( m -- n ) >even 2 + ; foldable
|
||||||
: next-odd ( m -- n ) dup even? [ 1 + ] [ 2 + ] if ; foldable
|
: next-odd ( m -- n ) dup even? [ 1 + ] [ 2 + ] if ; foldable
|
||||||
: shift-mod ( m s w -- n ) [ shift ] dip 2^ wrap ; inline
|
: shift-mod ( m s w -- n ) [ shift ] dip 2^ wrap ; inline
|
||||||
|
|
||||||
|
ERROR: bit-range-error x high low ;
|
||||||
: bit-range ( x high low -- y )
|
: bit-range ( x high low -- y )
|
||||||
|
2dup { [ nip 0 < ] [ < ] } 2|| [ bit-range-error ] when
|
||||||
[ nip neg shift ] [ - 1 + ] 2bi bits ; inline
|
[ nip neg shift ] [ - 1 + ] 2bi bits ; inline
|
||||||
|
|
||||||
: bitroll ( x s w -- y )
|
: bitroll ( x s w -- y )
|
||||||
|
|
Loading…
Reference in New Issue