diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-08-16 01:20:59 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-08-21 21:47:16 +0300 |
commit | 629e65b15b8e659502a2d21e3097af5e342a4a1f (patch) | |
tree | d73a01d8771d9204fda8cfc66be74c4ba6d9d2ed /test | |
parent | 88746ddf94661ee8cd011791c4b9f8be9feb03dd (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.cpp | 86 |
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"]; |