From fd09fc222233e06d1f8c7a915a7a1d43e16456eb Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 31 Oct 2023 20:19:20 -0700 Subject: [PATCH] bit-arrays: fix equal? --- basis/bit-arrays/bit-arrays-tests.factor | 10 ++++++++++ basis/bit-arrays/bit-arrays.factor | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/basis/bit-arrays/bit-arrays-tests.factor b/basis/bit-arrays/bit-arrays-tests.factor index b8ec3f7811..fa68b9e9e2 100644 --- a/basis/bit-arrays/bit-arrays-tests.factor +++ b/basis/bit-arrays/bit-arrays-tests.factor @@ -85,3 +85,13 @@ sequences.private tools.test ; { 0xa } [ ?{ f t f t } bit-array>integer ] unit-test { 0x100 } [ ?{ f f f f f f f f t } bit-array>integer ] unit-test + +{ t } [ + 2 B{ 0b011 } bit-array boa + 2 B{ 0b111 } bit-array boa = +] unit-test + +{ f } [ + 3 B{ 0b0 } bit-array boa + 2 B{ 0b0 } bit-array boa = +] unit-test diff --git a/basis/bit-arrays/bit-arrays.factor b/basis/bit-arrays/bit-arrays.factor index 8116086b75..0e7f07b7e0 100644 --- a/basis/bit-arrays/bit-arrays.factor +++ b/basis/bit-arrays/bit-arrays.factor @@ -78,7 +78,14 @@ M: bit-array like drop dup bit-array? [ >bit-array ] unless ; inline M: bit-array new-sequence drop ; inline M: bit-array equal? - over bit-array? [ [ underlying>> ] bi@ sequence= ] [ 2drop f ] if ; + over bit-array? [ + 2dup 2length dupd = [ + [ [ underlying>> ] bi@ ] dip 8 mod [ sequence= ] [ + [ [ unclip-slice ] bi@ swapd ] dip + '[ _ bits ] bi@ = [ sequence= ] [ 2drop f ] if + ] if-zero + ] [ 3drop f ] if + ] [ 2drop f ] if ; M: bit-array resize dupd [ bits>bytes ] [ underlying>> ] bi* -- 2.34.1