Allocators Testing Added. Pull and Chunk allocators updates.
This commit is contained in:
parent
4a2ab6f5d0
commit
9e5ac1e975
30 changed files with 704 additions and 701 deletions
|
|
@ -9,11 +9,12 @@ using namespace tp;
|
|||
CallStackCapture* tp::gCSCapture = nullptr;
|
||||
|
||||
void initializeCallStackCapture() {
|
||||
gCSCapture = new CallStackCapture();
|
||||
gCSCapture = new (malloc(sizeof(CallStackCapture))) CallStackCapture();
|
||||
}
|
||||
|
||||
void deinitializeCallStackCapture() {
|
||||
delete gCSCapture;
|
||||
gCSCapture->~CallStackCapture();
|
||||
free(gCSCapture);
|
||||
}
|
||||
|
||||
ualni CallStackCapture::CallStack::getDepth() const {
|
||||
|
|
@ -198,6 +199,21 @@ void CallStackCapture::platformWriteDebugSymbols(FramePointer frame, DebugSymbol
|
|||
free(symbolsArray);
|
||||
}
|
||||
|
||||
void CallStackCapture::printSnapshot(const CallStack* snapshot) {
|
||||
printf("CallStack: \n");
|
||||
for (auto frame : *snapshot) {
|
||||
auto symbols = gCSCapture->getSymbols(frame.getFrame());
|
||||
printf(" %s ----- %s:%llu\n", symbols->getFunc(), symbols->getFile(), symbols->getLine());
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
void CallStackCapture::logLeaks() {
|
||||
for (auto cs : *this) {
|
||||
printSnapshot(cs.getCallStack());
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
void CallStackCapture::platformWriteStackTrace(CallStack* stack) { stack->frames[0] = 0; }
|
||||
void CallStackCapture::platformWriteDebugSymbols(FramePointer frame, DebugSymbols* out) {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ Testing tp::gTesting;
|
|||
|
||||
void Testing::startTest(const char* name) {
|
||||
MODULE_SANITY_CHECK(gModuleUtils)
|
||||
mCurrent->mSubTests.pushBack(new TestingNode{ {}, {}, name, mCurrent });
|
||||
auto newNode = new (malloc(sizeof(TestingNode))) TestingNode{ {}, {}, name, mCurrent };
|
||||
mCurrent->mSubTests.pushBack(newNode);
|
||||
mCurrent = mCurrent->mSubTests.last()->data;
|
||||
}
|
||||
|
||||
|
|
@ -76,6 +77,7 @@ void Testing::TestingNode::report(const char* path) const {
|
|||
|
||||
Testing::TestingNode::~TestingNode() {
|
||||
for (const auto& child : mSubTests) {
|
||||
delete child.data();
|
||||
child.data()->~TestingNode();
|
||||
free(child.data());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@
|
|||
void initializeCallStackCapture();
|
||||
void deinitializeCallStackCapture();
|
||||
|
||||
static bool initialize(const tp::ModuleManifest* self) {
|
||||
static bool initialize(const tp::ModuleManifest*) {
|
||||
initializeCallStackCapture();
|
||||
return true;
|
||||
}
|
||||
|
||||
static void deinitialize(const tp::ModuleManifest* self) {
|
||||
static void deinitialize(const tp::ModuleManifest*) {
|
||||
deinitializeCallStackCapture();
|
||||
tp::gTesting.reportState();
|
||||
if (tp::gTesting.hasFailed()) { exit(1); }
|
||||
|
|
@ -26,40 +26,40 @@ namespace tp {
|
|||
static ModuleManifest* sModuleUtilsDeps[] = { &gModuleContainers, nullptr };
|
||||
ModuleManifest gModuleUtils = ModuleManifest("Utils", initialize, deinitialize, sModuleUtilsDeps);
|
||||
|
||||
void memsetv(void* p, uhalni bytesize, uint1 val) {
|
||||
void memSetVal(void* p, uhalni byteSize, uint1 val) {
|
||||
MODULE_SANITY_CHECK(gModuleBase)
|
||||
|
||||
alni alignedval = 0;
|
||||
for (ualni idx = 0; idx < sizeof(alni); idx++) {
|
||||
((uint1*) &alignedval)[idx] = val;
|
||||
alni alignedVal = val;
|
||||
alignedVal = (alignedVal << 8) | alignedVal;
|
||||
alignedVal = (alignedVal << 16) | alignedVal;
|
||||
alignedVal = (alignedVal << 32) | alignedVal;
|
||||
|
||||
ualni alignedLen = byteSize / sizeof(alni);
|
||||
for (ualni idx = 0; idx < alignedLen; idx++) {
|
||||
((alni*) p)[idx] = alignedVal;
|
||||
}
|
||||
|
||||
ualni alignedlen = bytesize / sizeof(alni);
|
||||
for (ualni idx = 0; idx < alignedlen; idx++) {
|
||||
((alni*) p)[idx] = alignedval;
|
||||
}
|
||||
|
||||
ualni unalignedlen = bytesize - (alignedlen * sizeof(alni));
|
||||
for (ualni idx = 0; idx < unalignedlen; idx++) {
|
||||
((uint1*) p)[bytesize - idx - 1] = val;
|
||||
ualni unalignedLen = byteSize - (alignedLen * sizeof(alni));
|
||||
for (ualni idx = 0; idx < unalignedLen; idx++) {
|
||||
((uint1*) p)[byteSize - idx - 1] = val;
|
||||
}
|
||||
}
|
||||
|
||||
void memcp(void* left, const void* right, uhalni len) {
|
||||
void memCopy(void* left, const void* right, uhalni len) {
|
||||
MODULE_SANITY_CHECK(gModuleBase)
|
||||
|
||||
ualni alignedlen = len / sizeof(alni);
|
||||
for (ualni idx = 0; idx < alignedlen; idx++) {
|
||||
ualni alignedLen = len / sizeof(alni);
|
||||
for (ualni idx = 0; idx < alignedLen; idx++) {
|
||||
((alni*) left)[idx] = ((alni*) right)[idx];
|
||||
}
|
||||
|
||||
ualni unalignedlen = len - (alignedlen * sizeof(alni));
|
||||
for (ualni idx = 0; idx < unalignedlen; idx++) {
|
||||
ualni unalignedLen = len - (alignedLen * sizeof(alni));
|
||||
for (ualni idx = 0; idx < unalignedLen; idx++) {
|
||||
((uint1*) left)[len - idx - 1] = ((uint1*) right)[len - idx - 1];
|
||||
}
|
||||
}
|
||||
|
||||
int1 memecomp(const void* left, const void* right, uhalni len) {
|
||||
int1 memCompare(const void* left, const void* right, uhalni len) {
|
||||
MODULE_SANITY_CHECK(gModuleBase)
|
||||
if (!len) return 0;
|
||||
|
||||
|
|
@ -87,7 +87,41 @@ namespace tp {
|
|||
return 0;
|
||||
}
|
||||
|
||||
alnf randf() {
|
||||
|
||||
int1 memCompareVal(const void* left, uhalni len, uint1 val) {
|
||||
MODULE_SANITY_CHECK(gModuleBase)
|
||||
if (!len) return 0;
|
||||
|
||||
alni valAligned = val;
|
||||
valAligned = (valAligned << 8) | valAligned;
|
||||
valAligned = (valAligned << 16) | valAligned;
|
||||
valAligned = (valAligned << 32) | valAligned;
|
||||
|
||||
ualni alignedLength = len / sizeof(alni);
|
||||
for (ualni idx = 0; idx < alignedLength; idx++) {
|
||||
if (((alni*) left)[idx] == valAligned) {
|
||||
continue;
|
||||
}
|
||||
if (((alni*) left)[idx] > valAligned) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
ualni unalignedLength = len - (alignedLength * sizeof(alni));
|
||||
for (ualni idx = 0; idx < unalignedLength; idx++) {
|
||||
if (((uint1*) left)[len - idx - 1] == val) {
|
||||
continue;
|
||||
}
|
||||
if (((uint1*) left)[len - idx - 1] > val) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
alnf randomFloat() {
|
||||
alnf r = static_cast<alnf>(std::rand()) / static_cast<alnf>(RAND_MAX);
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@ namespace tp {
|
|||
[[nodiscard]] const CallStack* getSnapshot();
|
||||
const DebugSymbols* getSymbols(FramePointer fp);
|
||||
|
||||
static void printSnapshot(const CallStack* snapshot);
|
||||
void logLeaks();
|
||||
|
||||
public:
|
||||
|
||||
template<class Saver>
|
||||
|
|
|
|||
|
|
@ -9,13 +9,14 @@ namespace tp {
|
|||
|
||||
extern ModuleManifest gModuleUtils;
|
||||
|
||||
void memsetv(void* p, uhalni bytesize, uint1 val);
|
||||
void memcp(void* left, const void* right, uhalni len);
|
||||
int1 memequal(const void* left, const void* right, uhalni len);
|
||||
void memSetVal(void* p, uhalni byteSize, uint1 val);
|
||||
void memCopy(void* left, const void* right, uhalni len);
|
||||
int1 memCompare(const void* left, const void* right, uhalni len);
|
||||
int1 memCompareVal(const void* left, uhalni len, uint1 val);
|
||||
}
|
||||
|
||||
namespace tp {
|
||||
[[nodiscard]] alnf randf();
|
||||
[[nodiscard]] alnf randomFloat();
|
||||
}
|
||||
|
||||
namespace tp {
|
||||
|
|
@ -73,6 +74,7 @@ namespace tp {
|
|||
|
||||
tType idxBegin() const { return mBegin; }
|
||||
tType idxEnd() const { return mEnd; }
|
||||
tType idxDiff() const { return mEnd - mBegin; }
|
||||
Iterator begin() { return Iterator(mBegin); }
|
||||
Iterator end() { return Iterator(mEnd); }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -47,9 +47,7 @@ void root() {
|
|||
TEST_DEF(Debugging) {
|
||||
root();
|
||||
|
||||
for (auto cs : *gCSCapture) {
|
||||
printSnapshot(cs.getCallStack());
|
||||
}
|
||||
gCSCapture->logLeaks();
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue