diff --git a/basis/summary/summary-tests.factor b/basis/summary/summary-tests.factor index c6eb2623aa..057280bf2c 100644 --- a/basis/summary/summary-tests.factor +++ b/basis/summary/summary-tests.factor @@ -1,5 +1,13 @@ -USING: summary tools.test ; +USING: combinators continuations kernel summary tools.test ; IN: summary.tests +{ "array with 2 elements" } [ { 1 2 } summary ] unit-test { "string with 5 elements" } [ "hello" summary ] unit-test { "hash-set with 3 members" } [ HS{ 1 2 3 } summary ] unit-test +{ "hashtable with 1 entries" } [ H{ { 3 4 } } summary ] unit-test +{ "Quotation's stack effect does not match call site" } [ + [ [ ] f wrong-values ] [ ] recover summary +] unit-test + +TUPLE: ooga-boga ; +{ "a ooga-boga tuple" } [ ooga-boga boa summary ] unit-test diff --git a/basis/summary/summary.factor b/basis/summary/summary.factor index 9e6ad921e7..2b97790c23 100644 --- a/basis/summary/summary.factor +++ b/basis/summary/summary.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs classes continuations formatting kernel math -sequences sets strings ; +sequences sets ; IN: summary GENERIC: summary ( object -- string ) @@ -11,17 +11,25 @@ GENERIC: summary ( object -- string ) : container-summary ( obj size word -- str ) [ object-summary ] 2dip "%s with %d %s" sprintf ; +GENERIC: tuple-summary ( object -- string ) + +M: assoc tuple-summary + dup assoc-size "entries" container-summary ; + +M: object tuple-summary + class-of "a %s tuple" sprintf ; + +M: unordered-set tuple-summary + dup cardinality "members" container-summary ; + +M: tuple summary + tuple-summary ; + M: object summary object-summary ; M: sequence summary dup length "elements" container-summary ; -M: assoc summary - dup assoc-size "entries" container-summary ; - -M: unordered-set summary - dup cardinality "members" container-summary ; - ! Override sequence => integer instance M: f summary object-summary ;