summary: refactoring to use the formatting vocab + tests

locals-and-roots
Björn Lindqvist 2016-03-25 14:00:48 +01:00
parent 7a6570b355
commit 52c5d2b0a4
2 changed files with 13 additions and 20 deletions

View File

@ -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

View File

@ -1,38 +1,26 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs classes continuations kernel make math USING: accessors assocs classes continuations formatting kernel math
math.parser sequences sets ; sequences sets strings ;
IN: summary IN: summary
GENERIC: summary ( object -- string ) GENERIC: summary ( object -- string )
: object-summary ( object -- string ) class-of name>> ; inline : 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: object summary object-summary ;
M: sequence summary M: sequence summary
[ dup length "elements" container-summary ;
dup class-of name>> %
" with " %
length #
" elements" %
] "" make ;
M: assoc summary M: assoc summary
[ dup assoc-size "entries" container-summary ;
dup class-of name>> %
" with " %
assoc-size #
" entries" %
] "" make ;
M: unordered-set summary M: unordered-set summary
[ dup cardinality "members" container-summary ;
dup class-of name>> %
" with " %
cardinality #
" members" %
] "" make ;
! Override sequence => integer instance ! Override sequence => integer instance
M: f summary object-summary ; M: f summary object-summary ;