From 265fe6208fb53e5ce5f6d0aea4c4ea40508400ba Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Sat, 17 Apr 2010 16:25:51 -0500 Subject: [PATCH] Adding null? word to test if a set is empty --- basis/bit-sets/bit-sets-tests.factor | 3 +++ core/hash-sets/hash-sets-tests.factor | 3 +++ core/hash-sets/hash-sets.factor | 1 + core/sets/sets-tests.factor | 3 +++ core/sets/sets.factor | 6 ++++++ 5 files changed, 16 insertions(+) diff --git a/basis/bit-sets/bit-sets-tests.factor b/basis/bit-sets/bit-sets-tests.factor index 4e97e703d0..0d4543f8f2 100644 --- a/basis/bit-sets/bit-sets-tests.factor +++ b/basis/bit-sets/bit-sets-tests.factor @@ -11,6 +11,9 @@ IN: bit-sets.tests T{ bit-set f ?{ f f t f t f } } intersect ] unit-test +[ f ] [ T{ bit-set f ?{ t f f f t f } } null? ] unit-test +[ t ] [ T{ bit-set f ?{ f f f f f f } } null? ] unit-test + [ T{ bit-set f ?{ t f t f f f } } ] [ T{ bit-set f ?{ t t t f f f } } T{ bit-set f ?{ f t f f t t } } diff diff --git a/core/hash-sets/hash-sets-tests.factor b/core/hash-sets/hash-sets-tests.factor index 5b7ffafc8b..ca995a38e6 100644 --- a/core/hash-sets/hash-sets-tests.factor +++ b/core/hash-sets/hash-sets-tests.factor @@ -31,3 +31,6 @@ IN: hash-sets.tests [ f ] [ HS{ 1 2 3 } HS{ 2 3 } set= ] unit-test [ HS{ 1 2 } HS{ 1 2 3 } ] [ HS{ 1 2 } clone dup clone [ 3 swap adjoin ] keep ] unit-test + +[ t ] [ HS{ } null? ] unit-test +[ f ] [ HS{ 1 } null? ] unit-test diff --git a/core/hash-sets/hash-sets.factor b/core/hash-sets/hash-sets.factor index 3ca2cce93c..ac198a2ca2 100644 --- a/core/hash-sets/hash-sets.factor +++ b/core/hash-sets/hash-sets.factor @@ -18,6 +18,7 @@ M: hash-set delete table>> delete-at ; inline M: hash-set members table>> keys ; inline M: hash-set set-like drop dup hash-set? [ members ] unless ; M: hash-set clone table>> clone hash-set boa ; +M: hash-set null? table>> assoc-empty? ; M: sequence fast-set ; M: f fast-set drop H{ } clone hash-set boa ; diff --git a/core/sets/sets-tests.factor b/core/sets/sets-tests.factor index e4bc762512..9a48acc4cf 100644 --- a/core/sets/sets-tests.factor +++ b/core/sets/sets-tests.factor @@ -61,3 +61,6 @@ IN: sets.tests [ f ] [ HS{ 1 2 3 1 2 1 } duplicates ] unit-test [ H{ { 3 HS{ 1 2 } } } ] [ H{ } clone 1 3 pick adjoin-at 2 3 pick adjoin-at ] unit-test + +[ t ] [ f null? ] unit-test +[ f ] [ { 4 } null? ] unit-test diff --git a/core/sets/sets.factor b/core/sets/sets.factor index d279f036d4..9c1870aa2e 100644 --- a/core/sets/sets.factor +++ b/core/sets/sets.factor @@ -21,10 +21,13 @@ GENERIC: subset? ( set1 set2 -- ? ) GENERIC: set= ( set1 set2 -- ? ) GENERIC: duplicates ( set -- seq ) GENERIC: all-unique? ( set -- ? ) +GENERIC: null? ( set -- ? ) ! Defaults for some methods. ! Override them for efficiency +M: set null? members null? ; inline + M: set set-like drop ; inline M: set union @@ -91,6 +94,9 @@ M: sequence set-like M: sequence members [ pruned ] keep like ; + +M: sequence null? + empty? ; inline : combine ( sets -- set ) [ f ]