1 // RUN: %llvmgxx -S %s -o - | FileCheck %s
2 // <rdar://problem/9402870>
4 typedef struct __TestResult TestResult;
5 typedef struct __TestResult* TestResultRef;
7 typedef struct __TestImplement TestImplement;
8 typedef struct __TestImplement* TestImplementRef;
10 typedef char*(*TestNameFunction)(void*);
11 typedef void(*TestRunFunction)(void*,TestResult*);
12 typedef int(*TestCountTestCasesFunction)(void*);
14 struct __TestImplement {
15 TestNameFunction name;
17 TestCountTestCasesFunction countTestCases;
20 typedef struct __Test Test;
21 typedef struct __Test* TestRef;
27 typedef struct __TestCase TestCase;
28 typedef struct __TestCase* TestCaseRef;
34 void(*tearDown)(void);
38 extern const TestImplement TestCaseImplement;
40 typedef struct __TestFixture TestFixture;
41 typedef struct __TestFixture* TestFixtureRef;
43 struct __TestFixture {
48 typedef struct __TestCaller TestCaller;
49 typedef struct __TestCaller* TestCallerRef;
55 void(*tearDown)(void);
57 TestFixture *fixtuers;
60 extern const TestImplement TestCallerImplement;
63 void PassToFunction(const TestImplement*);
65 const char* TestCaller_name(TestCaller* self) {
69 void TestCaller_run(TestCaller* self,TestResult* result) {
70 TestCase cs = { (TestImplement*)&TestCaseImplement, 0, 0, 0, 0, };
72 cs.setUp = self->setUp;
73 cs.tearDown = self->tearDown;
74 for (i=0; i<self->numberOfFixtuers; i++) {
75 cs.name = self->fixtuers[i].name;
76 cs.runTest = self->fixtuers[i].test;
77 ((Test*)(void *)&cs)->isa->run((void *)&cs,result);
81 int TestCaller_countTestCases(TestCaller* self) {
82 PassToFunction(&TestCallerImplement);
83 return self->numberOfFixtuers;
86 // CHECK: @_ZZ14TestCaller_runP12__TestCallerP12__TestResultE3C.0 = internal unnamed_addr constant
87 // CHECK-NOT: @TestCaseImplement = external unnamed_addr constant %struct.TestImplement
88 // CHECK: @TestCaseImplement = external constant %struct.TestImplement
89 const TestImplement TestCallerImplement = {
90 (TestNameFunction)TestCaller_name,
91 (TestRunFunction)TestCaller_run,
92 (TestCountTestCasesFunction)TestCaller_countTestCases,