Merge branch 'fast-sets' of git://github.com/mrjbq7/factor

db4
Slava Pestov 2011-01-05 20:25:02 -08:00
commit 15c4917383
4 changed files with 13 additions and 9 deletions

View File

@ -117,7 +117,7 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
[ at* [ = ] [ 2drop f ] if ] with-assoc assoc-all? ;
: assoc= ( assoc1 assoc2 -- ? )
[ assoc-subset? ] [ swap assoc-subset? ] 2bi and ;
2dup [ assoc-size ] bi@ eq? [ assoc-subset? ] [ 2drop f ] if ;
: assoc-hashcode ( n assoc -- code )
>alist hashcode* ;

View File

@ -151,10 +151,7 @@ M: hashtable clone
(clone) [ clone ] change-array ; inline
M: hashtable equal?
over hashtable? [
2dup [ assoc-size ] bi@ eq?
[ assoc= ] [ 2drop f ] if
] [ 2drop f ] if ;
over hashtable? [ assoc= ] [ 2drop f ] if ;
! Default method
M: assoc new-assoc drop <hashtable> ; inline

View File

@ -5,10 +5,14 @@ IN: sets.tests
[ { } ] [ { } { } intersect ] unit-test
[ { 2 3 } ] [ { 1 2 3 } { 2 3 4 } intersect ] unit-test
[ { 2 3 } ] [ { 1 2 3 } { 2 3 4 5 } intersect ] unit-test
[ { 2 3 4 } ] [ { 1 2 3 4 } { 2 3 4 } intersect ] unit-test
[ { 2 3 } ] [ { 1 2 2 3 } { 2 3 3 4 } intersect ] unit-test
[ { } ] [ { } { } diff ] unit-test
[ { 1 } ] [ { 1 2 3 } { 2 3 4 } diff ] unit-test
[ { 1 } ] [ { 1 2 3 } { 2 3 4 5 } diff ] unit-test
[ { 1 } ] [ { 1 2 3 4 } { 2 3 4 } diff ] unit-test
[ { 1 } ] [ { 1 1 2 3 } { 2 3 4 4 } diff ] unit-test
[ { } ] [ { } { } within ] unit-test

View File

@ -46,22 +46,25 @@ M: set union
: sequence/tester ( set1 set2 -- set1' quot )
[ members ] [ tester ] bi* ; inline
: small/large ( set1 set2 -- set1' set2' )
2dup [ cardinality ] bi@ > [ swap ] when ;
PRIVATE>
M: set intersect
[ sequence/tester filter ] keep set-like ;
[ small/large sequence/tester filter ] keep set-like ;
M: set diff
[ sequence/tester [ not ] compose filter ] keep set-like ;
M: set intersects?
sequence/tester any? ;
small/large sequence/tester any? ;
M: set subset?
sequence/tester all? ;
small/large sequence/tester all? ;
M: set set=
2dup subset? [ swap subset? ] [ 2drop f ] if ;
2dup [ cardinality ] bi@ eq? [ subset? ] [ 2drop f ] if ;
M: set fast-set ;