Update unit tests
This commit is contained in:
parent
50a1744feb
commit
b48d8085ee
|
|
@ -2,8 +2,29 @@
|
|||
|
||||
#include <catch2/catch.hpp>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
using namespace CesiumGltf;
|
||||
|
||||
void testStringToBooleanConversion(
|
||||
const std::string& input,
|
||||
std::optional<bool> expected) {
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert(input) == expected);
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(
|
||||
std::string_view(input)) == expected);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void testStringToScalarConversion(
|
||||
const std::string& input,
|
||||
std::optional<T> expected) {
|
||||
REQUIRE(MetadataConversions<T, std::string>::convert(input) == expected);
|
||||
REQUIRE(
|
||||
MetadataConversions<T, std::string_view>::convert(
|
||||
std::string_view(input)) == expected);
|
||||
}
|
||||
|
||||
TEST_CASE("Test MetadataConversions for boolean") {
|
||||
SECTION("converts from boolean") {
|
||||
REQUIRE(MetadataConversions<bool, bool>::convert(true) == true);
|
||||
|
|
@ -17,64 +38,19 @@ TEST_CASE("Test MetadataConversions for boolean") {
|
|||
REQUIRE(MetadataConversions<bool, int8_t>::convert(0) == false);
|
||||
}
|
||||
|
||||
SECTION("converts from string view") {
|
||||
std::string_view stringView("true");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
true);
|
||||
|
||||
stringView = std::string_view("yes");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
true);
|
||||
|
||||
stringView = std::string_view("1");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
true);
|
||||
|
||||
stringView = std::string_view("false");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
false);
|
||||
|
||||
stringView = std::string_view("no");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
false);
|
||||
|
||||
stringView = std::string_view("0");
|
||||
REQUIRE(
|
||||
MetadataConversions<bool, std::string_view>::convert(stringView) ==
|
||||
false);
|
||||
}
|
||||
|
||||
SECTION("converts from string") {
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("true") == true);
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("yes") == true);
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("1") == true);
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("false") == false);
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("no") == false);
|
||||
REQUIRE(MetadataConversions<bool, std::string>::convert("0") == false);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible string views") {
|
||||
std::string_view stringView("11");
|
||||
// invalid number
|
||||
REQUIRE(!MetadataConversions<bool, std::string_view>::convert(stringView));
|
||||
|
||||
stringView = std::string_view("this is true");
|
||||
// invalid word
|
||||
REQUIRE(!MetadataConversions<bool, std::string_view>::convert(stringView));
|
||||
testStringToBooleanConversion("true", true);
|
||||
testStringToBooleanConversion("yes", true);
|
||||
testStringToBooleanConversion("1", true);
|
||||
testStringToBooleanConversion("false", false);
|
||||
testStringToBooleanConversion("no", false);
|
||||
testStringToBooleanConversion("0", false);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible strings") {
|
||||
// invalid number
|
||||
REQUIRE(!MetadataConversions<bool, std::string_view>::convert("11"));
|
||||
|
||||
// invalid word
|
||||
REQUIRE(
|
||||
!MetadataConversions<bool, std::string_view>::convert("this is true"));
|
||||
testStringToBooleanConversion("11", std::nullopt);
|
||||
testStringToBooleanConversion("this is true", std::nullopt);
|
||||
testStringToBooleanConversion("false!", std::nullopt);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible types") {
|
||||
|
|
@ -108,26 +84,11 @@ TEST_CASE("Test MetadataConversions for integer") {
|
|||
REQUIRE(MetadataConversions<int32_t, bool>::convert(false) == 0);
|
||||
}
|
||||
|
||||
SECTION("converts from string view") {
|
||||
// integer string
|
||||
std::string_view value("-123");
|
||||
REQUIRE(
|
||||
MetadataConversions<int32_t, std::string_view>::convert(value) == -123);
|
||||
// double string
|
||||
value = std::string_view("123.456");
|
||||
REQUIRE(
|
||||
MetadataConversions<int32_t, std::string_view>::convert(value) == 123);
|
||||
}
|
||||
|
||||
SECTION("converts from string") {
|
||||
// integer string
|
||||
REQUIRE(
|
||||
MetadataConversions<int32_t, std::string_view>::convert("-123") ==
|
||||
-123);
|
||||
testStringToScalarConversion<int32_t>("-123", -123);
|
||||
// double string
|
||||
REQUIRE(
|
||||
MetadataConversions<int32_t, std::string_view>::convert("123.456") ==
|
||||
123);
|
||||
testStringToScalarConversion<int32_t>("123.456", 123);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for out-of-range numbers") {
|
||||
|
|
@ -146,39 +107,25 @@ TEST_CASE("Test MetadataConversions for integer") {
|
|||
|
||||
SECTION("returns std::nullopt for invalid strings") {
|
||||
// out-of-range number
|
||||
REQUIRE(!MetadataConversions<uint8_t, std::string>::convert("-1"));
|
||||
testStringToScalarConversion<uint8_t>("-1", std::nullopt);
|
||||
// mixed number and non-number input
|
||||
REQUIRE(!MetadataConversions<int8_t, std::string>::convert("10 hello"));
|
||||
testStringToScalarConversion<int8_t>("10 hello", std::nullopt);
|
||||
// non-number input
|
||||
REQUIRE(
|
||||
!MetadataConversions<uint8_t, std::string>::convert("not a number"));
|
||||
testStringToScalarConversion<uint8_t>("not a number", std::nullopt);
|
||||
// empty input
|
||||
REQUIRE(!MetadataConversions<int8_t, std::string>::convert(""));
|
||||
testStringToScalarConversion<int8_t>("", std::nullopt);
|
||||
|
||||
// extra tests for proper string parsing
|
||||
REQUIRE(!MetadataConversions<uint64_t, std::string>::convert("-1"));
|
||||
REQUIRE(!MetadataConversions<uint64_t, std::string>::convert(
|
||||
"184467440737095515000"));
|
||||
|
||||
REQUIRE(!MetadataConversions<int64_t, std::string>::convert(
|
||||
"-111111111111111111111111111111111"));
|
||||
REQUIRE(!MetadataConversions<int64_t, std::string>::convert(
|
||||
"111111111111111111111111111111111"));
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for invalid string views") {
|
||||
// out-of-range number
|
||||
REQUIRE(!MetadataConversions<uint8_t, std::string_view>::convert(
|
||||
std::string_view("-1")));
|
||||
// mixed number and non-number input
|
||||
REQUIRE(!MetadataConversions<int8_t, std::string_view>::convert(
|
||||
std::string_view("10 hello")));
|
||||
// non-number input
|
||||
REQUIRE(!MetadataConversions<uint8_t, std::string_view>::convert(
|
||||
std::string_view("not a number")));
|
||||
// empty input
|
||||
REQUIRE(!MetadataConversions<int8_t, std::string_view>::convert(
|
||||
std::string_view()));
|
||||
testStringToScalarConversion<uint64_t>("-1", std::nullopt);
|
||||
testStringToScalarConversion<uint64_t>(
|
||||
"184467440737095515000",
|
||||
std::nullopt);
|
||||
testStringToScalarConversion<int64_t>(
|
||||
"-111111111111111111111111111111111",
|
||||
std::nullopt);
|
||||
testStringToScalarConversion<int64_t>(
|
||||
"111111111111111111111111111111111",
|
||||
std::nullopt);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible types") {
|
||||
|
|
@ -219,49 +166,22 @@ TEST_CASE("Test MetadataConversions for float") {
|
|||
REQUIRE(MetadataConversions<float, bool>::convert(false) == 0.0f);
|
||||
}
|
||||
|
||||
SECTION("converts from string view") {
|
||||
REQUIRE(
|
||||
MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view("123")) == static_cast<float>(123));
|
||||
REQUIRE(
|
||||
MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view("123.456")) == static_cast<float>(123.456));
|
||||
}
|
||||
|
||||
SECTION("converts from string") {
|
||||
REQUIRE(
|
||||
MetadataConversions<float, std::string>::convert("123") ==
|
||||
static_cast<float>(123));
|
||||
REQUIRE(
|
||||
MetadataConversions<float, std::string>::convert("123.456") ==
|
||||
static_cast<float>(123.456));
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for invalid string views") {
|
||||
// out-of-range number
|
||||
REQUIRE(!MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view(std::to_string(std::numeric_limits<double>::max()))));
|
||||
// mixed number and non-number input
|
||||
REQUIRE(!MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view("10.00f hello")));
|
||||
// non-number input
|
||||
REQUIRE(!MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view("not a number")));
|
||||
// empty input
|
||||
REQUIRE(!MetadataConversions<float, std::string_view>::convert(
|
||||
std::string_view()));
|
||||
testStringToScalarConversion<float>("123", static_cast<float>(123));
|
||||
testStringToScalarConversion<float>("123.456", static_cast<float>(123.456));
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for invalid strings") {
|
||||
// out-of-range number
|
||||
REQUIRE(!MetadataConversions<float, std::string>::convert(
|
||||
std::to_string(std::numeric_limits<double>::max())));
|
||||
testStringToScalarConversion<float>(
|
||||
std::to_string(std::numeric_limits<double>::max()),
|
||||
std::nullopt);
|
||||
// mixed number and non-number input
|
||||
REQUIRE(!MetadataConversions<float, std::string>::convert("10.00f hello"));
|
||||
testStringToScalarConversion<float>("10.00f hello", std::nullopt);
|
||||
// non-number input
|
||||
REQUIRE(!MetadataConversions<float, std::string>::convert("not a number"));
|
||||
testStringToScalarConversion<float>("not a number", std::nullopt);
|
||||
// empty input
|
||||
REQUIRE(!MetadataConversions<float, std::string>::convert(""));
|
||||
testStringToScalarConversion<float>("", std::nullopt);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible types") {
|
||||
|
|
@ -298,24 +218,17 @@ TEST_CASE("Test MetadataConversions for double") {
|
|||
}
|
||||
|
||||
SECTION("converts from string") {
|
||||
REQUIRE(
|
||||
MetadataConversions<double, std::string_view>::convert(
|
||||
std::string_view("123")) == static_cast<double>(123));
|
||||
REQUIRE(
|
||||
MetadataConversions<double, std::string_view>::convert(
|
||||
std::string_view("123.456")) == 123.456);
|
||||
testStringToScalarConversion<double>("123", static_cast<double>(123));
|
||||
testStringToScalarConversion<double>("123.456", 123.456);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for invalid strings") {
|
||||
// mixed number and non-number input
|
||||
REQUIRE(!MetadataConversions<double, std::string_view>::convert(
|
||||
std::string_view("10.00 hello")));
|
||||
testStringToScalarConversion<double>("10.00 hello", std::nullopt);
|
||||
// non-number input
|
||||
REQUIRE(!MetadataConversions<double, std::string_view>::convert(
|
||||
std::string_view("not a number")));
|
||||
testStringToScalarConversion<double>("not a number", std::nullopt);
|
||||
// empty input
|
||||
REQUIRE(!MetadataConversions<double, std::string_view>::convert(
|
||||
std::string_view()));
|
||||
testStringToScalarConversion<double>("", std::nullopt);
|
||||
}
|
||||
|
||||
SECTION("returns std::nullopt for incompatible types") {
|
||||
|
|
@ -1348,3 +1261,27 @@ TEST_CASE("Test MetadataConversions for mat4") {
|
|||
arrayView));
|
||||
};
|
||||
}
|
||||
|
||||
TEST_CASE("Test MetadataConversions for std::string") {
|
||||
SECTION("converts from std::string_view") {
|
||||
std::string str = "Hello";
|
||||
REQUIRE(
|
||||
MetadataConversions<std::string, std::string_view>::convert(
|
||||
std::string_view(str)) == str);
|
||||
}
|
||||
|
||||
SECTION("converts from boolean") {
|
||||
REQUIRE(MetadataConversions<std::string, bool>::convert(true) == "true");
|
||||
REQUIRE(MetadataConversions<std::string, bool>::convert(false) == "false");
|
||||
}
|
||||
|
||||
SECTION("converts from scalar") {
|
||||
// integer
|
||||
REQUIRE(
|
||||
MetadataConversions<std::string, uint16_t>::convert(1234) == "1234");
|
||||
// float
|
||||
REQUIRE(
|
||||
MetadataConversions<std::string, float>::convert(1.2345f) ==
|
||||
std::to_string(1.2345f).c_str());
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue