From c439d784ac106b565f496bb95d9205bf93896b8b Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Sat, 1 Mar 2025 18:27:57 +0100 Subject: [PATCH] add unit tests for map block position encoding --- src/unittest/test_mapdatabase.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/unittest/test_mapdatabase.cpp b/src/unittest/test_mapdatabase.cpp index f206285a8..c6aa7d051 100644 --- a/src/unittest/test_mapdatabase.cpp +++ b/src/unittest/test_mapdatabase.cpp @@ -72,6 +72,7 @@ public: void testLoad(); void testList(int expect); void testRemove(); + void testPositionEncoding(); private: MapDatabaseProvider *provider = nullptr; @@ -90,6 +91,8 @@ void TestMapDatabase::runTests(IGameDef *gamedef) test_data.push_back(static_cast(c)); sanity_check(!test_data.empty()); + TEST(testPositionEncoding); + rawstream << "-------- Dummy" << std::endl; // We can't re-create this object since it would lose the data @@ -193,3 +196,31 @@ void TestMapDatabase::testRemove() // FIXME: this isn't working consistently, maybe later //UASSERT(!db->deleteBlock({1, 2, 4})); } + +void TestMapDatabase::testPositionEncoding() +{ + auto db = std::make_unique(); + + // Unit vectors and extremes + UASSERTEQ(s64, db->getBlockAsInteger({0, 0, 0}), 0) + UASSERTEQ(s64, db->getBlockAsInteger({1, 0, 0}), 1) + UASSERTEQ(s64, db->getBlockAsInteger({0, 1, 0}), 0x1000) + UASSERTEQ(s64, db->getBlockAsInteger({0, 0, 1}), 0x1000000) + UASSERTEQ(s64, db->getBlockAsInteger({-1, 0, 0}), -1) + UASSERTEQ(s64, db->getBlockAsInteger({0, -1, 0}), -0x1000) + UASSERTEQ(s64, db->getBlockAsInteger({0, 0, -1}), -0x1000000) + UASSERTEQ(s64, db->getBlockAsInteger({2047, 2047, 2047}), 0x7FF7FF7FF) + UASSERTEQ(s64, db->getBlockAsInteger({-2048, -2048, -2048}), -0x800800800) + UASSERTEQ(s64, db->getBlockAsInteger({-123, 456, -789}), -0x314e3807b) + + UASSERT(db->getIntegerAsBlock(0) == v3s16(0, 0, 0)) + UASSERT(db->getIntegerAsBlock(1) == v3s16(1, 0, 0)) + UASSERT(db->getIntegerAsBlock(0x1000) == v3s16(0, 1, 0)) + UASSERT(db->getIntegerAsBlock(0x1000000) == v3s16(0, 0, 1)) + UASSERT(db->getIntegerAsBlock(-1) == v3s16(-1, 0, 0)) + UASSERT(db->getIntegerAsBlock(-0x1000) == v3s16(0, -1, 0)) + UASSERT(db->getIntegerAsBlock(-0x1000000) == v3s16(0, 0, -1)) + UASSERT(db->getIntegerAsBlock(0x7FF7FF7FF) == v3s16(2047, 2047, 2047)) + UASSERT(db->getIntegerAsBlock(-0x800800800) == v3s16(-2048, -2048, -2048)) + UASSERT(db->getIntegerAsBlock(-0x314e3807b) == v3s16(-123, 456, -789)) +}