diff options
Diffstat (limited to 're2/testing/exhaustive_tester.h')
-rw-r--r-- | re2/testing/exhaustive_tester.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/re2/testing/exhaustive_tester.h b/re2/testing/exhaustive_tester.h new file mode 100644 index 0000000..38a139f --- /dev/null +++ b/re2/testing/exhaustive_tester.h @@ -0,0 +1,85 @@ +// Copyright 2009 The RE2 Authors. All Rights Reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#ifndef RE2_TESTING_EXHAUSTIVE_TESTER_H__ +#define RE2_TESTING_EXHAUSTIVE_TESTER_H__ + +#include <string> +#include <vector> +#include "util/util.h" +#include "re2/testing/regexp_generator.h" +#include "re2/testing/string_generator.h" + +namespace re2 { + +// Exhaustive regular expression test: generate all regexps within parameters, +// then generate all strings of a given length over a given alphabet, +// then check that NFA, DFA, and PCRE agree about whether each regexp matches +// each possible string, and if so, where the match is. +// +// Can also be used in a "random" mode that generates a given number +// of random regexp and strings, allowing testing of larger expressions +// and inputs. +class ExhaustiveTester : public RegexpGenerator { + public: + ExhaustiveTester(int maxatoms, + int maxops, + const vector<string>& alphabet, + const vector<string>& ops, + int maxstrlen, + const vector<string>& stralphabet, + const string& wrapper, + const string& topwrapper) + : RegexpGenerator(maxatoms, maxops, alphabet, ops), + strgen_(maxstrlen, stralphabet), + wrapper_(wrapper), + topwrapper_(topwrapper), + regexps_(0), tests_(0), failures_(0), + randomstrings_(0), stringseed_(0), stringcount_(0) { } + + int regexps() { return regexps_; } + int tests() { return tests_; } + int failures() { return failures_; } + + // Needed for RegexpGenerator interface. + void HandleRegexp(const string& regexp); + + // Causes testing to generate random input strings. + void RandomStrings(int32 seed, int32 count) { + randomstrings_ = true; + stringseed_ = seed; + stringcount_ = count; + } + + private: + StringGenerator strgen_; + string wrapper_; // Regexp wrapper - either empty or has one %s. + string topwrapper_; // Regexp top-level wrapper. + int regexps_; // Number of HandleRegexp calls + int tests_; // Number of regexp tests. + int failures_; // Number of tests failed. + + bool randomstrings_; // Whether to use random strings + int32 stringseed_; // If so, the seed. + int stringcount_; // If so, how many to generate. + DISALLOW_EVIL_CONSTRUCTORS(ExhaustiveTester); +}; + +// Runs an exhaustive test on the given parameters. +void ExhaustiveTest(int maxatoms, int maxops, + const vector<string>& alphabet, + const vector<string>& ops, + int maxstrlen, const vector<string>& stralphabet, + const string& wrapper, + const string& topwrapper); + +// Runs an exhaustive test using the given parameters and +// the basic egrep operators. +void EgrepTest(int maxatoms, int maxops, const string& alphabet, + int maxstrlen, const string& stralphabet, + const string& wrapper); + +} // namespace re2 + +#endif // RE2_TESTING_EXHAUSTIVE_TESTER_H__ |