X-Git-Url: https://git.saurik.com/apple/objc4.git/blobdiff_plain/7c0e6487d7b67b6bf6c632300ee4b74e8950b051..7af964d1562d70f51a8e9aca24215ac3d83d0624:/test/instanceSize.m diff --git a/test/instanceSize.m b/test/instanceSize.m new file mode 100644 index 0000000..14e32e1 --- /dev/null +++ b/test/instanceSize.m @@ -0,0 +1,63 @@ +#include "test.h" + +#include + + +@interface Super { id isa; } @end +@implementation Super ++(void)initialize { } ++class { return self; } ++new { return class_createInstance(self, 0); } +-(void)dealloc { object_dispose(self); } +@end + +@interface Sub1 : Super { + // id isa; // 0..4 + BOOL b; // 4..5 +} +@end + +@implementation Sub1 @end + +@interface Sub2 : Sub1 { + // id isa // 0..4 0..8 + // BOOL b // 4..5 8..9 + BOOL b2; // 5..6 9..10 + id o; // 8..12 16..24 +} +@end +@implementation Sub2 @end + +@interface Sub3 : Sub1 { + // id isa; // 0..4 0..8 + // BOOL b; // 4..5 8..9 + id o; // 8..12 16..24 + BOOL b2; // 12..13 24..25 +} +@end +@implementation Sub3 @end + +int main() +{ + testassert(sizeof(id) == class_getInstanceSize([Super class])); + testassert(2*sizeof(id) == class_getInstanceSize([Sub1 class])); + testassert(3*sizeof(id) == class_getInstanceSize([Sub2 class])); + testassert(4*sizeof(id) == class_getInstanceSize([Sub3 class])); + + id o; + + o = [Super new]; + testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa)); + [o dealloc]; + o = [Sub1 new]; + testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa)); + [o dealloc]; + o = [Sub2 new]; + testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa)); + [o dealloc]; + o = [Sub3 new]; + testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa)); + [o dealloc]; + + succeed(__FILE__); +}