diff options
Diffstat (limited to 'src/unittest/test_utilities.cpp')
-rw-r--r-- | src/unittest/test_utilities.cpp | 197 |
1 files changed, 90 insertions, 107 deletions
diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 447b591e1..a24f7dd3e 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -24,7 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include "util/string.h" -class TestUtilities : public TestBase { +class TestUtilities : public TestBase +{ public: TestUtilities() { TestManager::registerTestModule(this); } const char *getName() { return "TestUtilities"; } @@ -101,7 +102,6 @@ inline float ref_WrapDegrees180(float f) return value - 180; } - inline float ref_WrapDegrees_0_360(float f) { // This is a slower alternative to the wrapDegrees_0_360() function; @@ -112,66 +112,65 @@ inline float ref_WrapDegrees_0_360(float f) return value < 0 ? value + 360 : value; } +void TestUtilities::testAngleWrapAround() +{ + UASSERT(fabs(modulo360f(100.0) - 100.0) < 0.001); + UASSERT(fabs(modulo360f(720.5) - 0.5) < 0.001); + UASSERT(fabs(modulo360f(-0.5) - (-0.5)) < 0.001); + UASSERT(fabs(modulo360f(-365.5) - (-5.5)) < 0.001); -void TestUtilities::testAngleWrapAround() { - UASSERT(fabs(modulo360f(100.0) - 100.0) < 0.001); - UASSERT(fabs(modulo360f(720.5) - 0.5) < 0.001); - UASSERT(fabs(modulo360f(-0.5) - (-0.5)) < 0.001); - UASSERT(fabs(modulo360f(-365.5) - (-5.5)) < 0.001); - - for (float f = -720; f <= -360; f += 0.25) { - UASSERT(std::fabs(modulo360f(f) - modulo360f(f + 360)) < 0.001); - } - - for (float f = -1440; f <= 1440; f += 0.25) { - UASSERT(std::fabs(modulo360f(f) - fmodf(f, 360)) < 0.001); - UASSERT(std::fabs(wrapDegrees_180(f) - ref_WrapDegrees180(f)) < 0.001); - UASSERT(std::fabs(wrapDegrees_0_360(f) - ref_WrapDegrees_0_360(f)) < 0.001); - UASSERT(wrapDegrees_0_360( - std::fabs(wrapDegrees_180(f) - wrapDegrees_0_360(f))) < 0.001); - } + for (float f = -720; f <= -360; f += 0.25) { + UASSERT(std::fabs(modulo360f(f) - modulo360f(f + 360)) < 0.001); + } + for (float f = -1440; f <= 1440; f += 0.25) { + UASSERT(std::fabs(modulo360f(f) - fmodf(f, 360)) < 0.001); + UASSERT(std::fabs(wrapDegrees_180(f) - ref_WrapDegrees180(f)) < 0.001); + UASSERT(std::fabs(wrapDegrees_0_360(f) - ref_WrapDegrees_0_360(f)) < + 0.001); + UASSERT(wrapDegrees_0_360(std::fabs(wrapDegrees_180(f) - + wrapDegrees_0_360(f))) < 0.001); + } } void TestUtilities::testWrapDegrees_0_360_v3f() { - // only x test with little step + // only x test with little step for (float x = -720.f; x <= 720; x += 0.05) { - v3f r = wrapDegrees_0_360_v3f(v3f(x, 0, 0)); - UASSERT(r.X >= 0.0f && r.X < 360.0f) - UASSERT(r.Y == 0.0f) - UASSERT(r.Z == 0.0f) - } - - // only y test with little step - for (float y = -720.f; y <= 720; y += 0.05) { - v3f r = wrapDegrees_0_360_v3f(v3f(0, y, 0)); - UASSERT(r.X == 0.0f) - UASSERT(r.Y >= 0.0f && r.Y < 360.0f) - UASSERT(r.Z == 0.0f) - } - - // only z test with little step - for (float z = -720.f; z <= 720; z += 0.05) { - v3f r = wrapDegrees_0_360_v3f(v3f(0, 0, z)); - UASSERT(r.X == 0.0f) - UASSERT(r.Y == 0.0f) - UASSERT(r.Z >= 0.0f && r.Z < 360.0f) + v3f r = wrapDegrees_0_360_v3f(v3f(x, 0, 0)); + UASSERT(r.X >= 0.0f && r.X < 360.0f) + UASSERT(r.Y == 0.0f) + UASSERT(r.Z == 0.0f) } - // test the whole coordinate translation - for (float x = -720.f; x <= 720; x += 2.5) { - for (float y = -720.f; y <= 720; y += 2.5) { - for (float z = -720.f; z <= 720; z += 2.5) { - v3f r = wrapDegrees_0_360_v3f(v3f(x, y, z)); - UASSERT(r.X >= 0.0f && r.X < 360.0f) - UASSERT(r.Y >= 0.0f && r.Y < 360.0f) - UASSERT(r.Z >= 0.0f && r.Z < 360.0f) - } - } - } -} + // only y test with little step + for (float y = -720.f; y <= 720; y += 0.05) { + v3f r = wrapDegrees_0_360_v3f(v3f(0, y, 0)); + UASSERT(r.X == 0.0f) + UASSERT(r.Y >= 0.0f && r.Y < 360.0f) + UASSERT(r.Z == 0.0f) + } + + // only z test with little step + for (float z = -720.f; z <= 720; z += 0.05) { + v3f r = wrapDegrees_0_360_v3f(v3f(0, 0, z)); + UASSERT(r.X == 0.0f) + UASSERT(r.Y == 0.0f) + UASSERT(r.Z >= 0.0f && r.Z < 360.0f) + } + // test the whole coordinate translation + for (float x = -720.f; x <= 720; x += 2.5) { + for (float y = -720.f; y <= 720; y += 2.5) { + for (float z = -720.f; z <= 720; z += 2.5) { + v3f r = wrapDegrees_0_360_v3f(v3f(x, y, z)); + UASSERT(r.X >= 0.0f && r.X < 360.0f) + UASSERT(r.Y >= 0.0f && r.Y < 360.0f) + UASSERT(r.Z >= 0.0f && r.Z < 360.0f) + } + } + } +} void TestUtilities::testLowercase() { @@ -180,7 +179,6 @@ void TestUtilities::testLowercase() UASSERT(lowercase("MINETEST-powa") == "minetest-powa"); } - void TestUtilities::testTrim() { UASSERT(trim("") == ""); @@ -189,7 +187,6 @@ void TestUtilities::testTrim() UASSERT(trim("\n \t\r \r\n\t\t ") == ""); } - void TestUtilities::testIsYes() { UASSERT(is_yes("YeS") == true); @@ -201,7 +198,6 @@ void TestUtilities::testIsYes() UASSERT(is_yes("2") == true); } - void TestUtilities::testRemoveStringEnd() { const char *ends[] = {"abc", "c", "bc", "", NULL}; @@ -211,21 +207,18 @@ void TestUtilities::testRemoveStringEnd() UASSERT(removeStringEnd("foo", ends) == ""); } - void TestUtilities::testUrlEncode() { - UASSERT(urlencode("\"Aardvarks lurk, OK?\"") - == "%22Aardvarks%20lurk%2C%20OK%3F%22"); + UASSERT(urlencode("\"Aardvarks lurk, OK?\"") == + "%22Aardvarks%20lurk%2C%20OK%3F%22"); } - void TestUtilities::testUrlDecode() { - UASSERT(urldecode("%22Aardvarks%20lurk%2C%20OK%3F%22") - == "\"Aardvarks lurk, OK?\""); + UASSERT(urldecode("%22Aardvarks%20lurk%2C%20OK%3F%22") == + "\"Aardvarks lurk, OK?\""); } - void TestUtilities::testPadString() { UASSERT(padStringRight("hello", 8) == "hello "); @@ -234,14 +227,13 @@ void TestUtilities::testPadString() void TestUtilities::testStartsWith() { UASSERT(str_starts_with(std::string(), std::string()) == true); - UASSERT(str_starts_with(std::string("the sharp pickaxe"), - std::string()) == true); - UASSERT(str_starts_with(std::string("the sharp pickaxe"), - std::string("the")) == true); - UASSERT(str_starts_with(std::string("the sharp pickaxe"), - std::string("The")) == false); - UASSERT(str_starts_with(std::string("the sharp pickaxe"), - std::string("The"), true) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), std::string()) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), std::string("the")) == + true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), std::string("The")) == + false); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), std::string("The"), + true) == true); UASSERT(str_starts_with(std::string("T"), std::string("The")) == false); } @@ -251,7 +243,6 @@ void TestUtilities::testStrEqual() UASSERT(str_equal(narrow_to_wide("ABC"), narrow_to_wide("abc"), true)); } - void TestUtilities::testStringTrim() { UASSERT(trim(" a") == "a"); @@ -260,14 +251,12 @@ void TestUtilities::testStringTrim() UASSERT(trim("") == ""); } - void TestUtilities::testStrToIntConversion() { UASSERT(mystoi("123", 0, 1000) == 123); UASSERT(mystoi("123", 0, 10) == 10); } - void TestUtilities::testStringReplace() { std::string test_str; @@ -279,7 +268,6 @@ void TestUtilities::testStringReplace() UASSERT(test_str == "This is a test"); } - void TestUtilities::testStringAllowed() { UASSERT(string_allowed("hello", "abcdefghijklmno") == true); @@ -303,45 +291,43 @@ void TestUtilities::testAsciiPrintableHelper() void TestUtilities::testUTF8() { UASSERT(wide_to_utf8(utf8_to_wide("")) == ""); - UASSERT(wide_to_utf8(utf8_to_wide("the shovel dug a crumbly node!")) - == "the shovel dug a crumbly node!"); + UASSERT(wide_to_utf8(utf8_to_wide("the shovel dug a crumbly node!")) == + "the shovel dug a crumbly node!"); } void TestUtilities::testRemoveEscapes() { - UASSERT(unescape_enriched<wchar_t>( - L"abc\x1bXdef") == L"abcdef"); - UASSERT(unescape_enriched<wchar_t>( - L"abc\x1b(escaped)def") == L"abcdef"); - UASSERT(unescape_enriched<wchar_t>( - L"abc\x1b((escaped with parenthesis\\))def") == L"abcdef"); - UASSERT(unescape_enriched<wchar_t>( - L"abc\x1b(incomplete") == L"abc"); - UASSERT(unescape_enriched<wchar_t>( - L"escape at the end\x1b") == L"escape at the end"); + UASSERT(unescape_enriched<wchar_t>(L"abc\x1bXdef") == L"abcdef"); + UASSERT(unescape_enriched<wchar_t>(L"abc\x1b(escaped)def") == L"abcdef"); + UASSERT(unescape_enriched<wchar_t>(L"abc\x1b((escaped with parenthesis\\))def") == + L"abcdef"); + UASSERT(unescape_enriched<wchar_t>(L"abc\x1b(incomplete") == L"abc"); + UASSERT(unescape_enriched<wchar_t>(L"escape at the end\x1b") == + L"escape at the end"); // Nested escapes not supported UASSERT(unescape_enriched<wchar_t>( - L"abc\x1b(outer \x1b(inner escape)escape)def") == L"abcescape)def"); + L"abc\x1b(outer \x1b(inner escape)escape)def") == + L"abcescape)def"); } void TestUtilities::testWrapRows() { - UASSERT(wrap_rows("12345678",4) == "1234\n5678"); + UASSERT(wrap_rows("12345678", 4) == "1234\n5678"); // test that wrap_rows doesn't wrap inside multibyte sequences { - const unsigned char s[] = { - 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x2f, - 0x6d, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, - 0x6e, 0x2f, 0x2e, 0x2e, 0}; + const unsigned char s[] = {0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, + 0x70, 0x74, 0x6f, 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, + 0xd1, 0x81, 0xd1, 0x82, 0x2f, 0x6d, 0x69, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, 0x6e, 0x2f, + 0x2e, 0x2e, 0}; std::string str((char *)s); UASSERT(utf8_to_wide(wrap_rows(str, 20)) != L"<invalid UTF-8 string>"); }; { - const unsigned char s[] = { - 0x74, 0x65, 0x73, 0x74, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, - 0xd1, 0x82, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, - 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0}; + const unsigned char s[] = {0x74, 0x65, 0x73, 0x74, 0x20, 0xd1, 0x82, 0xd0, + 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x20, 0xd1, 0x82, 0xd0, + 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x20, 0xd1, 0x82, 0xd0, + 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0}; std::string str((char *)s); UASSERT(utf8_to_wide(wrap_rows(str, 8)) != L"<invalid UTF-8 string>"); } @@ -360,7 +346,7 @@ void TestUtilities::testEnrichedString() // Green background, then white and yellow text str = L"\x1b(b@#0F0)Regular \x1b(c@#FF0)yellow"; UASSERT(str.getColors()[2] == 0xFFFFFFFF); - str.setDefaultColor(color); // Blue foreground + str.setDefaultColor(color); // Blue foreground UASSERT(str.getColors()[13] == 0xFFFFFF00); // Still yellow text UASSERT(str.getBackground() == 0xFF00FF00); // Green background } @@ -372,7 +358,6 @@ void TestUtilities::testIsNumber() UASSERT(is_number("123a") == false); } - void TestUtilities::testIsPowerOfTwo() { UASSERT(is_power_of_two(0) == false); @@ -416,7 +401,6 @@ void TestUtilities::testStringJoin() UASSERT(str_join(input, " and ") == "one and two and three"); } - static bool within(const f32 value1, const f32 value2, const f32 precision) { return std::fabs(value1 - value2) <= precision; @@ -424,17 +408,16 @@ static bool within(const f32 value1, const f32 value2, const f32 precision) static bool within(const v3f &v1, const v3f &v2, const f32 precision) { - return within(v1.X, v2.X, precision) && within(v1.Y, v2.Y, precision) - && within(v1.Z, v2.Z, precision); + return within(v1.X, v2.X, precision) && within(v1.Y, v2.Y, precision) && + within(v1.Z, v2.Z, precision); } -static bool within(const core::matrix4 &m1, const core::matrix4 &m2, - const f32 precision) +static bool within(const core::matrix4 &m1, const core::matrix4 &m2, const f32 precision) { const f32 *M1 = m1.pointer(); const f32 *M2 = m2.pointer(); for (int i = 0; i < 16; i++) - if (! within(M1[i], M2[i], precision)) + if (!within(M1[i], M2[i], precision)) return false; return true; } @@ -463,7 +446,7 @@ void TestUtilities::testEulerConversion() // Check that the radians version and the degrees version // produce the same results. Check also that the conversion // works both ways for these values. - v1 = v3f(M_PI/3.0, M_PI/5.0, M_PI/4.0); + v1 = v3f(M_PI / 3.0, M_PI / 5.0, M_PI / 4.0); v2 = v3f(60.0f, 36.0f, 45.0f); setPitchYawRollRad(m1, v1); setPitchYawRoll(m2, v2); @@ -523,7 +506,7 @@ void TestUtilities::testEulerConversion() v1 = v3f(90.00001f, 1.f, 1.f); setPitchYawRoll(m1, v1); v2 = getPitchYawRoll(m1); - //UASSERT(within(v1, v2, tolL)); // this is typically false + // UASSERT(within(v1, v2, tolL)); // this is typically false // ... however the rotation matrix is the same for both setPitchYawRoll(m2, v2); UASSERT(within(m1, m2, tolL)); |