int main (int /*argc*/, char** /*argv*/) { RcInitFile& rc = RcInitFile::getDefaultInstance(); LogFile& dbglogfile = LogFile::getDefaultInstance(); dbglogfile.setVerbosity(); int diff = 0; // Parse the test config file if (rc.parseFile("gnashrc")) { runtest.pass ("rc.parseFile()"); } else { runtest.fail ("rc.parseFile()"); } // If we don't have support for mallinfo(), this code is useless #if HAVE_MALLINFO Memory mem; mem.startStats(); mem.addStats(__LINE__); // take a sample mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); if (mem.diffStats() == 0) { runtest.pass("No allocations yet"); } else { runtest.fail("No allocations yet"); } Memory m1; mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); // cerr << "Memory::Memory: " << diff << endl; if ((diff >= 8) || (diff <= 16)) { runtest.pass("Memory::Memory"); } else { runtest.fail("Memory::Memory"); } if (mem.diffStamp() > 0) { runtest.pass("Memory::diffStamp()"); } else { runtest.fail("Memory::diffStamp()"); } if (mem.diffStats() > 0) { runtest.pass("Memory::diffStats()"); } else { runtest.fail("Memory::diffStats()"); } char *x = new char[120]; mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); // cerr << "Buffer allocation: " << diff << endl; if ((diff >= 104) && (diff <= 136)) { runtest.pass("Buffer allocation"); } else { runtest.fail("Buffer allocation"); } vector<string> sv; sv.push_back("Hello World"); mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); // cerr << "First string allocated: " << diff << endl; if ((diff >= 40) && (diff <= 48)) { runtest.pass("First string allocated"); } else { runtest.fail("First string allocated"); } sv.push_back("Aloha"); delete x; mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); // cerr << "Second string allocated: " << diff << endl; if ((diff >= -104) && (diff <= -96)) { runtest.pass("Second string allocated"); } else { runtest.fail("Second string allocated"); } sv.push_back("Guten Tag"); mem.addStats(__LINE__); // take a sample diff = mem.diffStats(); // cerr << "Third string allocated: " << diff << endl; if ((diff >= 40) && (diff <= 48)){ runtest.pass("Third string allocated"); } else { runtest.fail("Third string allocated"); } mem.startCheckpoint(); test_leak(); if (mem.endCheckpoint()) { runtest.fail("leak"); } else { runtest.pass("leak"); } mem.addStats(__LINE__); // take a sample if (mem.diffStats() == 32) { runtest.pass("test_leak"); } else { runtest.fail("test_leak"); } mem.startCheckpoint(); test_noleak(); mem.addStats(__LINE__); // take a sample if (mem.endCheckpoint()) { runtest.pass("noleak"); } else { runtest.fail("noleak"); } diff = mem.diffStats(); if ((diff >= 0) && (diff <= 8)) { runtest.pass("test_noleak"); } else { runtest.fail("test_noleak"); } mem.endStats(); // mem.dump(); mem.analyze(); #else runtest.untested("No support for mallinfo()"); #endif // end of HAVE_MALLINFO }