diff --git a/extra/hash-sets/numbers/authors.txt b/extra/hash-sets/numbers/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/hash-sets/numbers/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/hash-sets/numbers/numbers-tests.factor b/extra/hash-sets/numbers/numbers-tests.factor new file mode 100644 index 0000000000..9a709844ff --- /dev/null +++ b/extra/hash-sets/numbers/numbers-tests.factor @@ -0,0 +1,20 @@ +! Copyright (C) 2013 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: hash-sets.numbers kernel sets tools.test ; + +IN: hash-sets.numbers.tests + +[ t ] [ 1.5 NHS{ 3/2 } in? ] unit-test + +[ NHS{ 3/2 } ] [ + 1.5 NHS{ 3/2 } [ adjoin ] keep +] unit-test + +[ t ] [ + NHS{ } clone 1.5 over adjoin + 3/2 swap in? +] unit-test + +[ { 1.5 } ] [ NHS{ 1.5 } members ] unit-test + diff --git a/extra/hash-sets/numbers/numbers.factor b/extra/hash-sets/numbers/numbers.factor new file mode 100644 index 0000000000..1066662f5f --- /dev/null +++ b/extra/hash-sets/numbers/numbers.factor @@ -0,0 +1,36 @@ +! Copyright (C) 2013 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: accessors hash-sets hash-sets.wrapped kernel math +math.hashcodes parser sequences vocabs.loader ; + +IN: hash-sets.numbers + +TUPLE: number-wrapper < wrapped-key ; + +C: number-wrapper + +M: number-wrapper equal? + over number-wrapper? + [ [ underlying>> ] bi@ number= ] + [ 2drop f ] if ; inline + +M: number-wrapper hashcode* + nip underlying>> number-hashcode ; inline + +TUPLE: number-hash-set < wrapped-hash-set ; + +: ( n -- shash-set ) + number-hash-set boa ; inline + +M: number-hash-set wrap-key drop ; + +M: number-hash-set clone + underlying>> clone number-hash-set boa ; inline + +: >number-hash-set ( members -- shash-set ) + [ ] map >hash-set number-hash-set boa ; + +SYNTAX: NHS{ \ } [ >number-hash-set ] parse-literal ; + +{ "hash-sets.numbers" "prettyprint" } "hash-sets.numbers.prettyprint" require-when diff --git a/extra/hash-sets/numbers/prettyprint/prettyprint.factor b/extra/hash-sets/numbers/prettyprint/prettyprint.factor new file mode 100644 index 0000000000..55188e1c60 --- /dev/null +++ b/extra/hash-sets/numbers/prettyprint/prettyprint.factor @@ -0,0 +1,8 @@ +! Copyright (C) 2013 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: hash-sets.numbers kernel prettyprint.custom ; + +IN: hash-sets.numbers.prettyprint + +M: number-hash-set pprint-delims drop \ NHS{ \ } ;