1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#include "utest_helper.hpp"
#include <string.h>
static char pattern_serials[128];
static void test_fill_buf(size_t sz, size_t offset, size_t size, size_t pattern_sz)
{
unsigned int i;
int ret = 0;
OCL_MAP_BUFFER(0);
memset(((char*)buf_data[0]), 0, sz);
OCL_UNMAP_BUFFER(0);
for (i=0; i < pattern_sz; i++) {
pattern_serials[i] = (rand() & 63);
}
if (offset + size > sz) {
/* Expect Error. */
OCL_ASSERT(clEnqueueFillBuffer(queue, buf[0], pattern_serials,
pattern_sz, offset, size, 0, NULL, NULL));
return;
}
ret = clEnqueueFillBuffer(queue, buf[0], pattern_serials,
pattern_sz, offset, size, 0, NULL, NULL);
OCL_ASSERT(!ret);
OCL_MAP_BUFFER(0);
#if 0
printf("\n==== pattern size is %d, offset is %d, size is %d ====\n",
pattern_sz, offset, size);
printf("\n########### buffer: \n");
for (i = 0; i < sz; ++i)
printf(" %2.2u", ((unsigned char*)buf_data[0])[i]);
#endif
// Check results
int j = 0;
for (i = 0; i < sz; ++i) {
if (i < offset || i >= offset + size) {
if (((char*)buf_data[0])[i] != 0) {
printf ("\nnon zero index is %d\n", i);
OCL_ASSERT(0);
}
continue;
}
if (((char*)buf_data[0])[i] != pattern_serials[j]) {
printf ("\ndifferent index is %d\n", i);
OCL_ASSERT(0);
}
j++;
if (j == (int)pattern_sz) j = 0;
}
OCL_UNMAP_BUFFER(0);
}
void enqueue_fill_buf(void)
{
size_t offset;
size_t pattern_sz;
const size_t sz = 1024;
size_t size = 0;
static int valid_sz[] = {1, 2, 4, 8, 16, 32, 64, 128};
unsigned int i = 0;
OCL_CREATE_BUFFER(buf[0], 0, sz * sizeof(char), NULL);
for (i = 0; i < sizeof(valid_sz)/sizeof(int); i++) {
pattern_sz = valid_sz[i];
size = ((rand()%1024)/pattern_sz) * pattern_sz;
offset = ((rand()%1024)/pattern_sz) * pattern_sz;
while (size + offset + 1 > sz) {
if (size > offset) {
size = size - offset;
} else
offset = offset - size;
}
test_fill_buf(sz, offset, size, pattern_sz);
}
}
MAKE_UTEST_FROM_FUNCTION(enqueue_fill_buf);
|