summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-08-16 01:20:59 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-08-21 21:47:16 +0300
commit629e65b15b8e659502a2d21e3097af5e342a4a1f (patch)
treed73a01d8771d9204fda8cfc66be74c4ba6d9d2ed /test
parent88746ddf94661ee8cd011791c4b9f8be9feb03dd (diff)
test: yaml-parser: Centralize integer parse checks
Centralize the signed and unsigned integer parse checks to avoid code duplication. The diffstat isn't very impressive at this point, but this will help more when adding 8-bit and 16-bit integer tests. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'test')
-rw-r--r--test/yaml-parser.cpp86
1 files changed, 48 insertions, 38 deletions
diff --git a/test/yaml-parser.cpp b/test/yaml-parser.cpp
index 6729e1bd..803e70be 100644
--- a/test/yaml-parser.cpp
+++ b/test/yaml-parser.cpp
@@ -149,6 +149,52 @@ protected:
return TestPass;
}
+ int testIntegerObject(const YamlObject &obj, const char *name, Type type,
+ int64_t value)
+ {
+ uint64_t unsignedValue = static_cast<uint64_t>(value);
+ std::string strValue = std::to_string(value);
+ bool isSigned = type == Type::Int32;
+
+ /* All integers can be parsed as strings or double. */
+
+ if (obj.get<string>().value_or("") != strValue ||
+ obj.get<string>("") != strValue) {
+ std::cerr
+ << "Object " << name << " failed to parse as "
+ << "string" << std::endl;
+ return TestFail;
+ }
+
+ if (obj.get<double>().value_or(0.0) != value ||
+ obj.get<double>(0.0) != value) {
+ std::cerr
+ << "Object " << name << " failed to parse as "
+ << "double" << std::endl;
+ return TestFail;
+ }
+
+ if (obj.get<int32_t>().value_or(0) != value ||
+ obj.get<int32_t>(0) != value) {
+ std::cerr
+ << "Object " << name << " failed to parse as "
+ << "int32_t" << std::endl;
+ return TestFail;
+ }
+
+ if (!isSigned) {
+ if (obj.get<uint32_t>().value_or(0) != unsignedValue ||
+ obj.get<uint32_t>(0) != unsignedValue) {
+ std::cerr
+ << "Object " << name << " failed to parse as "
+ << "uint32_t" << std::endl;
+ return TestFail;
+ }
+ }
+
+ return TestPass;
+ }
+
int run()
{
/* Test invalid YAML file */
@@ -215,23 +261,8 @@ protected:
if (testObjectType(int32Obj, "int32_t", Type::Int32) != TestPass)
return TestFail;
- if (int32Obj.get<int32_t>().value_or(0) != -100 ||
- int32Obj.get<int32_t>(0) != -100) {
- cerr << "Integer object parse as wrong value" << std::endl;
+ if (testIntegerObject(int32Obj, "int32_t", Type::Int32, -100) != TestPass)
return TestFail;
- }
-
- if (int32Obj.get<string>().value_or("") != "-100" ||
- int32Obj.get<string>("") != "-100") {
- cerr << "Integer object fail to parse as string" << std::endl;
- return TestFail;
- }
-
- if (int32Obj.get<double>().value_or(0.0) != -100.0 ||
- int32Obj.get<double>(0.0) != -100.0) {
- cerr << "Integer object fail to parse as double" << std::endl;
- return TestFail;
- }
/* Test uint32_t object */
auto &uint32Obj = (*root)["uint32_t"];
@@ -239,29 +270,8 @@ protected:
if (testObjectType(uint32Obj, "uint32_t", Type::UInt32) != TestPass)
return TestFail;
- if (uint32Obj.get<int32_t>().value_or(0) != 100 ||
- uint32Obj.get<int32_t>(0) != 100) {
- cerr << "Unsigned integer object fail to parse as integer" << std::endl;
+ if (testIntegerObject(uint32Obj, "uint32_t", Type::UInt32, 100) != TestPass)
return TestFail;
- }
-
- if (uint32Obj.get<string>().value_or("") != "100" ||
- uint32Obj.get<string>("") != "100") {
- cerr << "Unsigned integer object fail to parse as string" << std::endl;
- return TestFail;
- }
-
- if (uint32Obj.get<double>().value_or(0.0) != 100.0 ||
- uint32Obj.get<double>(0.0) != 100.0) {
- cerr << "Unsigned integer object fail to parse as double" << std::endl;
- return TestFail;
- }
-
- if (uint32Obj.get<uint32_t>().value_or(0) != 100 ||
- uint32Obj.get<uint32_t>(0) != 100) {
- cerr << "Unsigned integer object parsed as wrong value" << std::endl;
- return TestFail;
- }
/* Test double value */
auto &doubleObj = (*root)["double"];