MCPcopy Create free account
hub / github.com/anjo76/angelscript / TestCDecl_Class

Function TestCDecl_Class

sdk/tests/test_feature/source/testcdecl_class.cpp:107–331  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105bool TestReturnStructAllDoubles();
106
107bool TestCDecl_Class()
108{
109 RET_ON_MAX_PORT
110
111 bool fail = false;
112 COutStream out;
113 int r;
114
115 {
116 asIScriptEngine* engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
117
118 if (sizeof(Class3) != 12 || sizeof(asvec3_t) != 12)
119 {
120 PRINTF("sizeof(Class1) == %d\n", (int)sizeof(Class1));
121 PRINTF("sizeof(Class2) == %d\n", (int)sizeof(Class2));
122 PRINTF("sizeof(Class3) == %d\n", (int)sizeof(Class3));
123 PRINTF("sizeof(asvec3_t) == %d\n", (int)sizeof(asvec3_t));
124 }
125
126 // On 64bit Linux these types would be returned in RAX:RDX, and must be informed with asOBJ_APP_CLASS_ALLINTS
127 engine->RegisterObjectType("class1", sizeof(Class1), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS | asOBJ_APP_CLASS_ALLINTS);
128 engine->RegisterObjectType("class2", sizeof(Class2), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS | asOBJ_APP_CLASS_ALLINTS);
129 engine->RegisterObjectType("class2_2", sizeof(Class2_2), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS | asOBJ_APP_CLASS_ALLINTS | asOBJ_APP_CLASS_ALIGN8);
130 engine->RegisterObjectType("class3", sizeof(Class3), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS | asOBJ_APP_CLASS_ALLINTS);
131
132 engine->RegisterGlobalProperty("class1 c1", &c1);
133 engine->RegisterGlobalProperty("class2 c2", &c2);
134 engine->RegisterGlobalProperty("class2_2 c2_2", &c2_2);
135 engine->RegisterGlobalProperty("class3 c3", &c3);
136
137 engine->RegisterGlobalFunction("class1 _class1()", asFUNCTION(class1), asCALL_CDECL);
138 engine->RegisterGlobalFunction("class2 _class2()", asFUNCTION(class2), asCALL_CDECL);
139 engine->RegisterGlobalFunction("class2_2 _class2_2()", asFUNCTION(class2_2), asCALL_CDECL);
140 engine->RegisterGlobalFunction("class3 _class3()", asFUNCTION(class3), asCALL_CDECL);
141
142 engine->RegisterGlobalFunction("void assert(bool)", asFUNCTION(Assert), asCALL_GENERIC);
143
144 engine->SetMessageCallback(asMETHOD(COutStream, Callback), &out, asCALL_THISCALL);
145
146 c1.a = 0;
147
148 r = ExecuteString(engine, "c1 = _class1();");
149 if (r < 0)
150 {
151 PRINTF("%s: ExecuteString() failed %d\n", TESTNAME, r);
152 TEST_FAILED;
153 }
154
155 if (c1.a != 0xDEADC0DE)
156 {
157 PRINTF("%s: Failed to assign object returned from function. c1.a = %X\n", TESTNAME, (unsigned int)c1.a);
158 TEST_FAILED;
159 }
160
161
162 c2.a = 0;
163 c2.b = 0;
164

Callers 1

allTestsFunction · 0.85

Calls 15

ExecuteStringFunction · 0.85
class3Function · 0.85
SetMessageCallbackMethod · 0.80
AddScriptSectionMethod · 0.80
CreateContextMethod · 0.80
GetFunctionByNameMethod · 0.80
ExecuteMethod · 0.80

Tested by

no test coverage detected