Items in shared memory

This commit is contained in:
KimLS
2013-02-20 22:36:30 -08:00
parent 0115b18e67
commit 3e9c2a06a3
11 changed files with 496 additions and 332 deletions
+86
View File
@@ -38,6 +38,10 @@ public:
TEST_ADD(FixedMemoryHashTest::OverwriteRetrieveTest);
TEST_ADD(FixedMemoryHashTest::InsertAgainTest);
TEST_ADD(FixedMemoryHashTest::RetrieveAgainTest);
TEST_ADD(FixedMemoryHashTest::InsertBeginTest);
TEST_ADD(FixedMemoryHashTest::RetrieveBeginTest);
TEST_ADD(FixedMemoryHashTest::InsertEndTest);
TEST_ADD(FixedMemoryHashTest::RetrieveEndTest);
}
~FixedMemoryHashTest() {
delete[] data_;
@@ -142,6 +146,88 @@ public:
TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0);
TEST_ASSERT(item.ID == 1001);
}
void InsertBeginTest() {
EQEmu::FixedMemoryHashSet<Item_Struct> hash(data_, size_);
Item_Struct item;
memset(&item, 0, sizeof(item));
strcpy(item.Name, "Bronze Sword");
item.ID = 0;
hash.insert(0, item);
TEST_ASSERT(hash.exists(1000));
TEST_ASSERT(hash.exists(1001));
TEST_ASSERT(hash.exists(0));
TEST_ASSERT(hash.size() == 3);
TEST_ASSERT(hash.max_size() == 72000);
TEST_ASSERT(!hash.empty());
}
void RetrieveBeginTest() {
EQEmu::FixedMemoryHashSet<Item_Struct> hash(data_, size_);
TEST_ASSERT(hash.exists(1000));
TEST_ASSERT(hash.exists(1001));
TEST_ASSERT(hash.exists(0));
TEST_ASSERT(hash.size() == 3);
TEST_ASSERT(hash.max_size() == 72000);
TEST_ASSERT(!hash.empty());
Item_Struct item = hash[1000];
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
TEST_ASSERT(item.ID == 1000);
item = hash[1001];
TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0);
TEST_ASSERT(item.ID == 1001);
item = hash[0];
TEST_ASSERT(strcmp(item.Name, "Bronze Sword") == 0);
TEST_ASSERT(item.ID == 0);
}
void InsertEndTest() {
EQEmu::FixedMemoryHashSet<Item_Struct> hash(data_, size_);
Item_Struct item;
memset(&item, 0, sizeof(item));
strcpy(item.Name, "Jade Sword");
item.ID = 190000;
hash.insert(190000, item);
TEST_ASSERT(hash.exists(1000));
TEST_ASSERT(hash.exists(1001));
TEST_ASSERT(hash.exists(0));
TEST_ASSERT(hash.exists(190000));
TEST_ASSERT(hash.size() == 4);
TEST_ASSERT(hash.max_size() == 72000);
TEST_ASSERT(!hash.empty());
}
void RetrieveEndTest() {
EQEmu::FixedMemoryHashSet<Item_Struct> hash(data_, size_);
TEST_ASSERT(hash.exists(1000));
TEST_ASSERT(hash.exists(1001));
TEST_ASSERT(hash.exists(0));
TEST_ASSERT(hash.exists(190000));
TEST_ASSERT(hash.size() == 4);
TEST_ASSERT(hash.max_size() == 72000);
TEST_ASSERT(!hash.empty());
Item_Struct item = hash[1000];
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
TEST_ASSERT(item.ID == 1000);
item = hash[1001];
TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0);
TEST_ASSERT(item.ID == 1001);
item = hash[0];
TEST_ASSERT(strcmp(item.Name, "Bronze Sword") == 0);
TEST_ASSERT(item.ID == 0);
item = hash[190000];
TEST_ASSERT(strcmp(item.Name, "Jade Sword") == 0);
TEST_ASSERT(item.ID == 190000);
}
private:
uint8 *data_;
size_t size_;
+2 -10
View File
@@ -42,23 +42,15 @@
int main() {
try {
std::unique_ptr<Test::Output> output(new Test::HtmlOutput);
std::ofstream outfile("test_output.txt");
std::unique_ptr<Test::Output> output(new Test::TextOutput(Test::TextOutput::Verbose, outfile));
Test::Suite tests;
tests.add(std::auto_ptr<MemoryMappedFileTest>(new MemoryMappedFileTest()));
tests.add(std::auto_ptr<IPCMutexTest>(new IPCMutexTest()));
tests.add(std::auto_ptr<FixedMemoryHashTest>(new FixedMemoryHashTest()));
tests.run(*output, true);
std::ofstream outfile("tests.html");
Test::HtmlOutput* const html = dynamic_cast<Test::HtmlOutput*>(output.get());
if(html)
html->generate(outfile, true, "EQEmuTests");
outfile.close();
} catch(...) {
getchar();
return -1;
}
getchar();
return 0;
}