mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
76dd0de6d5
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132504 91177308-0d34-0410-b5e6-96231b3b80d8
94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
// RUN: %llvmgxx -S %s -o - | FileCheck %s
|
|
// <rdar://problem/9402870>
|
|
extern "C" {
|
|
typedef struct __TestResult TestResult;
|
|
typedef struct __TestResult* TestResultRef;
|
|
|
|
typedef struct __TestImplement TestImplement;
|
|
typedef struct __TestImplement* TestImplementRef;
|
|
|
|
typedef char*(*TestNameFunction)(void*);
|
|
typedef void(*TestRunFunction)(void*,TestResult*);
|
|
typedef int(*TestCountTestCasesFunction)(void*);
|
|
|
|
struct __TestImplement {
|
|
TestNameFunction name;
|
|
TestRunFunction run;
|
|
TestCountTestCasesFunction countTestCases;
|
|
};
|
|
|
|
typedef struct __Test Test;
|
|
typedef struct __Test* TestRef;
|
|
|
|
struct __Test {
|
|
TestImplement* isa;
|
|
};
|
|
|
|
typedef struct __TestCase TestCase;
|
|
typedef struct __TestCase* TestCaseRef;
|
|
|
|
struct __TestCase {
|
|
TestImplement* isa;
|
|
const char *name;
|
|
void(*setUp)(void);
|
|
void(*tearDown)(void);
|
|
void(*runTest)(void);
|
|
};
|
|
|
|
extern const TestImplement TestCaseImplement;
|
|
|
|
typedef struct __TestFixture TestFixture;
|
|
typedef struct __TestFixture* TestFixtureRef;
|
|
|
|
struct __TestFixture {
|
|
const char *name;
|
|
void(*test)(void);
|
|
};
|
|
|
|
typedef struct __TestCaller TestCaller;
|
|
typedef struct __TestCaller* TestCallerRef;
|
|
|
|
struct __TestCaller {
|
|
TestImplement* isa;
|
|
const char *name;
|
|
void(*setUp)(void);
|
|
void(*tearDown)(void);
|
|
int numberOfFixtuers;
|
|
TestFixture *fixtuers;
|
|
};
|
|
|
|
extern const TestImplement TestCallerImplement;
|
|
}
|
|
|
|
void PassToFunction(const TestImplement*);
|
|
|
|
const char* TestCaller_name(TestCaller* self) {
|
|
return self->name;
|
|
}
|
|
|
|
void TestCaller_run(TestCaller* self,TestResult* result) {
|
|
TestCase cs = { (TestImplement*)&TestCaseImplement, 0, 0, 0, 0, };
|
|
int i;
|
|
cs.setUp = self->setUp;
|
|
cs.tearDown = self->tearDown;
|
|
for (i=0; i<self->numberOfFixtuers; i++) {
|
|
cs.name = self->fixtuers[i].name;
|
|
cs.runTest = self->fixtuers[i].test;
|
|
((Test*)(void *)&cs)->isa->run((void *)&cs,result);
|
|
}
|
|
}
|
|
|
|
int TestCaller_countTestCases(TestCaller* self) {
|
|
PassToFunction(&TestCallerImplement);
|
|
return self->numberOfFixtuers;
|
|
}
|
|
|
|
// CHECK: @_ZZ14TestCaller_runP12__TestCallerP12__TestResultE3C.0 = internal unnamed_addr constant
|
|
// CHECK-NOT: @TestCaseImplement = external unnamed_addr constant %struct.TestImplement
|
|
// CHECK: @TestCaseImplement = external constant %struct.TestImplement
|
|
const TestImplement TestCallerImplement = {
|
|
(TestNameFunction)TestCaller_name,
|
|
(TestRunFunction)TestCaller_run,
|
|
(TestCountTestCasesFunction)TestCaller_countTestCases,
|
|
};
|