USING: accessors arrays assocs classes combinators.short-circuit
continuations fry io kernel math namespaces prettyprint
quotations sequences sequences.deep splitting strings
-tools.annotations tools.test.private vocabs vocabs.hierarchy
-words words.symbol ;
+tools.annotations tools.test.private vocabs words words.symbol ;
IN: tools.coverage
TUPLE: coverage-state < identity-tuple executed? ;
".private" ?tail drop ".private" append ;
: coverage-words ( string -- words )
- vocab-words [ { [ primitive? not ] [ symbol? not ] [ predicate? not ] } 1&& ] filter ;
+ vocab-words [
+ {
+ [ primitive? not ]
+ [ symbol? not ]
+ [ predicate? not ]
+ } 1&&
+ ] filter ;
PRIVATE>
[ dup coverage 2array ] map-words ;
M: word coverage ( word -- seq )
- "coverage" word-prop >alist
+ "coverage" word-prop
[ drop executed?>> ] assoc-reject values ;
GENERIC: coverage. ( object -- )
M: string coverage.
[ coverage. ] each-word ;
-: pair-coverage. ( word quots -- )
- dup empty? [
- 2drop
- ] [
+: pair-coverage. ( word seq -- )
+ [ drop ] [
[ name>> ":" append print ]
[ [ " " write . ] each ] bi*
- ] if ;
+ ] if-empty ;
M: word coverage.
dup coverage pair-coverage. ;
[ count-callables ] map-words sum ;
M: word count-callables
- def>> [ callable? ] deep-filter length ;
+ def>> 0 [ callable? [ 1 + ] when ] deep-reduce ;
PRIVATE>