]> gitweb.factorcode.org Git - factor.git/commitdiff
Implement equal? on dlists. Fixes #338.
authorDoug Coleman <doug.coleman@gmail.com>
Thu, 3 Nov 2011 02:07:37 +0000 (19:07 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Thu, 3 Nov 2011 02:30:54 +0000 (19:30 -0700)
basis/dlists/dlists-tests.factor
basis/dlists/dlists.factor

index 1ca7c0771a8ad6d3f6693994dd6a2bbc85698ed3..1198ec270aad9eb7256a2821dcb0158554306c39 100644 (file)
@@ -85,3 +85,13 @@ IN: dlists.tests
 [ 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
index 710c9d94fb3c805210363781273b6b5d68e5086f..c385b57973372fb69a87f6fa7af2bbc136e3b071 100644 (file)
@@ -1,8 +1,9 @@
 ! 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
@@ -33,6 +34,26 @@ M: dlist deque-empty? front>> not ; inline
 
 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