aboutsummaryrefslogtreecommitdiff
path: root/re2/testing/string_generator.cc
diff options
context:
space:
mode:
Diffstat (limited to 're2/testing/string_generator.cc')
-rw-r--r--re2/testing/string_generator.cc41
1 files changed, 21 insertions, 20 deletions
diff --git a/re2/testing/string_generator.cc b/re2/testing/string_generator.cc
index 5be6d3e..feef200 100644
--- a/re2/testing/string_generator.cc
+++ b/re2/testing/string_generator.cc
@@ -6,30 +6,31 @@
// maxlen letters using the set of letters in alpha.
// Fetch strings using a Java-like Next()/HasNext() interface.
+#include <stddef.h>
+#include <stdint.h>
#include <string>
#include <vector>
+
#include "util/test.h"
+#include "util/logging.h"
#include "re2/testing/string_generator.h"
namespace re2 {
-StringGenerator::StringGenerator(int maxlen, const vector<string>& alphabet)
+StringGenerator::StringGenerator(int maxlen,
+ const std::vector<string>& alphabet)
: maxlen_(maxlen), alphabet_(alphabet),
generate_null_(false),
- random_(false), nrandom_(0), acm_(NULL) {
+ random_(false), nrandom_(0) {
// Degenerate case: no letters, no non-empty strings.
- if (alphabet_.size() == 0)
+ if (alphabet_.empty())
maxlen_ = 0;
// Next() will return empty string (digits_ is empty).
hasnext_ = true;
}
-StringGenerator::~StringGenerator() {
- delete acm_;
-}
-
// Resets the string generator state to the beginning.
void StringGenerator::Reset() {
digits_.clear();
@@ -43,14 +44,14 @@ void StringGenerator::Reset() {
// Returns false if all the numbers have been used.
bool StringGenerator::IncrementDigits() {
// First try to increment the current number.
- for (int i = digits_.size() - 1; i >= 0; i--) {
- if (++digits_[i] < alphabet_.size())
+ for (int i = static_cast<int>(digits_.size()) - 1; i >= 0; i--) {
+ if (++digits_[i] < static_cast<int>(alphabet_.size()))
return true;
digits_[i] = 0;
}
// If that failed, make a longer number.
- if (digits_.size() < maxlen_) {
+ if (static_cast<int>(digits_.size()) < maxlen_) {
digits_.push_back(0);
return true;
}
@@ -64,11 +65,15 @@ bool StringGenerator::RandomDigits() {
if (--nrandom_ <= 0)
return false;
+ std::uniform_int_distribution<int> random_len(0, maxlen_);
+ std::uniform_int_distribution<int> random_alphabet_index(
+ 0, static_cast<int>(alphabet_.size()) - 1);
+
// Pick length.
- int len = acm_->Uniform(maxlen_+1);
+ int len = random_len(rng_);
digits_.resize(len);
for (int i = 0; i < len; i++)
- digits_[i] = acm_->Uniform(alphabet_.size());
+ digits_[i] = random_alphabet_index(rng_);
return true;
}
@@ -80,11 +85,11 @@ const StringPiece& StringGenerator::Next() {
CHECK(hasnext_);
if (generate_null_) {
generate_null_ = false;
- sp_ = NULL;
+ sp_ = StringPiece();
return sp_;
}
s_.clear();
- for (int i = 0; i < digits_.size(); i++) {
+ for (size_t i = 0; i < digits_.size(); i++) {
s_ += alphabet_[digits_[i]];
}
hasnext_ = random_ ? RandomDigits() : IncrementDigits();
@@ -93,11 +98,8 @@ const StringPiece& StringGenerator::Next() {
}
// Sets generator up to return n random strings.
-void StringGenerator::Random(int32 seed, int n) {
- if (acm_ == NULL)
- acm_ = new ACMRandom(seed);
- else
- acm_->Reset(seed);
+void StringGenerator::Random(int32_t seed, int n) {
+ rng_.seed(seed);
random_ = true;
nrandom_ = n;
@@ -110,4 +112,3 @@ void StringGenerator::GenerateNULL() {
}
} // namespace re2
-