Loading...
tests/xctests/magazine_large_tests.m /dev/null libmalloc-792.80.2
--- /dev/null
+++ libmalloc/libmalloc-792.80.2/tests/xctests/magazine_large_tests.m
@@ -0,0 +1,63 @@
+#import "internal.h"
+
+#import <XCTest/XCTest.h>
+
+#define XCTAssertNotNull(ptr) XCTAssertNotEqual(ptr, NULL)
+
+#if CONFIG_LARGE_CACHE
+
+@interface magazine_large_tests : XCTestCase {
+@private
+	malloc_zone_t *mzone;
+}
+@end
+
+@implementation magazine_large_tests
+
+- (void)setUp {
+	large_cache_enabled = true;
+	mzone = malloc_create_zone(0, 0);
+}
+
+- (void)tearDown {
+	if (mzone) {
+		malloc_destroy_zone(mzone);
+	}
+}
+
+- (size_t)minLargeAllocationSize {
+	size_t threshold;
+#if CONFIG_MEDIUM_ALLOCATOR
+	threshold = MEDIUM_LIMIT_THRESHOLD + 1;
+#else
+	threshold = SMALL_LIMIT_THRESHOLD + 1;
+#endif // CONFIG_MEDIUM_ALLOCATOR
+	return threshold;
+}
+
+- (void *)large_malloc:(size_t)size {
+	XCTAssertGreaterThanOrEqual(size, [self minLargeAllocationSize]);
+	return malloc_zone_malloc(mzone, size);
+}
+
+- (void)large_free:(void *)ptr {
+	malloc_zone_free(mzone, ptr);
+}
+
+- (void)testLargeMallocSucceeds {
+	XCTAssertNotNull([self large_malloc: [self minLargeAllocationSize]]);
+}
+
+- (void)testZoneDestruction {
+	// Allocate and free an entry onto death row
+	void *ptr = [self large_malloc: [self minLargeAllocationSize]];
+	XCTAssertNotNull(ptr);
+	[self large_free: ptr];
+
+	malloc_destroy_zone(mzone);
+	mzone = NULL;
+}
+
+@end
+
+#endif // CONFIG_LARGE_CACHE