blob: 5c92d192b656f85534947b648694a110586bdd09 [file] [log] [blame]
/*
* Copyright (c) 2016-2017 The Khronos Group Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#if defined OPENVX_USE_ENHANCED_VISION || OPENVX_CONFORMANCE_VISION
#include <math.h>
#include <string.h>
#include <float.h>
#include <VX/vx.h>
#include "test_engine/test.h"
TESTCASE(Scalar, CT_VXContext, ct_setup_vx_context, 0)
typedef union
{
vx_char chr;
vx_int8 s08;
vx_uint8 u08;
vx_int16 s16;
vx_uint16 u16;
vx_int32 s32;
vx_uint32 u32;
vx_int64 s64;
vx_uint64 u64;
vx_float32 f32;
vx_float64 f64;
vx_enum enm;
vx_size size;
vx_df_image fcc;
vx_bool boolean;
vx_uint8 data[8];
/* support type of scalar with size */
vx_rectangle_t rect;
vx_keypoint_t key_point;
vx_coordinates2d_t coord2d;
vx_coordinates3d_t coord3d;
#ifdef OPENVX_USE_ENHANCED_VISION
vx_coordinates2df_t coord2df;
vx_hog_t hog;
vx_hough_lines_p_t houghlines;
vx_line2d_t line2d;
vx_tensor_matrix_multiply_params_t matrix;
#endif
} scalar_val;
typedef struct
{
const char* name;
vx_enum data_type;
} format_arg;
static void own_init_scalar_value(vx_enum type, scalar_val* val, vx_bool variant)
{
switch (type)
{
case VX_TYPE_CHAR: val->chr = variant == vx_true_e ? 1 : 2; break;
case VX_TYPE_INT8: val->s08 = variant == vx_true_e ? 2 : 3; break;
case VX_TYPE_UINT8: val->u08 = variant == vx_true_e ? 3 : 4; break;
case VX_TYPE_INT16: val->s16 = variant == vx_true_e ? 4 : 5; break;
case VX_TYPE_UINT16: val->u16 = variant == vx_true_e ? 5 : 6; break;
case VX_TYPE_INT32: val->s32 = variant == vx_true_e ? 6 : 7; break;
case VX_TYPE_UINT32: val->u32 = variant == vx_true_e ? 7 : 8; break;
case VX_TYPE_INT64: val->s64 = variant == vx_true_e ? 8 : 9; break;
case VX_TYPE_UINT64: val->u64 = variant == vx_true_e ? 9 : 10; break;
case VX_TYPE_FLOAT32: val->f32 = variant == vx_true_e ? 1.5f : 9.9f; break;
case VX_TYPE_FLOAT64: val->f64 = variant == vx_true_e ? 1.5 : 9.9; break;
case VX_TYPE_ENUM: val->enm = variant == vx_true_e ? VX_BORDER_CONSTANT : VX_BORDER_REPLICATE; break;
case VX_TYPE_SIZE: val->size = variant == vx_true_e ? 10 : 999; break;
case VX_TYPE_DF_IMAGE: val->fcc = variant == vx_true_e ? VX_DF_IMAGE_RGB : VX_DF_IMAGE_U8; break;
case VX_TYPE_BOOL: val->boolean = variant == vx_true_e ? vx_true_e : vx_false_e; break;
/* support type of scalar with size */
case VX_TYPE_RECTANGLE:
if (variant == vx_true_e)
{
val->rect.start_x = 0;
val->rect.start_y = 0;
val->rect.end_x = 1280;
val->rect.end_y = 720;
}
break;
case VX_TYPE_KEYPOINT:
if (variant == vx_true_e)
{
val->key_point.x = 128;
val->key_point.y = 256;
val->key_point.strength = 20.0;
val->key_point.scale = 0.8;
val->key_point.orientation = 0.3;
val->key_point.tracking_status = 1;
val->key_point.error = 0;
}
break;
case VX_TYPE_COORDINATES2D:
if (variant == vx_true_e)
{
val->coord2d.x = 10;
val->coord2d.y = 9;
}
break;
case VX_TYPE_COORDINATES3D:
if (variant == vx_true_e)
{
val->coord3d.x = 16;
val->coord3d.y = 31;
val->coord3d.z = 22;
}
break;
#ifdef OPENVX_USE_ENHANCED_VISION
case VX_TYPE_COORDINATES2DF:
if (variant == vx_true_e)
{
val->coord2df.x = 2.7f;
val->coord2df.y = 3.5f;
}
break;
case VX_TYPE_HOG_PARAMS:
if (variant == vx_true_e)
{
val->hog.cell_width = 16;
val->hog.cell_height = 16;
val->hog.block_width = 128;
val->hog.block_height = 128;
val->hog.block_stride = 1280;
val->hog.num_bins = 5;
val->hog.window_width = 1280;
val->hog.window_height = 720;
val->hog.window_stride = 1280;
val->hog.threshold = 0.2f;
}
break;
case VX_TYPE_HOUGH_LINES_PARAMS:
if (variant == vx_true_e)
{
val->houghlines.rho = 0.8f;
val->houghlines.theta = 0.5f;
val->houghlines.threshold = 235;
val->houghlines.line_length = 8;
val->houghlines.line_gap = 3;
val->houghlines.theta_max = 1.2f;
val->houghlines.theta_min = 0.1f;
}
break;
case VX_TYPE_LINE_2D:
if (variant == vx_true_e)
{
val->line2d.start_x = 2.3f;
val->line2d.start_y = 1.5f;
val->line2d.end_x = 1279.9f;
val->line2d.end_y = 718.8f;
}
break;
case VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS:
if (variant == vx_true_e)
{
val->matrix.transpose_input1 = vx_true_e;
val->matrix.transpose_input2 = vx_false_e;
val->matrix.transpose_input3 = vx_true_e;
}
break;
#endif
default:
FAIL("Unsupported type: (%.4s)", &type);
}
return;
}
static vx_size ownGetSizeByType(vx_enum type)
{
vx_size size = 0;
switch (type)
{
case VX_TYPE_CHAR: size = sizeof(vx_char); break;
case VX_TYPE_INT8: size = sizeof(vx_int8); break;
case VX_TYPE_UINT8: size = sizeof(vx_uint8); break;
case VX_TYPE_INT16: size = sizeof(vx_int16); break;
case VX_TYPE_UINT16: size = sizeof(vx_uint16); break;
case VX_TYPE_INT32: size = sizeof(vx_int32); break;
case VX_TYPE_UINT32: size = sizeof(vx_uint32); break;
case VX_TYPE_INT64: size = sizeof(vx_int64); break;
case VX_TYPE_UINT64: size = sizeof(vx_uint64); break;
case VX_TYPE_FLOAT32: size = sizeof(vx_float32); break;
case VX_TYPE_FLOAT64: size = sizeof(vx_float64); break;
case VX_TYPE_ENUM: size = sizeof(vx_int32); break;
case VX_TYPE_SIZE: size = sizeof(vx_size); break;
case VX_TYPE_DF_IMAGE: size = sizeof(vx_df_image); break;
case VX_TYPE_BOOL: size = sizeof(vx_bool); break;
/* support type of scalar with size */
case VX_TYPE_RECTANGLE:
size = sizeof(vx_rectangle_t);
break;
case VX_TYPE_KEYPOINT:
size = sizeof(vx_keypoint_t);
break;
case VX_TYPE_COORDINATES2D:
size = sizeof(vx_coordinates2d_t);
break;
case VX_TYPE_COORDINATES3D:
size = sizeof(vx_coordinates3d_t);
break;
#ifdef OPENVX_USE_ENHANCED_VISION
case VX_TYPE_COORDINATES2DF:
size = sizeof(vx_coordinates2df_t);
break;
case VX_TYPE_HOG_PARAMS:
size = sizeof(vx_hog_t);
break;
case VX_TYPE_HOUGH_LINES_PARAMS:
size = sizeof(vx_hough_lines_p_t);
break;
case VX_TYPE_LINE_2D:
size = sizeof(vx_line2d_t);
break;
case VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS:
size = sizeof(vx_tensor_matrix_multiply_params_t);
break;
#endif
default:
CT_RecordFailureAtFormat("Unsupported type: (%.4s)", __FUNCTION__, __FILE__, __LINE__, &type);
break;
}
return size;
}
static void ownCheckScalarVal(vx_enum type, scalar_val *actual_val, scalar_val *expect_val)
{
switch (type)
{
case VX_TYPE_CHAR:
ASSERT_EQ_INT(actual_val->chr, expect_val->chr);
break;
case VX_TYPE_INT8:
ASSERT_EQ_INT(actual_val->s08, expect_val->s08);
break;
case VX_TYPE_UINT8:
ASSERT_EQ_INT(actual_val->u08, expect_val->u08);
break;
case VX_TYPE_INT16:
ASSERT_EQ_INT(actual_val->s16, expect_val->s16);
break;
case VX_TYPE_UINT16:
ASSERT_EQ_INT(actual_val->u16, expect_val->u16);
break;
case VX_TYPE_INT32:
ASSERT_EQ_INT(actual_val->s32, expect_val->s32);
break;
case VX_TYPE_UINT32:
ASSERT_EQ_INT(actual_val->u32, expect_val->u32);
break;
case VX_TYPE_INT64:
ASSERT_EQ_INT(actual_val->s64, expect_val->s64);
break;
case VX_TYPE_UINT64:
ASSERT_EQ_INT(actual_val->u64, expect_val->u64);
break;
case VX_TYPE_FLOAT32:
ASSERT(fabs(actual_val->f32 - expect_val->f32) < 0.000001f);
break;
case VX_TYPE_FLOAT64:
ASSERT(fabs(actual_val->f64 - expect_val->f64) < 0.000001f);
break;
case VX_TYPE_DF_IMAGE:
ASSERT_EQ_INT(actual_val->fcc, expect_val->fcc);
break;
case VX_TYPE_ENUM:
ASSERT_EQ_INT(actual_val->enm, expect_val->enm);
break;
case VX_TYPE_SIZE:
ASSERT_EQ_INT(actual_val->size, expect_val->size);
break;
case VX_TYPE_BOOL:
ASSERT_EQ_INT(actual_val->boolean, expect_val->boolean);
break;
case VX_TYPE_RECTANGLE:
ASSERT_EQ_INT(memcmp(&actual_val->rect, &expect_val->rect, sizeof(VX_TYPE_RECTANGLE)), 0);
break;
case VX_TYPE_KEYPOINT:
ASSERT_EQ_INT(memcmp(&actual_val->key_point, &expect_val->key_point, sizeof(VX_TYPE_KEYPOINT)), 0);
break;
case VX_TYPE_COORDINATES2D:
ASSERT_EQ_INT(memcmp(&actual_val->coord2d, &expect_val->coord2d, sizeof(VX_TYPE_COORDINATES2D)), 0);
break;
case VX_TYPE_COORDINATES3D:
ASSERT_EQ_INT(memcmp(&actual_val->coord3d, &expect_val->coord3d, sizeof(VX_TYPE_COORDINATES3D)), 0);
break;
#ifdef OPENVX_USE_ENHANCED_VISION
case VX_TYPE_COORDINATES2DF:
ASSERT_EQ_INT(memcmp(&actual_val->coord2df, &expect_val->coord2df, sizeof(VX_TYPE_COORDINATES2DF)), 0);
break;
case VX_TYPE_HOG_PARAMS:
ASSERT_EQ_INT(memcmp(&actual_val->hog, &expect_val->hog, sizeof(VX_TYPE_HOG_PARAMS)), 0);
break;
case VX_TYPE_HOUGH_LINES_PARAMS:
ASSERT_EQ_INT(memcmp(&actual_val->houghlines, &expect_val->houghlines, sizeof(VX_TYPE_HOUGH_LINES_PARAMS)), 0);
break;
case VX_TYPE_LINE_2D:
ASSERT_EQ_INT(memcmp(&actual_val->line2d, &expect_val->line2d, sizeof(VX_TYPE_LINE_2D)), 0);
break;
case VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS:
ASSERT_EQ_INT(memcmp(&actual_val->matrix, &expect_val->matrix, sizeof(VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS)), 0);
break;
#endif
default:
FAIL("Unsupported type: (%.4s)", &type);
break;
}
return;
}
TEST_WITH_ARG(Scalar, testCreateScalar, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL)
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum ref_type = arg_->data_type;
scalar_val ref;
own_init_scalar_value(ref_type, &ref, vx_true_e);
ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, ref_type, &ref), VX_TYPE_SCALAR);
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
return;
} /* testCreateScalar() */
TEST_WITH_ARG(Scalar, testQueryScalar, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL)
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum ref_type = arg_->data_type;
vx_enum tst_type = 0;
scalar_val ref;
own_init_scalar_value(ref_type, &ref, vx_true_e);
ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, ref_type, &ref), VX_TYPE_SCALAR);
VX_CALL(vxQueryScalar(scalar, VX_SCALAR_TYPE, &tst_type, sizeof(tst_type)));
ASSERT_EQ_INT(ref_type, tst_type);
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
return;
} /* testQueryScalar() */
TEST_WITH_ARG(Scalar, testCopyScalar, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL)
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum type = arg_->data_type;
scalar_val val1;
scalar_val val2;
scalar_val tst;
own_init_scalar_value(type, &val1, vx_true_e);
own_init_scalar_value(type, &val2, vx_false_e);
ASSERT_VX_OBJECT(scalar = vxCreateScalar(context, type, &val1), VX_TYPE_SCALAR);
VX_CALL(vxCopyScalar(scalar, &tst, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
switch (type)
{
case VX_TYPE_CHAR:
ASSERT_EQ_INT(val1.chr, tst.chr);
break;
case VX_TYPE_INT8:
ASSERT_EQ_INT(val1.s08, tst.s08);
break;
case VX_TYPE_UINT8:
ASSERT_EQ_INT(val1.u08, tst.u08);
break;
case VX_TYPE_INT16:
ASSERT_EQ_INT(val1.s16, tst.s16);
break;
case VX_TYPE_UINT16:
ASSERT_EQ_INT(val1.u16, tst.u16);
break;
case VX_TYPE_INT32:
ASSERT_EQ_INT(val1.s32, tst.s32);
break;
case VX_TYPE_UINT32:
ASSERT_EQ_INT(val1.u32, tst.u32);
break;
case VX_TYPE_INT64:
ASSERT_EQ_INT(val1.s64, tst.s64);
break;
case VX_TYPE_UINT64:
ASSERT_EQ_INT(val1.u64, tst.u64);
break;
case VX_TYPE_FLOAT32:
ASSERT(fabs(val1.f32 - tst.f32) < 0.000001f);
break;
case VX_TYPE_FLOAT64:
ASSERT(fabs(val1.f64 - tst.f64) < 0.000001f);
break;
case VX_TYPE_DF_IMAGE:
ASSERT_EQ_INT(val1.fcc, tst.fcc);
break;
case VX_TYPE_ENUM:
ASSERT_EQ_INT(val1.enm, tst.enm);
break;
case VX_TYPE_SIZE:
ASSERT_EQ_INT(val1.size, tst.size);
break;
case VX_TYPE_BOOL:
ASSERT_EQ_INT(val1.boolean, tst.boolean);
break;
default:
FAIL("Unsupported type: (%.4s)", &type);
break;
}
/* change scalar value */
VX_CALL(vxCopyScalar(scalar, &val2, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
/* read value back */
VX_CALL(vxCopyScalar(scalar, &tst, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
switch (type)
{
case VX_TYPE_CHAR:
ASSERT_EQ_INT(val2.chr, tst.chr);
break;
case VX_TYPE_INT8:
ASSERT_EQ_INT(val2.s08, tst.s08);
break;
case VX_TYPE_UINT8:
ASSERT_EQ_INT(val2.u08, tst.u08);
break;
case VX_TYPE_INT16:
ASSERT_EQ_INT(val2.s16, tst.s16);
break;
case VX_TYPE_UINT16:
ASSERT_EQ_INT(val2.u16, tst.u16);
break;
case VX_TYPE_INT32:
ASSERT_EQ_INT(val2.s32, tst.s32);
break;
case VX_TYPE_UINT32:
ASSERT_EQ_INT(val2.u32, tst.u32);
break;
case VX_TYPE_INT64:
ASSERT_EQ_INT(val2.s64, tst.s64);
break;
case VX_TYPE_UINT64:
ASSERT_EQ_INT(val2.u64, tst.u64);
break;
case VX_TYPE_FLOAT32:
ASSERT(fabs(val2.f32 - tst.f32) < 0.000001f);
break;
case VX_TYPE_FLOAT64:
ASSERT(fabs(val2.f64 - tst.f64) < 0.000001f);
break;
case VX_TYPE_DF_IMAGE:
ASSERT_EQ_INT(val2.fcc, tst.fcc);
break;
case VX_TYPE_ENUM:
ASSERT_EQ_INT(val2.enm, tst.enm);
break;
case VX_TYPE_SIZE:
ASSERT_EQ_INT(val2.size, tst.size);
break;
case VX_TYPE_BOOL:
ASSERT_EQ_INT(val2.boolean, tst.boolean);
break;
default:
FAIL("Unsupported type: (%.4s)", &type);
break;
}
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
return;
} /* testCopyScalar() */
TEST_WITH_ARG(Scalar, testCreateScalarWithSize, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL),
ARG_ENUM(VX_TYPE_RECTANGLE),
ARG_ENUM(VX_TYPE_KEYPOINT),
ARG_ENUM(VX_TYPE_COORDINATES2D),
ARG_ENUM(VX_TYPE_COORDINATES3D),
#ifdef OPENVX_USE_ENHANCED_VISION
ARG_ENUM(VX_TYPE_COORDINATES2DF),
ARG_ENUM(VX_TYPE_HOG_PARAMS),
ARG_ENUM(VX_TYPE_HOUGH_LINES_PARAMS),
ARG_ENUM(VX_TYPE_LINE_2D),
ARG_ENUM(VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS)
#endif
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum ref_type = arg_->data_type;
scalar_val ref;
vx_size ref_size = ownGetSizeByType(ref_type);
own_init_scalar_value(ref_type, &ref, vx_true_e);
ASSERT_VX_OBJECT(scalar = vxCreateScalarWithSize(context, ref_type, &ref, ref_size), VX_TYPE_SCALAR);
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
return;
}
TEST_WITH_ARG(Scalar, testCopyScalarWithSize, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL),
ARG_ENUM(VX_TYPE_RECTANGLE),
ARG_ENUM(VX_TYPE_KEYPOINT),
ARG_ENUM(VX_TYPE_COORDINATES2D),
ARG_ENUM(VX_TYPE_COORDINATES3D),
#ifdef OPENVX_USE_ENHANCED_VISION
ARG_ENUM(VX_TYPE_COORDINATES2DF),
ARG_ENUM(VX_TYPE_HOG_PARAMS),
ARG_ENUM(VX_TYPE_HOUGH_LINES_PARAMS),
ARG_ENUM(VX_TYPE_LINE_2D),
ARG_ENUM(VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS)
#endif
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum ref_type = arg_->data_type;
scalar_val ref;
vx_size ref_size = ownGetSizeByType(ref_type);
scalar_val expect_ref;
scalar_val actual_ref;
own_init_scalar_value(ref_type, &ref, vx_true_e);
ASSERT_VX_OBJECT(scalar = vxCreateScalarWithSize(context, ref_type, &ref, ref_size), VX_TYPE_SCALAR);
//check result
VX_CALL(vxCopyScalarWithSize(scalar, ref_size, &expect_ref, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
ownCheckScalarVal(ref_type, &ref, &expect_ref);
own_init_scalar_value(ref_type, &actual_ref, vx_false_e);
VX_CALL(vxCopyScalarWithSize(scalar, ref_size, &actual_ref, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST));
VX_CALL(vxCopyScalarWithSize(scalar, ref_size, &expect_ref, VX_READ_ONLY, VX_MEMORY_TYPE_HOST));
ownCheckScalarVal(ref_type, &actual_ref, &expect_ref);
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
return;
}
TEST_WITH_ARG(Scalar, testCreateVirtualScalar, format_arg,
ARG_ENUM(VX_TYPE_CHAR),
ARG_ENUM(VX_TYPE_INT8),
ARG_ENUM(VX_TYPE_UINT8),
ARG_ENUM(VX_TYPE_INT16),
ARG_ENUM(VX_TYPE_UINT16),
ARG_ENUM(VX_TYPE_INT32),
ARG_ENUM(VX_TYPE_UINT32),
ARG_ENUM(VX_TYPE_INT64),
ARG_ENUM(VX_TYPE_UINT64),
ARG_ENUM(VX_TYPE_FLOAT32),
ARG_ENUM(VX_TYPE_FLOAT64),
ARG_ENUM(VX_TYPE_ENUM),
ARG_ENUM(VX_TYPE_SIZE),
ARG_ENUM(VX_TYPE_DF_IMAGE),
ARG_ENUM(VX_TYPE_BOOL),
ARG_ENUM(VX_TYPE_RECTANGLE),
ARG_ENUM(VX_TYPE_KEYPOINT),
ARG_ENUM(VX_TYPE_COORDINATES2D),
ARG_ENUM(VX_TYPE_COORDINATES3D),
#ifdef OPENVX_USE_ENHANCED_VISION
ARG_ENUM(VX_TYPE_COORDINATES2DF),
ARG_ENUM(VX_TYPE_HOG_PARAMS),
ARG_ENUM(VX_TYPE_HOUGH_LINES_PARAMS),
ARG_ENUM(VX_TYPE_LINE_2D),
ARG_ENUM(VX_TYPE_TENSOR_MATRIX_MULTIPLY_PARAMS)
#endif
)
{
vx_context context = context_->vx_context_;
vx_scalar scalar = 0;
vx_enum ref_type = arg_->data_type;
vx_graph graph = 0;
vx_enum expect_type = VX_TYPE_INVALID;
ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH);
ASSERT_VX_OBJECT(scalar = vxCreateVirtualScalar(graph, ref_type), VX_TYPE_SCALAR);
VX_CALL(vxQueryScalar(scalar, VX_SCALAR_TYPE, &expect_type, sizeof(vx_enum)));
EXPECT_EQ_INT(expect_type, ref_type);
VX_CALL(vxReleaseScalar(&scalar));
ASSERT(scalar == 0);
VX_CALL(vxReleaseGraph(&graph));
ASSERT(graph == 0);
return;
}
TESTCASE_TESTS(Scalar,
testCreateScalar,
testQueryScalar,
testCopyScalar,
testCreateScalarWithSize,
testCopyScalarWithSize,
testCreateVirtualScalar
)
#endif //OPENVX_USE_ENHANCED_VISION || OPENVX_CONFORMANCE_VISION