ZoneTest.mm   [plain text]


//
//  ZoneTest.mm
//  auto
//
//  Created by Patrick Beard on 11/1/10.
//  Copyright 2010 Apple Inc. All rights reserved.
//

#import "Zone.h"
#import "BlackBoxTest.h"

using namespace Auto;

@interface ZoneTest : BlackBoxTest
@end

@implementation ZoneTest

- (void)performTest {
    Zone *zone = (Zone *)[self auto_zone];
    Thread &thread = zone->register_thread();
    
    void *large_block = zone->block_allocate(thread, 4 * allocate_quantum_large, AUTO_MEMORY_UNSCANNED, false, false);
    Large *large = zone->block_start_large(large_block);
    if (!large) {
        [self fail:@"Zone::block_start_large() failed."];
        [self testFinished];
        return;
    }
    
    bool in_large_bitmap = zone->in_large_bitmap(large_block); 
    bool in_large_memory = zone->in_large_memory(large_block); 
    if (!in_large_bitmap || !in_large_memory) {
        [self fail:@"large_block should be in large memory!"];
        [self testFinished];
        return;
    }
    
    void *non_block = displace(large_block, large->vm_size());
    Large *non_large = zone->block_start_large(non_block);
    if (non_large == large) {
        [self fail:@"non_block should NOT be part of large!"];
        [self testFinished];
        return;
    }
    
    [self setTestResult:PASSED message:@"zone tests passed."];
    [self testFinished];
}

@end