]> git.ipfire.org Git - thirdparty/squid.git/blame - src/tests/SBufFindTest.h
Languages: updated Serbian aliases
[thirdparty/squid.git] / src / tests / SBufFindTest.h
CommitLineData
412da427
FC
1#ifndef SQUID_SRC_TEST_SBUFFINDTEST_H
2#define SQUID_SRC_TEST_SBUFFINDTEST_H
3
4#include "SBuf.h"
5
6#if HAVE_STRING
7#include <string>
8#endif
9#include <set>
10
11/// Generates and executes a [configurable] large number of SBuf::*find()
12/// test cases using random strings. Reports detected failures.
13class SBufFindTest
14{
15public:
16 SBufFindTest();
17
18 void run(); ///< generates and executes cases using configuration params
19
20 /* test configuration parameters; can be optionally set before run() */
21 int caseLimit; ///< approximate caseCount limit
22 int errorLimit; ///< errorCount limit
23 unsigned int randomSeed; ///< pseudo-random sequence choice
24 /// whether to report only one failed test case per "category"
25 bool hushSimilar;
26 /// approximate maximum generated hay string length
62842d40 27 SBuf::size_type maxHayLength;
412da427
FC
28
29 /// Supported algorithms for placing needle in the hay.
30 typedef enum { placeBeginning, placeMiddle, placeEnd, placeNowhere,
62842d40
FC
31 placeEof
32 } Placement; // placeLast marker must terminate
412da427
FC
33protected:
34
35 static SBuf RandomSBuf(const int length);
50827187 36 void nextLen(SBuf::size_type &len, const SBuf::size_type max);
412da427
FC
37 void placeNeedle(const SBuf &cleanHay);
38
39 void testAllMethods();
40 void testFindDefs();
41 void testFind();
42 void testRFindDefs();
43 void testRFind();
44 void testFindCharDefs();
45 void testFindChar();
46 void testRFindCharDefs();
47 void testRFindChar();
48 void testFindFirstOf();
49
50 std::string posKey() const;
51 std::string placementKey() const;
52
53 bool resultsMatch() const;
54 void checkResults(const char *method);
55 void handleFailure(const char *method);
56
57private:
58 /* test case parameters */
59 SBuf theSBufHay; ///< the string to be searched
60 SBuf theSBufNeedle; ///< the string to be found
61 SBuf::size_type thePos; ///< search position limit
62 Placement thePlacement; ///< where in the hay the needle is placed
63 std::string::size_type theStringPos; ///< thePos converted to std::string::size_type
64 std::string theStringHay; ///< theHay converted to std::string
65 std::string theStringNeedle; ///< theNeedle converted to std::string
66
67 /// needle pos w/o thePos restrictions; used for case categorization
68 std::string::size_type theBareNeedlePos;
69
70 /* test case results */
71 std::string::size_type theFindString;
72 SBuf::size_type theFindSBuf;
73 std::string theReportFunc;
74 std::string theReportNeedle;
75 std::string theReportPos;
76 char theReportQuote;
77
78 /* test progress indicators */
79 int caseCount; ///< cases executed so far
80 int errorCount; ///< total number of failed test cases so far
81 int reportCount; ///< total number of test cases reported so far
82 std::set<std::string> failedCats; ///< reported failed categories
83};
84
85typedef SBufFindTest::Placement Placement;
86
87#endif