public void analyzeMatcherImpactAllTests() {
        if (getTestCases() == null) {
            return;
        }
        initializeMatchers();
        DebugUserAgent agent = new DebugUserAgent(getWantedFieldNames());
        setVerbose(false);
        agent.setDebug(false);

        Map<String, MatcherImpact> impactOverview = new TreeMap<>();
        List<MatcherImpact> impactList = new ArrayList<>();
        getAllMatchers()
            .stream()
            .sorted(Comparator.comparing(Matcher::getSourceFileName).thenComparingLong(Matcher::getSourceFileLineNumber))
            .forEach(matcher -> {
                MatcherImpact matcherImpact = new MatcherImpact();
                matcherImpact.neededInputs = matcher.getActionsThatRequireInput();
                matcherImpact.name = matcher.getMatcherSourceLocation();
                impactOverview.put(matcher.getMatcherSourceLocation(), matcherImpact);
                impactList.add(matcherImpact);
            });

        for (TestCase test : getTestCases()) {
            String userAgentString = test.getUserAgent();

            agent.setUserAgentString(userAgentString);

            parse(agent);

            impactOverview.forEach((n, i) -> i.tests++);

            getTouchedMatchers().forEach(m -> {
                MatcherImpact impact = impactOverview.get(m.getMatcherSourceLocation());
                impact.touched++;
                if (m.getActionsThatRequireInput() == m.getActionsThatRequireInputAndReceivedInput()) {
                    impact.enoughInputs++;
                    if (!m.getUsedMatches().isEmpty()) {
                        impact.used++;
                    }
                }
            });
        }

        impactList
//            .stream().filter(mi -> mi.neededInputs > 2)
            .forEach(i -> LOG.info("%s", i));
    }
Run all the test_cases available.

@return true if all tests were successful.
analyzer/src/main/java/nl/basjes/parse/useragent/debug/UserAgentStringMatchMakerTester.java