]> git.saurik.com Git - apple/objc4.git/blob - test/instanceSize.m
objc4-437.3.tar.gz
[apple/objc4.git] / test / instanceSize.m
1 #include "test.h"
2
3 #include <objc/runtime.h>
4
5
6 @interface Super { id isa; } @end
7 @implementation Super
8 +(void)initialize { }
9 +class { return self; }
10 +new { return class_createInstance(self, 0); }
11 -(void)dealloc { object_dispose(self); }
12 @end
13
14 @interface Sub1 : Super {
15 // id isa; // 0..4
16 BOOL b; // 4..5
17 }
18 @end
19
20 @implementation Sub1 @end
21
22 @interface Sub2 : Sub1 {
23 // id isa // 0..4 0..8
24 // BOOL b // 4..5 8..9
25 BOOL b2; // 5..6 9..10
26 id o; // 8..12 16..24
27 }
28 @end
29 @implementation Sub2 @end
30
31 @interface Sub3 : Sub1 {
32 // id isa; // 0..4 0..8
33 // BOOL b; // 4..5 8..9
34 id o; // 8..12 16..24
35 BOOL b2; // 12..13 24..25
36 }
37 @end
38 @implementation Sub3 @end
39
40 int main()
41 {
42 testassert(sizeof(id) == class_getInstanceSize([Super class]));
43 testassert(2*sizeof(id) == class_getInstanceSize([Sub1 class]));
44 testassert(3*sizeof(id) == class_getInstanceSize([Sub2 class]));
45 testassert(4*sizeof(id) == class_getInstanceSize([Sub3 class]));
46
47 id o;
48
49 o = [Super new];
50 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
51 [o dealloc];
52 o = [Sub1 new];
53 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
54 [o dealloc];
55 o = [Sub2 new];
56 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
57 [o dealloc];
58 o = [Sub3 new];
59 testassert(object_getIndexedIvars(o) == (char *)o + class_getInstanceSize(o->isa));
60 [o dealloc];
61
62 succeed(__FILE__);
63 }