summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utests/CMakeLists.txt1
-rw-r--r--utests/enqueue_fill_buf.cpp90
2 files changed, 91 insertions, 0 deletions
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
index d950e5d6..67200a78 100644
--- a/utests/CMakeLists.txt
+++ b/utests/CMakeLists.txt
@@ -173,6 +173,7 @@ set (utests_sources
enqueue_copy_buf.cpp
enqueue_copy_buf_unaligned.cpp
test_printf.cpp
+ enqueue_fill_buf.cpp
utest_assert.cpp
utest.cpp
utest_file_map.cpp
diff --git a/utests/enqueue_fill_buf.cpp b/utests/enqueue_fill_buf.cpp
new file mode 100644
index 00000000..272b81ff
--- /dev/null
+++ b/utests/enqueue_fill_buf.cpp
@@ -0,0 +1,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);