[ V{ 2 4 } ] [ <dlist> { 1 2 3 4 5 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
[ V{ 0 2 4 } ] [ <dlist> { 0 1 2 3 4 5 } over push-all-back [ even? ] dlist-filter dlist>seq ] unit-test
+[ t ] [ DL{ } DL{ } = ] unit-test
+[ t ] [ DL{ 1 } DL{ 1 } = ] unit-test
+[ t ] [ DL{ 1 2 } DL{ 1 2 } = ] unit-test
+[ t ] [ DL{ 1 1 } DL{ 1 1 } = ] unit-test
+[ f ] [ DL{ 1 2 3 } DL{ 1 2 } = ] unit-test
+[ f ] [ DL{ 1 2 } DL{ 1 2 3 } = ] unit-test
+[ f ] [ DL{ } DL{ 1 } = ] unit-test
+[ f ] [ DL{ f } DL{ 1 } = ] unit-test
+[ f ] [ f DL{ } = ] unit-test
+[ f ] [ DL{ } f = ] unit-test
! Copyright (C) 2007, 2009 Mackenzie Straight, Doug Coleman,
! Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors combinators deques fry hashtables kernel math
-math.order parser search-deques sequences summary vocabs.loader ;
+USING: accessors arrays combinators combinators.short-circuit
+deques fry hashtables kernel parser search-deques sequences
+summary vocabs.loader ;
IN: dlists
<PRIVATE
M: dlist-node node-value obj>> ;
+<PRIVATE
+
+: dlist-nodes= ( dlist-node/f dlist-node/f -- ? )
+ {
+ [ [ dlist-node? ] both? ]
+ [ [ obj>> ] bi@ = ]
+ } 2&& ; inline
+
+PRIVATE>
+
+M: dlist equal?
+ over dlist? [
+ [ front>> ] bi@
+ [ 2dup dlist-nodes= ]
+ [ [ next>> ] bi@ ] while
+ 2array { f f } =
+ ] [
+ 2drop f
+ ] if ;
+
: set-prev-when ( dlist-node dlist-node/f -- )
[ prev<< ] [ drop ] if* ; inline