@@ -3262,6 +3262,9 @@ GenericArray<T> GenericArray<T>::choiceWithRepetition(size_t count) const {
3262
3262
3263
3263
template <typename T>
3264
3264
GenericArray<T>& GenericArray<T>::operator +=(const GenericArray<T>& other) {
3265
+ if (&other == this ) {
3266
+ return *this *= 2 ;
3267
+ }
3265
3268
insert (end (), other.begin (), other.end ());
3266
3269
return *this ;
3267
3270
}
@@ -3279,12 +3282,10 @@ GenericArray<T>& GenericArray<T>::operator*=(int k) {
3279
3282
return *this ;
3280
3283
}
3281
3284
3282
- this ->reserve (this ->size () * k);
3285
+ this ->reserve (size () * k);
3286
+
3287
+ std::copy_n (begin (), size () * (k - 1 ), std::back_inserter (*this ));
3283
3288
3284
- size_t size = this ->size ();
3285
- while (k-- > 1 ) {
3286
- insert (end (), begin (), begin () + size);
3287
- }
3288
3289
return *this ;
3289
3290
}
3290
3291
@@ -4128,7 +4129,7 @@ Pointf GeometryRandom::pointf(long double X, long double Y) {
4128
4129
}
4129
4130
4130
4131
Pointf GeometryRandom::pointf (long double C) {
4131
- return point (C, C);
4132
+ return pointf (C, C);
4132
4133
}
4133
4134
4134
4135
Polygon GeometryRandom::convexPolygon (int n, long long X, long long Y) {
@@ -4380,7 +4381,7 @@ class StringRandom {
4380
4381
created = true ;
4381
4382
}
4382
4383
4383
- static std::string random (int len, const std::string& alphabet);
4384
+ static std::string random (int len, const std::string& alphabet = " a-z " );
4384
4385
4385
4386
template <typename ... Args>
4386
4387
static std::string random (const std::string& pattern, Args... args) {
@@ -4399,9 +4400,21 @@ class StringRandom {
4399
4400
4400
4401
JNGEN_EXTERN StringRandom rnds;
4401
4402
4403
+ } // namespace jngen
4404
+
4405
+ using jngen::rnds;
4406
+
4407
+ #ifndef JNGEN_DECLARE_ONLY
4408
+ #define JNGEN_INCLUDE_RNDS_INL_H
4409
+ #ifndef JNGEN_INCLUDE_RNDS_INL_H
4410
+ #error File "rnds_inl.h" must not be included directly.
4411
+ #endif
4412
+
4413
+ namespace jngen {
4414
+
4402
4415
namespace detail {
4403
4416
4404
- inline int popcount (long long x) {
4417
+ int popcount (long long x) {
4405
4418
int res = 0 ;
4406
4419
while (x) {
4407
4420
++res;
@@ -4410,7 +4423,7 @@ inline int popcount(long long x) {
4410
4423
return res;
4411
4424
}
4412
4425
4413
- inline int trailingZeroes (long long x) {
4426
+ int trailingZeroes (long long x) {
4414
4427
int res = 0 ;
4415
4428
ENSURE (x != 0 );
4416
4429
while (!(x&1 )) {
@@ -4420,7 +4433,7 @@ inline int trailingZeroes(long long x) {
4420
4433
return res;
4421
4434
}
4422
4435
4423
- inline std::string parseAllowedChars (std::string pattern) {
4436
+ std::string parseAllowedChars (std::string pattern) {
4424
4437
std::string result;
4425
4438
pattern += " \0\0 " ;
4426
4439
for (size_t i = 0 ; i < pattern.length (); ++i) {
@@ -4439,7 +4452,7 @@ inline std::string parseAllowedChars(std::string pattern) {
4439
4452
return result;
4440
4453
}
4441
4454
4442
- inline std::vector<std::string> extendAntiHash (
4455
+ std::vector<std::string> extendAntiHash (
4443
4456
const std::vector<std::string>& chars,
4444
4457
HashBase base,
4445
4458
int count)
@@ -4524,7 +4537,7 @@ inline std::vector<std::string> extendAntiHash(
4524
4537
}
4525
4538
}
4526
4539
4527
- inline StringPair minimalAntiHashTest (
4540
+ StringPair minimalAntiHashTest (
4528
4541
std::vector<HashBase> bases,
4529
4542
const std::string allowedChars)
4530
4543
{
@@ -4563,7 +4576,6 @@ inline StringPair minimalAntiHashTest(
4563
4576
4564
4577
} // namespace detail
4565
4578
4566
- #ifndef JNGEN_DECLARE_ONLY
4567
4579
4568
4580
std::string StringRandom::random (int len, const std::string& alphabet) {
4569
4581
checkLargeParameter (len);
@@ -4626,11 +4638,9 @@ StringPair StringRandom::antiHash(
4626
4638
};
4627
4639
}
4628
4640
4629
- #endif
4630
-
4631
4641
} // namespace jngen
4632
-
4633
- using jngen::rnds;
4642
+ # undef JNGEN_INCLUDE_RNDS_INL_H
4643
+ # endif // JNGEN_DECLARE_ONLY
4634
4644
4635
4645
4636
4646
#include < algorithm>
@@ -4672,16 +4682,15 @@ class BaseTestSuite {
4672
4682
4673
4683
T gen (size_t id, Args... args) const {
4674
4684
ensure (
4675
- 0 < id && id <= producers_.size (),
4676
- format (" Cannot generate test #%d in suite '%s', valid numbers are "
4677
- " from 1 to %d" ,
4678
- (int )id, name_.c_str (), (int )producers_.size ()));
4685
+ id < producers_.size (),
4686
+ format (" Cannot generate test #%d in suite '%s', there are only "
4687
+ " %d" , (int )id, name_.c_str (), (int )producers_.size ()));
4679
4688
return producers_[id](args...);
4680
4689
}
4681
4690
4682
4691
T gen (const std::string& name, Args... args) const {
4683
- size_t pos =
4684
- std::find (names_. begin (), names_. end (), name) - names_.begin ();
4692
+ size_t pos = std::find (names_. begin (), names_. end (), name)
4693
+ - names_.begin ();
4685
4694
ensure (
4686
4695
pos < names_.size (),
4687
4696
format (" There is no test '%s' in suite '%s'" ,
@@ -4692,19 +4701,17 @@ class BaseTestSuite {
4692
4701
TArray<T> genMany (size_t count, Args... args) const {
4693
4702
ensure (
4694
4703
count <= producers_.size (),
4695
- format (" Cannot generate test #%d in suite '%s', valid numbers are "
4696
- " from 1 to %d" ,
4697
- (int )count, name_.c_str (), (int )producers_.size ()));
4704
+ format (" Cannot generate %d tests in suite '%s', there are only "
4705
+ " %d" , (int )count, name_.c_str (), (int )producers_.size ()));
4698
4706
4699
4707
TArray<T> result;
4700
4708
result.reserve (count);
4701
- for (size_t id = 1 ; id <= count; ++id) {
4709
+ for (size_t id = 0 ; id < count; ++id) {
4702
4710
try {
4703
4711
result.push_back (gen (id, args...));
4704
4712
} catch (...) {
4705
- std::cerr << " Failed to generate test #" << id << " of suite "
4713
+ std::cerr << " Cannot generate test #" << id << " of suite "
4706
4714
<< name_ << " \n " ;
4707
- throw ;
4708
4715
}
4709
4716
}
4710
4717
@@ -6303,54 +6310,6 @@ class GeneralTreeSuite : public BaseTestSuite<Tree, int> {
6303
6310
return Tree::random (n);
6304
6311
};
6305
6312
6306
- JNGEN_ADD_PRODUCER (kruskal1) {
6307
- return Tree::randomKruskal (n);
6308
- };
6309
-
6310
- JNGEN_ADD_PRODUCER (kruskal2) {
6311
- return Tree::randomKruskal (n);
6312
- };
6313
-
6314
- JNGEN_ADD_PRODUCER (kruskal3) {
6315
- return Tree::randomKruskal (n);
6316
- };
6317
-
6318
- JNGEN_ADD_PRODUCER (random_w-100 ) {
6319
- return Tree::randomPrim (n, -100 );
6320
- };
6321
-
6322
- JNGEN_ADD_PRODUCER (random_w-50 ) {
6323
- return Tree::randomPrim (n, -50 );
6324
- };
6325
-
6326
- JNGEN_ADD_PRODUCER (random_w-10 ) {
6327
- return Tree::randomPrim (n, -10 );
6328
- };
6329
-
6330
- JNGEN_ADD_PRODUCER (random_w-5 ) {
6331
- return Tree::randomPrim (n, -5 );
6332
- };
6333
-
6334
- JNGEN_ADD_PRODUCER (random_w0) {
6335
- return Tree::randomPrim (n, 0 );
6336
- };
6337
-
6338
- JNGEN_ADD_PRODUCER (random_w5) {
6339
- return Tree::randomPrim (n, 5 );
6340
- };
6341
-
6342
- JNGEN_ADD_PRODUCER (random_w10) {
6343
- return Tree::randomPrim (n, 10 );
6344
- };
6345
-
6346
- JNGEN_ADD_PRODUCER (random_w50) {
6347
- return Tree::randomPrim (n, 50 );
6348
- };
6349
-
6350
- JNGEN_ADD_PRODUCER (random_w100) {
6351
- return Tree::randomPrim (n, 100 );
6352
- };
6353
-
6354
6313
JNGEN_ADD_PRODUCER (bamboo) {
6355
6314
return Tree::bamboo (n);
6356
6315
};
@@ -6436,6 +6395,42 @@ class GeneralTreeSuite : public BaseTestSuite<Tree, int> {
6436
6395
return t1.link (n/2 - 1 , t2, 0 );
6437
6396
};
6438
6397
6398
+ JNGEN_ADD_PRODUCER (random_w-100 ) {
6399
+ return Tree::randomPrim (n, -100 );
6400
+ };
6401
+
6402
+ JNGEN_ADD_PRODUCER (random_w-50 ) {
6403
+ return Tree::randomPrim (n, -50 );
6404
+ };
6405
+
6406
+ JNGEN_ADD_PRODUCER (random_w-10 ) {
6407
+ return Tree::randomPrim (n, -10 );
6408
+ };
6409
+
6410
+ JNGEN_ADD_PRODUCER (random_w-5 ) {
6411
+ return Tree::randomPrim (n, -5 );
6412
+ };
6413
+
6414
+ JNGEN_ADD_PRODUCER (random_w0) {
6415
+ return Tree::randomPrim (n, 0 );
6416
+ };
6417
+
6418
+ JNGEN_ADD_PRODUCER (random_w5) {
6419
+ return Tree::randomPrim (n, 5 );
6420
+ };
6421
+
6422
+ JNGEN_ADD_PRODUCER (random_w10) {
6423
+ return Tree::randomPrim (n, 10 );
6424
+ };
6425
+
6426
+ JNGEN_ADD_PRODUCER (random_w50) {
6427
+ return Tree::randomPrim (n, 50 );
6428
+ };
6429
+
6430
+ JNGEN_ADD_PRODUCER (random_w100) {
6431
+ return Tree::randomPrim (n, 100 );
6432
+ };
6433
+
6439
6434
#undef JNGEN_PRODUCER_ARGS
6440
6435
}
6441
6436
};
0 commit comments