You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.6 KiB
C++
75 lines
1.6 KiB
C++
|
1 month ago
|
#include <cstdlib>
|
||
|
|
#include <string>
|
||
|
|
#include <chrono>
|
||
|
|
|
||
|
|
#include "clipper2/clipper.h"
|
||
|
|
|
||
|
|
using namespace Clipper2Lib;
|
||
|
|
|
||
|
|
const int display_width = 800, display_height = 600;
|
||
|
|
|
||
|
|
void DoMemoryLeakTest();
|
||
|
|
Path64 MakeRandomPoly(int width, int height, unsigned vertCnt);
|
||
|
|
void System(const std::string &filename);
|
||
|
|
|
||
|
|
int main()
|
||
|
|
{
|
||
|
|
std::cout.imbue(std::locale(""));
|
||
|
|
srand((unsigned)time(0));
|
||
|
|
DoMemoryLeakTest();
|
||
|
|
|
||
|
|
std::cout << std::endl;
|
||
|
|
//#ifdef _DEBUG
|
||
|
|
std::string s;
|
||
|
|
std::cout << "Press Enter to continue" << std::endl;
|
||
|
|
std::getline(std::cin, s);
|
||
|
|
//#endif
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
inline Path64 MakeRandomPoly(int width, int height, unsigned vertCnt)
|
||
|
|
{
|
||
|
|
Path64 result;
|
||
|
|
result.reserve(vertCnt);
|
||
|
|
for (unsigned i = 0; i < vertCnt; ++i)
|
||
|
|
result.push_back(Point64(rand() % width, rand() % height));
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
void DoMemoryLeakTest()
|
||
|
|
{
|
||
|
|
#ifdef _WIN32
|
||
|
|
int edge_cnt = 1000;
|
||
|
|
|
||
|
|
Paths64 subject, clip;
|
||
|
|
subject.push_back(MakeRandomPoly(800, 600, edge_cnt));
|
||
|
|
clip.push_back(MakeRandomPoly(800, 600, edge_cnt));
|
||
|
|
|
||
|
|
_CrtMemState sOld {}, sNew {}, sDiff {};
|
||
|
|
_CrtMemCheckpoint(&sOld); //take a snapshot
|
||
|
|
{
|
||
|
|
Paths64 solution = Intersect(subject, clip, FillRule::NonZero);
|
||
|
|
}
|
||
|
|
_CrtMemCheckpoint(&sNew); //take another snapshot (outside code block)
|
||
|
|
if (_CrtMemDifference(&sDiff, &sOld, &sNew)) // check for a difference
|
||
|
|
{
|
||
|
|
std::cout << std::endl << "Memory leaks!" << std::endl;
|
||
|
|
//_CrtMemDumpStatistics(&sDiff);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
std::cout << std::endl << "No memory leaks detected :)" << std::endl << std::endl;
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
void System(const std::string &filename)
|
||
|
|
{
|
||
|
|
#ifdef _WIN32
|
||
|
|
system(filename.c_str());
|
||
|
|
#else
|
||
|
|
system(("firefox " + filename).c_str());
|
||
|
|
#endif
|
||
|
|
}
|