math.bitwise: Fix on-bits for negative values, which also fixes bits. Add unit tests.
parent
f0464fa097
commit
19b6ae71d5
|
@ -79,3 +79,26 @@ SPECIALIZED-ARRAY: uint-4
|
|||
[ -1 bit-count ] [ invalid-bit-count-target? ] must-fail-with
|
||||
|
||||
{ 0b11 } [ 0b110000 5 4 bit-range ] unit-test
|
||||
|
||||
{ 0b1111 } [ 4 on-bits ] unit-test
|
||||
{ 0 } [ 0 on-bits ] unit-test
|
||||
{ 0 } [ -2 on-bits ] unit-test
|
||||
|
||||
{ 0b11 } [ 0b1111 2 bits ] unit-test
|
||||
{ 0b111 } [ 0b1111 3 bits ] unit-test
|
||||
{ 0 } [ 0b1111 0 bits ] unit-test
|
||||
{ 0 } [ 0b1111 -2 bits ] unit-test
|
||||
|
||||
{ 0b111 } [ 0b111 -1 clear-bit ] unit-test
|
||||
{ 0b110 } [ 0b111 0 clear-bit ] unit-test
|
||||
{ 0b101 } [ 0b111 1 clear-bit ] unit-test
|
||||
|
||||
{ 0 } [ 0 -1 set-bit ] unit-test
|
||||
{ 0b1 } [ 0 0 set-bit ] unit-test
|
||||
{ 0b10 } [ 0 1 set-bit ] unit-test
|
||||
|
||||
{ 0 } [ 0 -1 toggle-bit ] unit-test
|
||||
{ 0b1 } [ 0 0 toggle-bit ] unit-test
|
||||
{ 0b10 } [ 0 1 toggle-bit ] unit-test
|
||||
{ 0 } [ 0 0 toggle-bit 0 toggle-bit ] unit-test
|
||||
{ 0 } [ 0 1 toggle-bit 1 toggle-bit ] unit-test
|
||||
|
|
|
@ -16,7 +16,7 @@ IN: math.bitwise
|
|||
: mask ( x n -- ? ) bitand ; inline
|
||||
: mask? ( x n -- ? ) mask zero? not ; inline
|
||||
: wrap ( m n -- m' ) 1 - bitand ; inline
|
||||
: on-bits ( m -- n ) 2^ 1 - ; inline
|
||||
: on-bits ( m -- n ) dup 0 <= [ drop 0 ] [ 2^ 1 - ] if ; inline
|
||||
: bits ( m n -- m' ) on-bits mask ; inline
|
||||
: mask-bit ( m n -- m' ) 2^ mask ; inline
|
||||
: toggle-bit ( m n -- m' ) 2^ bitxor ; inline
|
||||
|
|
Loading…
Reference in New Issue