Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qstring_generator.h
Go to the documentation of this file.
1
// Copyright (C) 2022 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4
#
pragma
once
5
6
#
include
"../namespaces.h"
7
#
include
"qchar_generator.h"
8
#
include
"../utilities/semantics/generator_handler.h"
9
10
#
include
<
catch
/
catch
.
hpp
>
11
12
#
include
<
random
>
13
14
#
include
<
QString
>
15
16
namespace
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
{
17
namespace
QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
{
18
19
class
QStringGenerator
:
public
Catch
::
Generators
::
IGenerator
<
QString
> {
20
public
:
21
QStringGenerator
(Catch::Generators::GeneratorWrapper<QChar>&& character_generator, qsizetype minimum_length, qsizetype maximum_length)
22
:
character_generator
{
QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
::
handler
(
std
::
move
(
character_generator
))},
23
random_engine{
std
::random_device{}()},
24
length_distribution
{
minimum_length
,
maximum_length
},
25
current_string
{}
26
{
27
assert
(minimum_length >= 0);
28
assert
(maximum_length >= 0);
29
assert
(minimum_length <= maximum_length);
30
31
if
(!
next
(
)
)
32
Catch
::throw_exception(
"Not enough values to initialize the first string"
);
33
}
34
35
QString
const
&
get
()
const
override
{
return
current_string; }
36
37
bool
next
()
override
{
38
qsizetype length{length_distribution(random_engine)};
39
40
current_string = QString();
41
for
(qsizetype length_index{0}; length_index < length; ++length_index) {
42
if
(!character_generator.next())
return
false
;
43
44
current_string += character_generator.get();
45
}
46
47
return
true
;
48
}
49
50
private
:
51
Catch::Generators::GeneratorWrapper<QChar> character_generator;
52
53
std
::mt19937 random_engine;
54
std::uniform_int_distribution<qsizetype> length_distribution;
55
56
QString current_string;
57
};
58
59
}
// end QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
60
61
/*!
62
* Returns a generator that generates elements of QString from
63
* some amount of elements taken from \a character_generator.
64
*
65
* The generated strings will have a length in the range
66
* [\a minimum_length, \a maximum_length].
67
*
68
* For compatibility with the Qt API, it is possible to provide
69
* negative bounds for the length. This is, nonetheless,
70
* considered an error such that the bounds should always be
71
* greater or equal to zero.
72
*
73
* It is similarly considered an error to have minimum_length <=
74
* maximum_length.
75
*
76
* The provided generator will generate elements until \a
77
* character_generator is exhausted.
78
*/
79
inline
Catch
::
Generators
::
GeneratorWrapper
<
QString
>
string
(Catch::Generators::GeneratorWrapper<QChar>&& character_generator, qsizetype minimum_length, qsizetype maximum_length) {
80
return
Catch::Generators::GeneratorWrapper<QString>(std::unique_ptr<Catch::Generators::IGenerator<QString>>(
new
QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
::QStringGenerator(std::move(character_generator), minimum_length, maximum_length)));
81
}
82
83
/*!
84
* Returns an infinite generator whose elements are the empty
85
* QString.
86
*/
87
inline
Catch
::
Generators
::
GeneratorWrapper
<
QString
>
empty_string
() {
88
return
Catch::Generators::GeneratorWrapper<QString>(std::unique_ptr<Catch::Generators::IGenerator<QString>>(
new
QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
::QStringGenerator(character(), 0, 0)));
89
}
90
91
92
}
// end QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator
Definition
qstring_generator.h:19
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator::QStringGenerator
QStringGenerator(Catch::Generators::GeneratorWrapper< QChar > &&character_generator, qsizetype minimum_length, qsizetype maximum_length)
Definition
qstring_generator.h:21
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator::get
QString const & get() const override
Definition
qstring_generator.h:35
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE::QStringGenerator::next
bool next() override
Definition
qstring_generator.h:37
Catch
Definition
catch.hpp:98
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::empty_string
Catch::Generators::GeneratorWrapper< QString > empty_string()
Returns an infinite generator whose elements are the empty QString.
Definition
qstring_generator.h:87
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE::string
Catch::Generators::GeneratorWrapper< QString > string(Catch::Generators::GeneratorWrapper< QChar > &&character_generator, qsizetype minimum_length, qsizetype maximum_length)
Returns a generator that generates elements of QString from some amount of elements taken from charac...
Definition
qstring_generator.h:79
QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
#define QDOC_CATCH_GENERATORS_PRIVATE_NAMESPACE
Definition
namespaces.h:8
QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
#define QDOC_CATCH_GENERATORS_UTILITIES_ABSOLUTE_NAMESPACE
Definition
namespaces.h:14
QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
#define QDOC_CATCH_GENERATORS_ROOT_NAMESPACE
Definition
namespaces.h:6
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
assert
#define assert
Definition
qcborcommon_p.h:29
qttools
src
qdoc
catch_generators
src
catch_generators
generators
qstring_generator.h
Generated on
for Qt by
1.18.0