diff --git a/basis/summary/summary-tests.factor b/basis/summary/summary-tests.factor new file mode 100644 index 0000000000..c6eb2623aa --- /dev/null +++ b/basis/summary/summary-tests.factor @@ -0,0 +1,5 @@ +USING: summary tools.test ; +IN: summary.tests + +{ "string with 5 elements" } [ "hello" summary ] unit-test +{ "hash-set with 3 members" } [ HS{ 1 2 3 } summary ] unit-test diff --git a/basis/summary/summary.factor b/basis/summary/summary.factor index 3f14ea1c39..9e6ad921e7 100644 --- a/basis/summary/summary.factor +++ b/basis/summary/summary.factor @@ -1,38 +1,26 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs classes continuations kernel make math -math.parser sequences sets ; +USING: accessors assocs classes continuations formatting kernel math +sequences sets strings ; IN: summary GENERIC: summary ( object -- string ) : object-summary ( object -- string ) class-of name>> ; inline +: container-summary ( obj size word -- str ) + [ object-summary ] 2dip "%s with %d %s" sprintf ; + M: object summary object-summary ; M: sequence summary - [ - dup class-of name>> % - " with " % - length # - " elements" % - ] "" make ; + dup length "elements" container-summary ; M: assoc summary - [ - dup class-of name>> % - " with " % - assoc-size # - " entries" % - ] "" make ; + dup assoc-size "entries" container-summary ; M: unordered-set summary - [ - dup class-of name>> % - " with " % - cardinality # - " members" % - ] "" make ; + dup cardinality "members" container-summary ; ! Override sequence => integer instance M: f summary object-summary ;