15#include <freerdp/config.h>
17#include <winpr/sysinfo.h>
21static BOOL check8(
const BYTE* src, UINT32 length, UINT32 offset, BYTE value)
23 for (UINT32 i = 0; i < length; ++i)
25 if (src[offset + i] != value)
27 printf(
"SET8U FAILED: off=%" PRIu32
" len=%" PRIu32
" dest[%" PRIu32
"]=0x%02" PRIx8
29 offset, length, i + offset, src[i + offset]);
37static BOOL test_set8u_func(
void)
41 for (UINT32 off = 0; off < 16; ++off)
45 memset(dest, 3,
sizeof(dest));
46 for (UINT32 len = 1; len < 48 - off; ++len)
48 status =
generic->set_8u(0xa5, dest + off, len);
50 if (status != PRIMITIVES_SUCCESS)
53 if (!check8(dest, len, off, 0xa5))
58 for (UINT32 off = 0; off < 16; ++off)
62 memset(dest, 3,
sizeof(dest));
63 for (UINT32 len = 1; len < 48 - off; ++len)
65 status = optimized->set_8u(0xa5, dest + off, len);
67 if (status != PRIMITIVES_SUCCESS)
70 if (!check8(dest, len, off, 0xa5))
79static BOOL test_set8u_speed(
void)
84 for (UINT32 x = 0; x < 16; x++)
86 if (winpr_RAND(&value,
sizeof(value)) < 0)
89 if (!speed_test(
"set_8u",
"", g_Iterations, (speed_test_fkt)generic->set_8u,
90 (speed_test_fkt)optimized->set_8u, value, dest + x, x))
97static BOOL check32s(
const INT32* src, UINT32 length, UINT32 offset, INT32 value)
99 for (UINT32 i = 0; i < length; ++i)
101 if (src[offset + i] != value)
103 printf(
"SET8U FAILED: off=%" PRIu32
" len=%" PRIu32
" dest[%" PRIu32
"]=0x%08" PRIx32
105 offset, length, i + offset, src[i + offset]);
114static BOOL test_set32s_func(
void)
116 pstatus_t status = 0;
117 const INT32 value = -0x12345678;
119 for (UINT32 off = 0; off < 16; ++off)
121 INT32 dest[1024] = WINPR_C_ARRAY_INIT;
123 for (UINT32 len = 1; len < 48 - off; ++len)
125 status =
generic->set_32s(value, dest + off, len);
127 if (status != PRIMITIVES_SUCCESS)
130 if (!check32s(dest, len, off, value))
135 for (UINT32 off = 0; off < 16; ++off)
137 INT32 dest[1024] = WINPR_C_ARRAY_INIT;
139 for (UINT32 len = 1; len < 48 - off; ++len)
141 status = optimized->set_32s(value, dest + off, len);
143 if (status != PRIMITIVES_SUCCESS)
146 if (!check32s(dest, len, off, value))
154static BOOL check32u(
const UINT32* src, UINT32 length, UINT32 offset, UINT32 value)
156 for (UINT32 i = 0; i < length; ++i)
158 if (src[offset + i] != value)
160 printf(
"SET8U FAILED: off=%" PRIu32
" len=%" PRIu32
" dest[%" PRIu32
"]=0x%08" PRIx32
162 offset, length, i + offset, src[i + offset]);
171static BOOL test_set32u_func(
void)
173 pstatus_t status = 0;
174 const UINT32 value = 0xABCDEF12;
176 for (UINT32 off = 0; off < 16; ++off)
178 UINT32 dest[1024] = WINPR_C_ARRAY_INIT;
180 for (UINT32 len = 1; len < 48 - off; ++len)
182 status =
generic->set_32u(value, dest + off, len);
184 if (status != PRIMITIVES_SUCCESS)
187 if (!check32u(dest, len, off, value))
192 for (UINT32 off = 0; off < 16; ++off)
194 UINT32 dest[1024] = WINPR_C_ARRAY_INIT;
196 for (UINT32 len = 1; len < 48 - off; ++len)
198 status = optimized->set_32u(value, dest + off, len);
200 if (status != PRIMITIVES_SUCCESS)
203 if (!check32u(dest, len, off, value))
212static BOOL test_set32u_speed(
void)
217 for (UINT32 x = 0; x < 16; x++)
219 if (winpr_RAND(&value,
sizeof(value)) < 0)
222 if (!speed_test(
"set_32u",
"", g_Iterations, (speed_test_fkt)generic->set_32u,
223 (speed_test_fkt)optimized->set_32u, value, dest + x, x))
231static BOOL test_set32s_speed(
void)
236 for (UINT32 x = 0; x < 16; x++)
238 if (winpr_RAND(&value,
sizeof(value)) < 0)
241 if (!speed_test(
"set_32s",
"", g_Iterations, (speed_test_fkt)generic->set_32s,
242 (speed_test_fkt)optimized->set_32s, value, dest + x, x))
249int TestPrimitivesSet(
int argc,
char* argv[])
253 prim_test_setup(FALSE);
255 if (!test_set8u_func())
258 if (!test_set32s_func())
261 if (!test_set32u_func())
264 if (g_TestPrimitivesPerformance)
266 if (!test_set8u_speed())
269 if (!test_set32s_speed())
272 if (!test_set32u_speed())