]> git.saurik.com Git - apple/objc4.git/blob - test/createInstance.m
objc4-437.tar.gz
[apple/objc4.git] / test / createInstance.m
1 #import <objc/runtime.h>
2 #import <objc/objc-auto.h>
3 #ifndef OBJC_NO_GC
4 #include <auto_zone.h>
5 #endif
6 #include "test.h"
7
8 @interface Super { @public id isa; } @end
9 @implementation Super
10 +(void) initialize { }
11 +(Class) class { return self; }
12 @end
13
14 @interface Sub : Super { int array[128]; } @end
15 @implementation Sub @end
16
17 int main()
18 {
19 Super *s;
20
21 s = class_createInstance([Super class], 0);
22 testassert(s);
23 testassert(s->isa == [Super class]);
24 testassert(malloc_size(s) >= class_getInstanceSize([Super class]));
25 if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s));
26
27 object_dispose(s);
28
29 s = class_createInstance([Sub class], 0);
30 testassert(s);
31 testassert(s->isa == [Sub class]);
32 testassert(malloc_size(s) >= class_getInstanceSize([Sub class]));
33 if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s));
34
35 object_dispose(s);
36
37 s = class_createInstance([Super class], 100);
38 testassert(s);
39 testassert(s->isa == [Super class]);
40 testassert(malloc_size(s) >= class_getInstanceSize([Super class]) + 100);
41 if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s));
42
43 object_dispose(s);
44
45 s = class_createInstance([Sub class], 100);
46 testassert(s);
47 testassert(s->isa == [Sub class]);
48 testassert(malloc_size(s) >= class_getInstanceSize([Sub class]) + 100);
49 if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s));
50
51 object_dispose(s);
52
53 s = class_createInstance(Nil, 0);
54 testassert(!s);
55
56 succeed(__FILE__);
57 }