From 2de6b7537d37dff82afe5563704949e9d4131a52 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Sun, 1 Dec 2019 14:41:46 +0100 Subject: BlockTypePalette: Refactored for usage in both directions. Improves index() lookup speeds and allows BlockTypePalette to be used in place of ProtocolBlockTypePalette. --- tests/BlockTypeRegistry/BlockTypePaletteTest.cpp | 108 +++++++++++++---------- 1 file changed, 60 insertions(+), 48 deletions(-) (limited to 'tests/BlockTypeRegistry') diff --git a/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp b/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp index ef79d8927..1337c7dc3 100644 --- a/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp +++ b/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp @@ -35,11 +35,12 @@ static void testBasic() TEST_EQUAL(pal.count(), 5); // Check the entry() API: - TEST_EQUAL(pal.entry(0), (std::make_pair("testblock", BlockState()))); - TEST_EQUAL(pal.entry(1), (std::make_pair("another", BlockState()))); + TEST_EQUAL(pal.entry(0), (std::make_pair("testblock", BlockState()))); + TEST_EQUAL(pal.entry(1), (std::make_pair("another", BlockState()))); TEST_EQUAL(pal.entry(2), (std::make_pair("multistate", BlockState(bs1)))); // make_pair requires a copy of the state TEST_EQUAL(pal.entry(3), (std::make_pair("multistate", BlockState(bs2)))); TEST_EQUAL(pal.entry(4), (std::make_pair("multistate", BlockState(bs3)))); + TEST_THROWS(pal.entry(5), BlockTypePalette::NoSuchIndexException); } @@ -47,26 +48,26 @@ static void testBasic() /** Tests creating the transform map between two palettes. */ -static void testTransform() +static void testTransformAddMissing() { - LOGD("Testing the createTransformMap API..."); + LOGD("Testing the createTransformMapAddMissing API..."); // Create two palettes with some overlap: BlockTypePalette pal1, pal2; - pal1.index("block1", BlockState()); - pal1.index("block2", BlockState()); - pal1.index("block3", BlockState()); - pal1.index("block4", BlockState()); - pal1.index("block5", BlockState("key1", "value1")); - pal2.index("block0", BlockState()); - pal2.index("block2", BlockState()); // overlap - pal2.index("block3", BlockState()); // overlap - pal2.index("block4", BlockState("key1", "value1")); - pal2.index("block5", BlockState("key1", "value1")); // overlap - pal2.index("block6", BlockState("key1", "value1")); + /* 0 */ pal1.index("block1", BlockState()); + /* 1 */ pal1.index("block2", BlockState()); + /* 2 */ pal1.index("block3", BlockState()); + /* 3 */ pal1.index("block4", BlockState()); + /* 4 */ pal1.index("block5", BlockState("key1", "value1")); + /* 0 */ pal2.index("block0", BlockState()); + /* 1 */ pal2.index("block2", BlockState()); // overlap + /* 2 */ pal2.index("block4", BlockState()); // overlap + /* 3 */ pal2.index("block4", BlockState("key1", "value1")); + /* 4 */ pal2.index("block5", BlockState("key1", "value1")); // overlap + /* 5 */ pal2.index("block6", BlockState("key1", "value1")); // Check the transform map: - auto trans = pal1.createTransformMap(pal2); + auto trans = pal1.createTransformMapAddMissing(pal2); TEST_EQUAL(pal1.maybeIndex("block1", BlockState()), (std::make_pair(0, true))); TEST_EQUAL(pal1.maybeIndex("block2", BlockState()), (std::make_pair(1, true))); TEST_EQUAL(pal1.maybeIndex("block3", BlockState()), (std::make_pair(2, true))); @@ -76,47 +77,58 @@ static void testTransform() TEST_EQUAL(pal1.maybeIndex("block4", BlockState("key1", "value1")), (std::make_pair(6, true))); TEST_EQUAL(pal1.maybeIndex("block6", BlockState("key1", "value1")), (std::make_pair(7, true))); TEST_EQUAL(trans.size(), 6); - TEST_EQUAL(trans[0], 5); - TEST_EQUAL(trans[1], 1); - TEST_EQUAL(trans[2], 2); - TEST_EQUAL(trans[3], 6); - TEST_EQUAL(trans[4], 4); - TEST_EQUAL(trans[5], 7); + TEST_EQUAL(trans[0], 5); // Added + TEST_EQUAL(trans[1], 1); // Mapped + TEST_EQUAL(trans[2], 3); // Mapped + TEST_EQUAL(trans[3], 6); // Added + TEST_EQUAL(trans[4], 4); // Mapped + TEST_EQUAL(trans[5], 7); // Added } -int main() +/** Tests creating the transform map between two palettes, with fallback. */ +static void testTransformWithFallback() { - LOGD("BlockTypePaletteTest started"); - - try - { - testBasic(); - testTransform(); - } - catch (const TestException & exc) - { - LOGERROR("BlockTypePaletteTest has failed, an exception was thrown: %s", exc.mMessage.c_str()); - return 1; - } - catch (const std::exception & exc) - { - LOGERROR("BlockTypePaletteTest has failed, an exception was thrown: %s", exc.what()); - return 1; - } - catch (...) - { - LOGERROR("BlockTypePaletteTest has failed, an unhandled exception was thrown."); - return 1; - } - - LOGD("BlockTypePaletteTest finished"); - return 0; + LOGD("Testing the createTransformMapWithFallback API..."); + + // Create two palettes with some overlap: + BlockTypePalette pal1, pal2; + /* 0 */ pal1.index("block1", BlockState()); + /* 1 */ pal1.index("block2", BlockState()); + /* 2 */ pal1.index("block3", BlockState()); + /* 3 */ pal1.index("block4", BlockState()); + /* 4 */ pal1.index("block5", BlockState("key1", "value1")); + /* 0 */ pal2.index("block0", BlockState()); + /* 1 */ pal2.index("block2", BlockState()); // overlap + /* 2 */ pal2.index("block4", BlockState()); // overlap + /* 3 */ pal2.index("block4", BlockState("key1", "value1")); + /* 4 */ pal2.index("block5", BlockState("key1", "value1")); // overlap + /* 5 */ pal2.index("block6", BlockState("key1", "value1")); + + // Check the transform map: + auto trans = pal1.createTransformMapWithFallback(pal2, 0); + TEST_EQUAL(trans.size(), 6); + TEST_EQUAL(trans[0], 0); // Fallback + TEST_EQUAL(trans[1], 1); // Mapped + TEST_EQUAL(trans[2], 3); // Mapped + TEST_EQUAL(trans[3], 0); // Fallback + TEST_EQUAL(trans[4], 4); // Mapped + TEST_EQUAL(trans[5], 0); // Fallback } + +IMPLEMENT_TEST_MAIN("BlockTypePalette", + testBasic(); + testTransformAddMissing(); + testTransformWithFallback(); +) + + + + -- cgit v1.2.3