BlockTypePalette: Refactored for usage in both directions.
Improves index() lookup speeds and allows BlockTypePalette to be used in place of ProtocolBlockTypePalette.
This commit is contained in:
@@ -35,11 +35,12 @@ static void testBasic()
|
||||
TEST_EQUAL(pal.count(), 5);
|
||||
|
||||
// Check the entry() API:
|
||||
TEST_EQUAL(pal.entry(0), (std::make_pair<AString, BlockState>("testblock", BlockState())));
|
||||
TEST_EQUAL(pal.entry(1), (std::make_pair<AString, BlockState>("another", BlockState())));
|
||||
TEST_EQUAL(pal.entry(0), (std::make_pair<AString, BlockState>("testblock", BlockState())));
|
||||
TEST_EQUAL(pal.entry(1), (std::make_pair<AString, BlockState>("another", BlockState())));
|
||||
TEST_EQUAL(pal.entry(2), (std::make_pair<AString, BlockState>("multistate", BlockState(bs1)))); // make_pair requires a copy of the state
|
||||
TEST_EQUAL(pal.entry(3), (std::make_pair<AString, BlockState>("multistate", BlockState(bs2))));
|
||||
TEST_EQUAL(pal.entry(4), (std::make_pair<AString, BlockState>("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<UInt32, bool>(0, true)));
|
||||
TEST_EQUAL(pal1.maybeIndex("block2", BlockState()), (std::make_pair<UInt32, bool>(1, true)));
|
||||
TEST_EQUAL(pal1.maybeIndex("block3", BlockState()), (std::make_pair<UInt32, bool>(2, true)));
|
||||
@@ -76,47 +77,58 @@ static void testTransform()
|
||||
TEST_EQUAL(pal1.maybeIndex("block4", BlockState("key1", "value1")), (std::make_pair<UInt32, bool>(6, true)));
|
||||
TEST_EQUAL(pal1.maybeIndex("block6", BlockState("key1", "value1")), (std::make_pair<UInt32, bool>(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");
|
||||
LOGD("Testing the createTransformMapWithFallback API...");
|
||||
|
||||
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;
|
||||
}
|
||||
// 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"));
|
||||
|
||||
LOGD("BlockTypePaletteTest finished");
|
||||
return 0;
|
||||
// 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();
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user