Ocean
Loading...
Searching...
No Matches
TestQRCodeEncoder.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#pragma once
9
11
14
17
18#ifdef OCEAN_USE_LOCAL_TEST_DATA_COLLECTION
19 #ifndef OCEAN_USE_TEST_DATA_COLLECTION
20 #define OCEAN_USE_TEST_DATA_COLLECTION
21 #endif
22#endif // OCEAN_USE_LOCAL_TEST_DATA_COLLECTION
23
24namespace Ocean
25{
26
27namespace Test
28{
29
30namespace TestCV
31{
32
33namespace TestDetector
34{
35
36namespace TestQRCodes
37{
38
39/**
40 * This class implements tests for the QR code features
41 * @ingroup testcvdetectorqrcodes
42 */
43class OCEAN_TEST_CV_DETECTOR_QRCODES_EXPORT TestQRCodeEncoder
44{
45 friend class TestQRCodeDecoder;
46
47 public:
48
49 /**
50 * This class implements a test data collection based on a local file.
51 */
53 {
54 public:
55
56 /**
57 * Creates a new test data collection object.
58 * @param filename The filename of the file containing the test data
59 */
60 explicit FileDataCollection(const std::string& filename);
61
62 /**
63 * Returns the test data object associated with a specified index.
64 * @see TestDataCollection::data().
65 */
66 SharedTestData data(const size_t index) override;
67
68 /**
69 * Returns the number of data object objects this collection holds.
70 * @see TestDataCollection::size().
71 */
72 size_t size() override;
73
74 protected:
75
76 /// The filename of the test data belonging to this test collection.
77 std::string filename_;
78 };
79
80 protected:
81
82 /**
83 * Definition of a helper data structure that's used to verify the QR code encoding functionality
84 * This will contain the raw message and the values of corresponding QR code that were generated with a reference QR code generator and which are assumed to be correct.
85 */
87 {
88 public:
89
90 /**
91 * Constructor - creates an invalid instance
92 */
94
95 /**
96 * Constructor
97 * @param version The version of the QR code
98 * @param errorCorrectionCapacity The level of error correction that the QR code has
99 * @param maskingPattern The masking pattern that was used to generate the QR code
100 * @param message The raw input message that was used to generate the QR code
101 * @param modules The modules of a QR code as a string ("1", "0" only), must have `(4 * version + 17)^2` elements
102 * @sa loadCSVTestQRCodeEncoding()
103 */
104 inline QRCodeVerificationItem(const unsigned int version, const CV::Detector::QRCodes::QRCode::ErrorCorrectionCapacity errorCorrectionCapacity, const CV::Detector::QRCodes::QRCodeEncoder::MaskingPattern maskingPattern, const std::string& message, const std::string& modules);
105
106 public:
107
108 /// Version number
109 unsigned int version_ = 0u;
110
111 /// Error correction capacity
112 CV::Detector::QRCodes::QRCode::ErrorCorrectionCapacity errorCorrectionCapacity_ = CV::Detector::QRCodes::QRCode::ECC_INVALID;
113
114 /// Masking pattern
115 CV::Detector::QRCodes::QRCodeEncoder::MaskingPattern maskingPattern_ =CV::Detector::QRCodes::QRCodeEncoder::MP_PATTERN_UNKNOWN;
116
117 /// The raw message
118 std::string message_;
119
120 /// The modules (bit matrix)
121 std::string modules_;
122 };
123
124 /// Vector of verification items
125 using QRCodeVerificationItems = std::vector<QRCodeVerificationItem>;
126
127 public:
128
129 /**
130 * Tests the QR code functions.
131 * @param testDuration Number of seconds for each test, with range (0, infinity)
132 * @return True, if succeeded
133 */
134 static bool test(const double testDuration);
135
136 /**
137 * Tests encoding (generation) of QR codes
138 * @param testDuration The duration in seconds for which this test will be run, must be > 0.0
139 * @return True, if succeeded
140 */
141 static bool testQRCodeEncoding(const double testDuration);
142
143 /**
144 * Tests the encoding/decoding of the version information
145 * @return True, if succeeded
146 */
148
149 /**
150 * Tests the encoding/decoding of the format information
151 * @return True, if succeeded
152 */
154
155 protected:
156
157 /**
158 * Provides verification data for the QR code encoding test.
159 * The source is either a test data collection, or a minimal dataset
160 * @return The verification data, empty if the data could not be loaded
161 */
163
164 /**
165 * Loads the verification data for the QR code encoding test from a buffer containing a CSV file.
166 * @param buffer The pointer to the buffer, must be valid
167 * @param size The size of the buffer, in bytes, with range [1, infinity)
168 * @return The verification data
169 */
170 static QRCodeVerificationItems loadCSVTestQRCodeEncoding(const void* buffer, const size_t size);
171
172 /**
173 * Converts a line from a CSV file into a helper data structure that is subsequently used for testing
174 * @param lineCSV A line for a CSV file, cf. `loadDataTestQRCodeEncoding()`
175 * @param qrcodeVerificationItem The converted line from a CSV that will be stored here
176 * @return True on success, otherwise false
177 */
178 static bool convertCSVToQRCodeVerificationItem(const std::string& lineCSV, QRCodeVerificationItem& qrcodeVerificationItem);
179};
180
181#ifdef OCEAN_USE_TEST_DATA_COLLECTION
182
183/**
184 * Registers the data collections for the QRCodeEncoder test.
185 * @return The scoped subscription for the registered data collection
186 */
188
189#endif // OCEAN_USE_LOCAL_TEST_DATA_COLLECTION
190
191inline TestQRCodeEncoder::QRCodeVerificationItem::QRCodeVerificationItem(const unsigned int version, const CV::Detector::QRCodes::QRCode::ErrorCorrectionCapacity errorCorrectionCapacity, const CV::Detector::QRCodes::QRCodeEncoder::MaskingPattern maskingPattern, const std::string& message, const std::string& modules) :
192 version_(version),
193 errorCorrectionCapacity_(errorCorrectionCapacity),
194 maskingPattern_(maskingPattern),
195 message_(message),
196 modules_(modules)
197{
198 // Nothing else to do.
199}
200
201} // namespace TestQRCodes
202
203} // namespace TestDetector
204
205} // namespace TestCV
206
207} // namespace Test
208
209} // namespace Ocean
ErrorCorrectionCapacity
Enumeration of the levels of error correction The value of the enums correspond to the standard-defin...
Definition QRCodeBase.h:53
MaskingPattern
Enum for the mask patterns used to shuffle modules of a QR code.
Definition QRCodeEncoder.h:45
This class implements a subscription object which can be used unique subscriptions to e....
Definition ScopedSubscription.h:28
This class implements tests for the QR code features.
Definition TestQRCodeDecoder.h:35
This class implements a test data collection based on a local file.
Definition TestQRCodeEncoder.h:53
FileDataCollection(const std::string &filename)
Creates a new test data collection object.
SharedTestData data(const size_t index) override
Returns the test data object associated with a specified index.
size_t size() override
Returns the number of data object objects this collection holds.
std::string filename_
The filename of the test data belonging to this test collection.
Definition TestQRCodeEncoder.h:77
Definition of a helper data structure that's used to verify the QR code encoding functionality This w...
Definition TestQRCodeEncoder.h:87
std::string message_
The raw message.
Definition TestQRCodeEncoder.h:118
std::string modules_
The modules (bit matrix)
Definition TestQRCodeEncoder.h:121
This class implements tests for the QR code features.
Definition TestQRCodeEncoder.h:44
static bool testQRCodeFormatEncodingDecoding()
Tests the encoding/decoding of the format information.
static bool convertCSVToQRCodeVerificationItem(const std::string &lineCSV, QRCodeVerificationItem &qrcodeVerificationItem)
Converts a line from a CSV file into a helper data structure that is subsequently used for testing.
static QRCodeVerificationItems loadDataTestQRCodeEncoding()
Provides verification data for the QR code encoding test.
static bool test(const double testDuration)
Tests the QR code functions.
static bool testQRCodeEncoding(const double testDuration)
Tests encoding (generation) of QR codes.
static QRCodeVerificationItems loadCSVTestQRCodeEncoding(const void *buffer, const size_t size)
Loads the verification data for the QR code encoding test from a buffer containing a CSV file.
std::vector< QRCodeVerificationItem > QRCodeVerificationItems
Vector of verification items.
Definition TestQRCodeEncoder.h:125
static bool testQRCodeVersionEncodingDecoding()
Tests the encoding/decoding of the version information.
This class is the base class for all TestDataCollection objects.
Definition TestDataCollection.h:35
std::shared_ptr< TestData > SharedTestData
Definition of a shared pointer holding a TestData object.
Definition TestData.h:29
TestDataManager::ScopedSubscription TestQRCodeEncoder_registerTestDataCollection()
Registers the data collections for the QRCodeEncoder test.
The namespace covering the entire Ocean framework.
Definition Accessor.h:15