/* * Copyright (c) 2008 * Jonathan Schleifer * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #import #import #import #import "OFObject.h" int main() { OFObject *obj = [OFObject new]; bool caught; void *p, *q, *r; /* Test freeing memory not allocated by obj */ puts("Freeing memory not allocated by object (should throw an " "exception)..."); caught = false; @try { [obj freeMem: (void*)123]; } @catch (OFMemNotPartOfObjException *e) { caught = true; puts("CAUGHT! Resuming..."); } if (!caught) { puts("NOT CAUGHT!"); return 1; } /* Test allocating memory */ puts("Allocating memory through object..."); p = [obj getMem: 4096]; puts("Allocated 4096 bytes."); /* Test freeing the just allocated memory */ puts("Freeing just allocated memory..."); [obj freeMem: p]; puts("Free'd."); /* It shouldn't be recognized as part of our obj anymore */ puts("Trying to free it again (should throw an exception)..."); caught = false; @try { [obj freeMem: p]; } @catch (OFMemNotPartOfObjException *e) { caught = true; puts("CAUGHT! Resuming..."); } if (!caught) { puts("NOT CAUGHT!"); return 1; } /* Test multiple memory chunks */ puts("Allocating 3 chunks of memory..."); p = [obj getMem: 4096]; q = [obj getMem: 4096]; r = [obj getMem: 4096]; puts("Allocated 3 * 4096 bytes."); /* Free them */ puts("Now freeing them..."); [obj freeMem: p]; [obj freeMem: q]; [obj freeMem: r]; puts("Freed them all."); /* Try to free again */ puts("Now trying to free them again..."); caught = false; @try { [obj freeMem: p]; } @catch (OFMemNotPartOfObjException *e) { caught = true; puts("CAUGHT! Resuming..."); } if (!caught) { puts("NOT CAUGHT!"); return 1; } caught = false; @try { [obj freeMem: q]; } @catch (OFMemNotPartOfObjException *e) { caught = true; puts("CAUGHT! Resuming..."); } if (!caught) { puts("NOT CAUGHT!"); return 1; } caught = false; @try { [obj freeMem: r]; } @catch (OFMemNotPartOfObjException *e) { caught = true; puts("CAUGHT! Resuming..."); } if (!caught) { puts("NOT CAUGHT!"); return 1; } puts("Got all 3!"); /* TODO: Test if freeing object frees all memory */ return 0; }