! Copyright (C) 2011 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs fry kernel quotations sequences strings tools.annotations vocabs words prettyprint io ; IN: tools.coverage TUPLE: coverage < identity-tuple executed? ; C: coverage GENERIC: coverage-on ( object -- ) GENERIC: coverage-off ( object -- ) M: string coverage-on words [ coverage-on ] each ; M: string coverage-off ( vocabulary -- ) words [ coverage-off ] each ; M: word coverage-on ( word -- ) H{ } clone [ "coverage" set-word-prop ] 2keep '[ \ coverage new [ _ set-at ] 2keep '[ _ t >>executed? drop ] [ ] surround ] deep-annotate ; M: word coverage-off ( word -- ) [ reset ] [ f "coverage" set-word-prop ] bi ; GENERIC: coverage ( object -- seq ) M: string coverage words [ dup coverage ] { } map>assoc ; M: word coverage ( word -- seq ) "coverage" word-prop >alist [ drop executed?>> not ] assoc-filter values ; GENERIC: coverage. ( object -- ) M: string coverage. words [ coverage. ] each ; M: word coverage. dup coverage [ drop ] [ [ name>> ":" append print ] [ [ bl bl bl bl . ] each ] bi* ] if-empty ;