summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/main-override.cpp67
-rw-r--r--test/test-api.c10
2 files changed, 42 insertions, 35 deletions
diff --git a/test/main-override.cpp b/test/main-override.cpp
index 5fe3f9a..e1795ec 100644
--- a/test/main-override.cpp
+++ b/test/main-override.cpp
@@ -26,14 +26,15 @@ static void msleep(unsigned long msecs) { Sleep(msecs); }
static void msleep(unsigned long msecs) { usleep(msecs * 1000UL); }
#endif
-void heap_thread_free_large(); // issue #221
-void heap_no_delete(); // issue #202
-void heap_late_free(); // issue #204
-void padding_shrink(); // issue #209
-void various_tests();
-void test_mt_shutdown();
-void fail_aslr(); // issue #372
-void tsan_numa_test(); // issue #414
+static void heap_thread_free_large(); // issue #221
+static void heap_no_delete(); // issue #202
+static void heap_late_free(); // issue #204
+static void padding_shrink(); // issue #209
+static void various_tests();
+static void test_mt_shutdown();
+static void fail_aslr(); // issue #372
+static void tsan_numa_test(); // issue #414
+static void strdup_test(); // issue #445
int main() {
mi_stats_reset(); // ignore earlier allocations
@@ -43,6 +44,7 @@ int main() {
padding_shrink();
various_tests();
tsan_numa_test();
+ strdup_test();
//test_mt_shutdown();
//fail_aslr();
@@ -66,7 +68,7 @@ public:
};
-void various_tests() {
+static void various_tests() {
atexit(free_p);
void* p1 = malloc(78);
void* p2 = mi_malloc_aligned(16, 24);
@@ -74,18 +76,13 @@ void various_tests() {
p1 = malloc(8);
char* s = mi_strdup("hello\n");
- //char* s = _strdup("hello\n");
- //char* buf = NULL;
- //size_t len;
- //_dupenv_s(&buf,&len,"MIMALLOC_VERBOSE");
- //mi_free(buf);
-
mi_free(p2);
p2 = malloc(16);
p1 = realloc(p1, 32);
free(p1);
free(p2);
mi_free(s);
+
Test* t = new Test(42);
delete t;
t = new (std::nothrow) Test(42);
@@ -109,7 +106,7 @@ public:
static Static s = Static();
-bool test_stl_allocator1() {
+static bool test_stl_allocator1() {
std::vector<int, mi_stl_allocator<int> > vec;
vec.push_back(1);
vec.pop_back();
@@ -118,38 +115,48 @@ bool test_stl_allocator1() {
struct some_struct { int i; int j; double z; };
-bool test_stl_allocator2() {
+static bool test_stl_allocator2() {
std::vector<some_struct, mi_stl_allocator<some_struct> > vec;
vec.push_back(some_struct());
vec.pop_back();
return vec.size() == 0;
}
-
+// issue 445
+static void strdup_test() {
+#ifdef _MSC_VER
+ char* s = _strdup("hello\n");
+ char* buf = NULL;
+ size_t len;
+ _dupenv_s(&buf, &len, "MIMALLOC_VERBOSE");
+ mi_free(buf);
+ mi_free(s);
+#endif
+}
// Issue #202
-void heap_no_delete_worker() {
+static void heap_no_delete_worker() {
mi_heap_t* heap = mi_heap_new();
void* q = mi_heap_malloc(heap, 1024);
// mi_heap_delete(heap); // uncomment to prevent assertion
}
-void heap_no_delete() {
+static void heap_no_delete() {
auto t1 = std::thread(heap_no_delete_worker);
t1.join();
}
// Issue #204
-volatile void* global_p;
+static volatile void* global_p;
-void t1main() {
+static void t1main() {
mi_heap_t* heap = mi_heap_new();
global_p = mi_heap_malloc(heap, 1024);
mi_heap_delete(heap);
}
-void heap_late_free() {
+static void heap_late_free() {
auto t1 = std::thread(t1main);
msleep(2000);
@@ -166,7 +173,7 @@ static void alloc0(/* void* arg */)
shared_p = mi_malloc(8);
}
-void padding_shrink(void)
+static void padding_shrink(void)
{
auto t1 = std::thread(alloc0);
t1.join();
@@ -175,11 +182,11 @@ void padding_shrink(void)
// Issue #221
-void heap_thread_free_large_worker() {
+static void heap_thread_free_large_worker() {
mi_free(shared_p);
}
-void heap_thread_free_large() {
+static void heap_thread_free_large() {
for (int i = 0; i < 100; i++) {
shared_p = mi_malloc_aligned(2*1024*1024 + 1, 8);
auto t1 = std::thread(heap_thread_free_large_worker);
@@ -189,7 +196,7 @@ void heap_thread_free_large() {
-void test_mt_shutdown()
+static void test_mt_shutdown()
{
const int threads = 5;
std::vector< std::future< std::vector< char* > > > ts;
@@ -214,7 +221,7 @@ void test_mt_shutdown()
}
// issue #372
-void fail_aslr() {
+static void fail_aslr() {
size_t sz = (4ULL << 40); // 4TiB
void* p = malloc(sz);
printf("pointer p: %p: area up to %p\n", p, (uint8_t*)p + sz);
@@ -222,12 +229,12 @@ void fail_aslr() {
}
// issues #414
-void dummy_worker() {
+static void dummy_worker() {
void* p = mi_malloc(0);
mi_free(p);
}
-void tsan_numa_test() {
+static void tsan_numa_test() {
auto t1 = std::thread(dummy_worker);
dummy_worker();
t1.join();
diff --git a/test/test-api.c b/test/test-api.c
index 739b1d1..55c8043 100644
--- a/test/test-api.c
+++ b/test/test-api.c
@@ -64,15 +64,15 @@ static int failed = 0;
// ---------------------------------------------------------------------------
// Test functions
// ---------------------------------------------------------------------------
-bool test_heap1();
-bool test_heap2();
-bool test_stl_allocator1();
-bool test_stl_allocator2();
+bool test_heap1(void);
+bool test_heap2(void);
+bool test_stl_allocator1(void);
+bool test_stl_allocator2(void);
// ---------------------------------------------------------------------------
// Main testing
// ---------------------------------------------------------------------------
-int main() {
+int main(void) {
mi_option_disable(mi_option_verbose);
// ---------------------------------------------------