| /* |
| |
| * Copyright (c) 2012-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. |
| */ |
| |
| #include <math.h> |
| #include <float.h> |
| #include <VX/vx.h> |
| #include <VX/vxu.h> |
| |
| #include "test_engine/test.h" |
| |
| TESTCASE(ControlFlow, CT_VXContext, ct_setup_vx_context, 0) |
| |
| static vx_reference create_reference(vx_context context, vx_enum type) |
| { |
| vx_reference ref = 0; |
| vx_uint8 value = 0; |
| vx_enum format = VX_DF_IMAGE_U8; |
| vx_uint32 src_width = 128, src_height = 128; |
| vx_uint32 img_width = 10, img_height = 10; |
| vx_enum item_type = VX_TYPE_UINT8; |
| vx_size capacity = 20; |
| vx_size levels = 8; |
| vx_float32 scale = 0.5f; |
| vx_size bins = 36; |
| vx_int32 offset = 0; |
| vx_uint32 range = 360; |
| vx_enum thresh_type = VX_THRESHOLD_TYPE_BINARY; |
| vx_size num_items = 100; |
| vx_size m = 5, n = 5; |
| vx_size object_array_count = 10; |
| vx_size convolution_x = 3; |
| vx_size convolution_y = 3; |
| vx_scalar scalar = 0; |
| vx_size tensor_dims_num = 2; |
| vx_size tensor_dims_length = 8; |
| vx_size *dims; |
| |
| switch (type) |
| { |
| case VX_TYPE_IMAGE: |
| ref = (vx_reference)vxCreateImage(context, src_width, src_height, format); |
| break; |
| case VX_TYPE_ARRAY: |
| ref = (vx_reference)vxCreateArray(context, item_type, capacity); |
| break; |
| case VX_TYPE_PYRAMID: |
| ref = (vx_reference)vxCreatePyramid(context, levels, scale, src_width, src_height, format); |
| break; |
| case VX_TYPE_SCALAR: |
| ref = (vx_reference)vxCreateScalar(context, item_type, &value); |
| break; |
| case VX_TYPE_MATRIX: |
| ref = (vx_reference)vxCreateMatrix(context, item_type, m, n); |
| break; |
| case VX_TYPE_CONVOLUTION: |
| ref = (vx_reference)vxCreateConvolution(context, convolution_x, convolution_y); |
| break; |
| case VX_TYPE_DISTRIBUTION: |
| ref = (vx_reference)vxCreateDistribution(context, bins, offset, range); |
| break; |
| case VX_TYPE_REMAP: |
| { |
| vx_remap remap = vxCreateRemap(context, img_width, img_height, img_width*2, img_height*2); |
| |
| vx_rectangle_t rect = { 0, 0, img_width*2, img_height*2}; |
| vx_size stride = img_width*2; |
| vx_size stride_y = sizeof(vx_coordinates2df_t) * (stride); |
| vx_size size = stride * img_height*2; |
| vx_coordinates2df_t* ptr_w = malloc(sizeof(vx_coordinates2df_t) * size); |
| for (vx_size i = 0; i < img_height*2; i++) |
| { |
| for (vx_size j = 0; j < img_width*2; j++) |
| { |
| vx_coordinates2df_t *coord_ptr = &(ptr_w[i * stride + j]); |
| coord_ptr->x = (vx_float32)j; |
| coord_ptr->y = (vx_float32)i; |
| } |
| } |
| vxCopyRemapPatch(remap, &rect, stride_y, ptr_w, VX_TYPE_COORDINATES2DF, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST); |
| |
| ref = (vx_reference)remap; |
| free(ptr_w); |
| break; |
| } |
| case VX_TYPE_LUT: |
| ref = (vx_reference)vxCreateLUT(context, item_type, num_items); |
| break; |
| case VX_TYPE_THRESHOLD: |
| ref = (vx_reference)vxCreateThresholdForImage(context, thresh_type, format, format); |
| break; |
| case VX_TYPE_OBJECT_ARRAY: |
| scalar = vxCreateScalar(context, item_type, &value); |
| ref = (vx_reference)vxCreateObjectArray(context, (vx_reference)scalar, object_array_count); |
| vxReleaseScalar(&scalar); |
| break; |
| case VX_TYPE_TENSOR: |
| dims = malloc(tensor_dims_num * sizeof(vx_size)); |
| for(vx_size i = 0; i < tensor_dims_num; i++) |
| { |
| dims[i] = tensor_dims_length; |
| } |
| ref = (vx_reference)vxCreateTensor(context, tensor_dims_num, dims, VX_TYPE_UINT8, 0); |
| free(dims); |
| break; |
| default: |
| break; |
| } |
| return ref; |
| } |
| |
| typedef struct |
| { |
| const char* testName; |
| const char* p; |
| vx_enum item_type; |
| } select_arg; |
| |
| #define ADD_VX_CONTROLFLOW_TYPES(testArgName, nextmacro, ...) \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_IMAGE", __VA_ARGS__, VX_TYPE_IMAGE)), \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_SCALAR", __VA_ARGS__, VX_TYPE_SCALAR)), \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_MATRIX", __VA_ARGS__, VX_TYPE_MATRIX)), \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_CONVOLUTION", __VA_ARGS__, VX_TYPE_CONVOLUTION)), \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_DISTRIBUTION", __VA_ARGS__, VX_TYPE_DISTRIBUTION)), \ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_LUT", __VA_ARGS__, VX_TYPE_LUT)),\ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_OBJECT_ARRAY", __VA_ARGS__, VX_TYPE_OBJECT_ARRAY)),\ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_PYRAMID", __VA_ARGS__, VX_TYPE_PYRAMID)),\ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_THRESHOLD", __VA_ARGS__, VX_TYPE_THRESHOLD)),\ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_TENSOR", __VA_ARGS__, VX_TYPE_TENSOR )),\ |
| CT_EXPAND(nextmacro(testArgName "/VX_TYPE_REMAP", __VA_ARGS__, VX_TYPE_REMAP)) |
| |
| #define PARAMETERS \ |
| CT_GENERATE_PARAMETERS("controlflow", ADD_VX_CONTROLFLOW_TYPES, ARG, NULL) |
| |
| |
| TEST_WITH_ARG(ControlFlow, testSelectNode, select_arg, PARAMETERS) |
| { |
| vx_reference true_value = NULL; |
| vx_reference false_value = NULL; |
| vx_reference output = NULL; |
| vx_enum input_type = arg_->item_type; |
| vx_graph graph = 0; |
| vx_node node = 0; |
| vx_scalar scalar_true = 0; |
| vx_bool bool_true = vx_true_e; |
| |
| vx_context context = context_->vx_context_; |
| ASSERT_VX_OBJECT(true_value = create_reference(context, input_type), (enum vx_type_e)input_type); |
| ASSERT_VX_OBJECT(false_value = create_reference(context, input_type), (enum vx_type_e)input_type); |
| ASSERT_VX_OBJECT(output = create_reference(context, input_type), (enum vx_type_e)input_type); |
| ASSERT_VX_OBJECT(scalar_true = vxCreateScalar(context, VX_TYPE_BOOL, &bool_true), VX_TYPE_SCALAR); |
| ASSERT_VX_OBJECT(graph = vxCreateGraph(context), VX_TYPE_GRAPH); |
| |
| ASSERT_VX_OBJECT(node = vxSelectNode(graph, scalar_true, true_value, false_value, output), VX_TYPE_NODE); |
| |
| VX_CALL(vxVerifyGraph(graph)); |
| VX_CALL(vxProcessGraph(graph)); |
| |
| VX_CALL(vxReleaseNode(&node)); |
| VX_CALL(vxReleaseGraph(&graph)); |
| VX_CALL(vxReleaseReference(&true_value)); |
| VX_CALL(vxReleaseReference(&false_value)); |
| VX_CALL(vxReleaseReference(&output)); |
| VX_CALL(vxReleaseScalar(&scalar_true)); |
| } |
| |
| 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]; |
| |
| } scalar_val; |
| |
| typedef struct |
| { |
| const char* testName; |
| vx_enum operation; |
| vx_enum param_a_type; |
| vx_enum param_b_type; |
| vx_enum result_type; |
| const char * a_value; |
| const char * b_value; |
| const char * o_check; |
| } scalar_op_arg; |
| |
| #define PARAMETERS_SCALAR_OP \ |
| ARG("ControlFlow/AND/BOOL", VX_SCALAR_OP_AND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/AND/BOOL", VX_SCALAR_OP_AND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/AND/BOOL", VX_SCALAR_OP_AND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "0|vx_false_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/AND/BOOL", VX_SCALAR_OP_AND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "1|vx_true_e", "1|vx_true_e") ,\ |
| ARG("ControlFlow/OR/BOOL", VX_SCALAR_OP_OR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/OR/BOOL", VX_SCALAR_OP_OR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/OR/BOOL", VX_SCALAR_OP_OR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "0|vx_false_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/OR/BOOL", VX_SCALAR_OP_OR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "1|vx_true_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/XOR/BOOL", VX_SCALAR_OP_XOR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/XOR/BOOL", VX_SCALAR_OP_XOR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/XOR/BOOL", VX_SCALAR_OP_XOR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "0|vx_false_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/XOR/BOOL", VX_SCALAR_OP_XOR, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "1|vx_true_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "0|vx_false_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "0|vx_false_e", "1|vx_true_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "0|vx_false_e", "1|vx_true_e"),\ |
| ARG("ControlFlow/NAND/BOOL", VX_SCALAR_OP_NAND, VX_TYPE_BOOL, VX_TYPE_BOOL, VX_TYPE_BOOL, "1|vx_true_e", "1|vx_true_e", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/INT8", VX_SCALAR_OP_EQUAL, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "-1", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/INT8", VX_SCALAR_OP_EQUAL, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/UINT8", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "0", "2", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/UINT8", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "2", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/INT16", VX_SCALAR_OP_EQUAL, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "-3", "3", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/INT16", VX_SCALAR_OP_EQUAL, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "3", "3", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/UINT16", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "0", "4", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/UINT16", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "4", "4", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/INT32", VX_SCALAR_OP_EQUAL, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "-5", "5", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/INT32", VX_SCALAR_OP_EQUAL, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "5", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/UINT32", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "0", "6", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/UINT32", VX_SCALAR_OP_EQUAL, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "6", "6", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/SIZE", VX_SCALAR_OP_EQUAL, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "-7", "7", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/SIZE", VX_SCALAR_OP_EQUAL, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "7", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/EQUAL/FLOAT32",VX_SCALAR_OP_EQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "-1.5f", "1.5f", "0|vx_false_e"),\ |
| ARG("ControlFlow/EQUAL/FLOAT32",VX_SCALAR_OP_EQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "1.5f", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT8", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT8", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "2", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "3", "3", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "4", "4", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "5", "5", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "6", "6", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/SIZE", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "7", "7", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/FLOAT32",VX_SCALAR_OP_NOTEQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "1.5f", "0|vx_false_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT8", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT8", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "4", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "3", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT16", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "4", "6", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/INT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "5", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/UINT32", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/SIZE", VX_SCALAR_OP_NOTEQUAL, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\ |
| ARG("ControlFlow/NOTEQUAL/FLOAT32",VX_SCALAR_OP_NOTEQUAL, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.5f", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/INT8", VX_SCALAR_OP_LESS, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "-2", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/UINT8", VX_SCALAR_OP_LESS, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/INT16", VX_SCALAR_OP_LESS, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "3", "-5", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/UINT16", VX_SCALAR_OP_LESS, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "4", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/INT32", VX_SCALAR_OP_LESS, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "5", "-7", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/UINT32", VX_SCALAR_OP_LESS, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "6", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/SIZE", VX_SCALAR_OP_LESS, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "7", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/FLOAT32",VX_SCALAR_OP_LESS, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "-2.5f", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESS/INT8", VX_SCALAR_OP_LESS, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/UINT8", VX_SCALAR_OP_LESS, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "4", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/INT16", VX_SCALAR_OP_LESS, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "3", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/UINT16", VX_SCALAR_OP_LESS, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "4", "6", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/INT32", VX_SCALAR_OP_LESS, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "5", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/UINT32", VX_SCALAR_OP_LESS, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/SIZE", VX_SCALAR_OP_LESS, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESS/FLOAT32",VX_SCALAR_OP_LESS, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.5f", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/INT8", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "-2", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT8", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "0", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/INT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "4", "-5", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "5", "0", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/INT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "6", "-7", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "7", "0", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/SIZE", VX_SCALAR_OP_LESSEQ, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "8", "7", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/FLOAT32",VX_SCALAR_OP_LESSEQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "-1.5f", "0|vx_false_e"),\ |
| ARG("ControlFlow/LESSEQ/INT8", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "1", "2", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT8", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "3", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/INT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "4", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT16", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "5", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/INT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "6", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/UINT32", VX_SCALAR_OP_LESSEQ, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "7", "8", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/SIZE", VX_SCALAR_OP_LESSEQ, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "8", "9", "1|vx_true_e"),\ |
| ARG("ControlFlow/LESSEQ/FLOAT32",VX_SCALAR_OP_LESSEQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "1.5f", "2.0f", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/INT8", VX_SCALAR_OP_GREATER, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/UINT8", VX_SCALAR_OP_GREATER, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "0", "2", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/INT16", VX_SCALAR_OP_GREATER, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "-4", "3", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/UINT16", VX_SCALAR_OP_GREATER, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "0", "4", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/INT32", VX_SCALAR_OP_GREATER, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "-6", "5", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/UINT32", VX_SCALAR_OP_GREATER, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "1", "6", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/SIZE", VX_SCALAR_OP_GREATER, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "0", "7", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/FLOAT32",VX_SCALAR_OP_GREATER, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "-2.0f", "1.5f", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATER/INT8", VX_SCALAR_OP_GREATER, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/UINT8", VX_SCALAR_OP_GREATER, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "3", "2", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/INT16", VX_SCALAR_OP_GREATER, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "4", "3", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/UINT16", VX_SCALAR_OP_GREATER, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "5", "4", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/INT32", VX_SCALAR_OP_GREATER, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "6", "5", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/UINT32", VX_SCALAR_OP_GREATER, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "7", "6", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/SIZE", VX_SCALAR_OP_GREATER, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "8", "7", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATER/FLOAT32",VX_SCALAR_OP_GREATER, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "2.0f", "1.5f", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT8", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT8", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT16", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT16", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "-2", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/SIZE", VX_SCALAR_OP_GREATEREQ, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/FLOAT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "0", "1", "0|vx_false_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT8", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_BOOL, "-1", "-1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT8", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT16", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT16", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/INT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/UINT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/SIZE", VX_SCALAR_OP_GREATEREQ, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_BOOL, "2", "1", "1|vx_true_e"),\ |
| ARG("ControlFlow/GREATEREQ/FLOAT32", VX_SCALAR_OP_GREATEREQ, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_BOOL, "2.0f", "1.0f", "1|vx_true_e"),\ |
| ARG("ControlFlow/ADD/INT8", VX_SCALAR_OP_ADD, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "2", "1", "3"),\ |
| ARG("ControlFlow/ADD/INT8", VX_SCALAR_OP_ADD, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "2", "-1", "1"),\ |
| ARG("ControlFlow/ADD/UINT8", VX_SCALAR_OP_ADD, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "3", "2", "5"),\ |
| ARG("ControlFlow/ADD/INT16", VX_SCALAR_OP_ADD, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "4", "3", "7"),\ |
| ARG("ControlFlow/ADD/INT16", VX_SCALAR_OP_ADD, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "4", "-3", "1"),\ |
| ARG("ControlFlow/ADD/UINT16", VX_SCALAR_OP_ADD, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "5", "4", "9"),\ |
| ARG("ControlFlow/ADD/INT32", VX_SCALAR_OP_ADD, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "6", "5", "11"),\ |
| ARG("ControlFlow/ADD/INT32", VX_SCALAR_OP_ADD, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "-6", "5", "-1"),\ |
| ARG("ControlFlow/ADD/UINT32", VX_SCALAR_OP_ADD, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "7", "6", "13"),\ |
| ARG("ControlFlow/ADD/SIZE", VX_SCALAR_OP_ADD, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "8", "7", "15"),\ |
| ARG("ControlFlow/ADD/FLOAT32",VX_SCALAR_OP_ADD, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "-1.5f", "1.0f", "-0.5f"),\ |
| ARG("ControlFlow/SUBTRACT/INT8", VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "2", "1", "1"),\ |
| ARG("ControlFlow/SUBTRACT/UINT8", VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "3", "2", "1"),\ |
| ARG("ControlFlow/SUBTRACT/INT16", VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "4", "3", "1"),\ |
| ARG("ControlFlow/SUBTRACT/UINT16", VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "5", "4", "1"),\ |
| ARG("ControlFlow/SUBTRACT/INT32", VX_SCALAR_OP_SUBTRACT, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "6", "5", "1"),\ |
| ARG("ControlFlow/SUBTRACT/UINT32", VX_SCALAR_OP_SUBTRACT, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "7", "6", "1"),\ |
| ARG("ControlFlow/SUBTRACT/SIZE", VX_SCALAR_OP_SUBTRACT, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "8", "7", "1"),\ |
| ARG("ControlFlow/SUBTRACT/FLOAT32",VX_SCALAR_OP_SUBTRACT, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "1.0f", "0.0f"),\ |
| ARG("ControlFlow/MULTIPLY/INT8", VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "2", "2", "4"),\ |
| ARG("ControlFlow/MULTIPLY/UINT8", VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "3", "2", "6"),\ |
| ARG("ControlFlow/MULTIPLY/INT16", VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "4", "2", "8"),\ |
| ARG("ControlFlow/MULTIPLY/UINT16", VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "5", "2", "10"),\ |
| ARG("ControlFlow/MULTIPLY/INT32", VX_SCALAR_OP_MULTIPLY, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "6", "2", "12"),\ |
| ARG("ControlFlow/MULTIPLY/UINT32", VX_SCALAR_OP_MULTIPLY, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "7", "2", "14"),\ |
| ARG("ControlFlow/MULTIPLY/SIZE", VX_SCALAR_OP_MULTIPLY, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "8", "2", "16"),\ |
| ARG("ControlFlow/MULTIPLY/FLOAT32",VX_SCALAR_OP_MULTIPLY, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "2.0f", "2.0f"),\ |
| ARG("ControlFlow/MULTIPLY/FLOAT32",VX_SCALAR_OP_MULTIPLY, VX_TYPE_SIZE, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "4", "0.5f", "2.0f"),\ |
| ARG("ControlFlow/DIVIDE/INT8", VX_SCALAR_OP_DIVIDE, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "4", "2", "2"),\ |
| ARG("ControlFlow/DIVIDE/UINT8", VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "6", "3", "2"),\ |
| ARG("ControlFlow/DIVIDE/INT16", VX_SCALAR_OP_DIVIDE, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "8", "4", "2"),\ |
| ARG("ControlFlow/DIVIDE/UINT16", VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "10", "5", "2"),\ |
| ARG("ControlFlow/DIVIDE/INT32", VX_SCALAR_OP_DIVIDE, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "12", "6", "2"),\ |
| ARG("ControlFlow/DIVIDE/UINT32", VX_SCALAR_OP_DIVIDE, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "14", "7", "2"),\ |
| ARG("ControlFlow/DIVIDE/SIZE", VX_SCALAR_OP_DIVIDE, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "16", "8", "2"),\ |
| ARG("ControlFlow/DIVIDE/FLOAT32",VX_SCALAR_OP_DIVIDE, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "1.0f", "2.0f", "0.5f"),\ |
| ARG("ControlFlow/DIVIDE/FLOAT32",VX_SCALAR_OP_DIVIDE, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_FLOAT32, "7", "2", "3"),\ |
| ARG("ControlFlow/MODULUS/INT8", VX_SCALAR_OP_MODULUS, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "5", "2", "1"),\ |
| ARG("ControlFlow/MODULUS/UINT8", VX_SCALAR_OP_MODULUS, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "8", "3", "2"),\ |
| ARG("ControlFlow/MODULUS/INT16", VX_SCALAR_OP_MODULUS, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "8", "4", "0"),\ |
| ARG("ControlFlow/MODULUS/UINT16", VX_SCALAR_OP_MODULUS, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "10", "6", "4"),\ |
| ARG("ControlFlow/MODULUS/INT32", VX_SCALAR_OP_MODULUS, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "12", "7", "5"),\ |
| ARG("ControlFlow/MODULUS/UINT32", VX_SCALAR_OP_MODULUS, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "14", "13", "1"),\ |
| ARG("ControlFlow/MIN/INT8", VX_SCALAR_OP_MIN, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "4", "-2", "-2"),\ |
| ARG("ControlFlow/MIN/UINT8", VX_SCALAR_OP_MIN, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "6", "3", "3"),\ |
| ARG("ControlFlow/MIN/INT16", VX_SCALAR_OP_MIN, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "8", "4", "4"),\ |
| ARG("ControlFlow/MIN/UINT16", VX_SCALAR_OP_MIN, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "10", "5", "5"),\ |
| ARG("ControlFlow/MIN/INT32", VX_SCALAR_OP_MIN, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "12", "6", "6"),\ |
| ARG("ControlFlow/MIN/UINT32", VX_SCALAR_OP_MIN, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "14", "7", "7"),\ |
| ARG("ControlFlow/MIN/SIZE", VX_SCALAR_OP_MIN, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "16", "8", "8"),\ |
| ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "2.0f", "-1.0f", "-1.0f"),\ |
| ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_INT32, VX_TYPE_INT32, "7.1f", "7", "7"),\ |
| ARG("ControlFlow/MIN/FLOAT32",VX_SCALAR_OP_MIN, VX_TYPE_FLOAT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "0.5f", "1", "0"),\ |
| ARG("ControlFlow/MAX_INT8", VX_SCALAR_OP_MAX, VX_TYPE_INT8, VX_TYPE_INT8, VX_TYPE_INT8, "4", "2", "4"),\ |
| ARG("ControlFlow/MAX_UINT8", VX_SCALAR_OP_MAX, VX_TYPE_UINT8, VX_TYPE_UINT8, VX_TYPE_UINT8, "6", "3", "6"),\ |
| ARG("ControlFlow/MAX_INT16", VX_SCALAR_OP_MAX, VX_TYPE_INT16, VX_TYPE_INT16, VX_TYPE_INT16, "8", "4", "8"),\ |
| ARG("ControlFlow/MAX_UINT16", VX_SCALAR_OP_MAX, VX_TYPE_UINT16, VX_TYPE_UINT16, VX_TYPE_UINT16, "10", "5", "10"),\ |
| ARG("ControlFlow/MAX_INT32", VX_SCALAR_OP_MAX, VX_TYPE_INT32, VX_TYPE_INT32, VX_TYPE_INT32, "12", "-6", "12"),\ |
| ARG("ControlFlow/MAX_UINT32", VX_SCALAR_OP_MAX, VX_TYPE_UINT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "14", "7", "14"),\ |
| ARG("ControlFlow/MAX_SIZE", VX_SCALAR_OP_MAX, VX_TYPE_SIZE, VX_TYPE_SIZE, VX_TYPE_SIZE, "16", "8", "16"),\ |
| ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, VX_TYPE_FLOAT32, "2.0f", "1.0f", "2.0f"),\ |
| ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_UINT32, VX_TYPE_UINT32, "2.99f", "3", "3"),\ |
| ARG("ControlFlow/MAX/FLOAT32",VX_SCALAR_OP_MAX, VX_TYPE_FLOAT32, VX_TYPE_INT32, VX_TYPE_FLOAT32, "2.99f","-3", "2.99f"),\ |
| |
| static vx_status ReadValueFromString(const char * str, vx_enum type, scalar_val * val) |
| { |
| vx_status status = VX_SUCCESS; |
| switch (type) |
| { |
| case VX_TYPE_CHAR: |
| val->chr = atoi(str); |
| break; |
| |
| case VX_TYPE_INT8: |
| val->s08 = atoi(str); |
| break; |
| |
| case VX_TYPE_UINT8: |
| val->u08 = atoi(str); |
| break; |
| |
| case VX_TYPE_INT16: |
| val->s16 = atoi(str); |
| break; |
| |
| case VX_TYPE_UINT16: |
| val->u16 = atoi(str); |
| break; |
| |
| case VX_TYPE_INT32: |
| val->s32 = atoi(str); |
| break; |
| |
| case VX_TYPE_UINT32: |
| val->u32 = atoi(str); |
| break; |
| |
| case VX_TYPE_INT64: |
| val->s64 = atoi(str); |
| break; |
| |
| case VX_TYPE_UINT64: |
| val->u64 = atoi(str); |
| break; |
| |
| case VX_TYPE_FLOAT32: |
| val->f32 = atof(str); |
| break; |
| |
| case VX_TYPE_SIZE: |
| val->size = atoi(str); |
| break; |
| |
| case VX_TYPE_BOOL: |
| val->boolean = atoi(str) ? vx_true_e : vx_false_e; |
| break; |
| |
| default: |
| status = VX_ERROR_INVALID_TYPE; |
| break; |
| } |
| return status; |
| } |
| |
| |
| TEST_WITH_ARG(ControlFlow, testScalarOperationNode, scalar_op_arg, PARAMETERS_SCALAR_OP) |
| { |
| vx_node node = 0; |
| vx_graph graph = 0; |
| vx_scalar a = 0, b = 0, o = 0; |
| vx_context context = context_->vx_context_; |
| |
| vx_enum param_a_type = arg_->param_a_type; |
| vx_enum param_b_type = arg_->param_b_type; |
| vx_enum operation = arg_->operation; |
| vx_enum result_type = arg_->result_type; |
| scalar_val a_value; |
| scalar_val b_value; |
| scalar_val o_check; |
| scalar_val o_value; |
| |
| VX_CALL(ReadValueFromString(arg_->a_value, arg_->param_a_type, &a_value)); |
| VX_CALL(ReadValueFromString(arg_->b_value, arg_->param_b_type, &b_value)); |
| VX_CALL(ReadValueFromString(arg_->o_check, arg_->result_type, &o_check)); |
| |
| graph = vxCreateGraph(context); |
| ASSERT_VX_OBJECT(graph, VX_TYPE_GRAPH); |
| |
| ASSERT_VX_OBJECT(a = vxCreateScalar(context, param_a_type, &a_value), VX_TYPE_SCALAR); |
| ASSERT_VX_OBJECT(b = vxCreateScalar(context, param_b_type, &b_value), VX_TYPE_SCALAR); |
| ASSERT_VX_OBJECT(o = vxCreateScalar(context, result_type, &o_value), VX_TYPE_SCALAR); |
| ASSERT_VX_OBJECT(node = vxScalarOperationNode(graph, operation , a, b, o), VX_TYPE_NODE); |
| |
| VX_CALL(vxVerifyGraph(graph)); |
| VX_CALL(vxProcessGraph(graph)); |
| |
| switch (result_type) |
| { |
| case VX_TYPE_CHAR: |
| VX_CALL(vxReadScalarValue(o, &o_value.chr)); |
| ASSERT_EQ_INT(o_check.chr, o_value.chr); |
| break; |
| |
| case VX_TYPE_INT8: |
| VX_CALL(vxReadScalarValue(o, &o_value.s08)); |
| ASSERT_EQ_INT(o_check.s08, o_value.s08); |
| break; |
| |
| case VX_TYPE_UINT8: |
| VX_CALL(vxReadScalarValue(o, &o_value.u08)); |
| ASSERT_EQ_INT(o_check.u08, o_value.u08); |
| break; |
| |
| case VX_TYPE_INT16: |
| VX_CALL(vxReadScalarValue(o, &o_value.s16)); |
| ASSERT_EQ_INT(o_check.s16, o_value.s16); |
| break; |
| |
| case VX_TYPE_UINT16: |
| VX_CALL(vxReadScalarValue(o, &o_value.u16)); |
| ASSERT_EQ_INT(o_check.u16, o_value.u16); |
| break; |
| |
| case VX_TYPE_INT32: |
| VX_CALL(vxReadScalarValue(o, &o_value.s32)); |
| ASSERT_EQ_INT(o_check.s32, o_value.s32); |
| break; |
| |
| case VX_TYPE_UINT32: |
| VX_CALL(vxReadScalarValue(o, &o_value.u32)); |
| ASSERT_EQ_INT(o_check.u32, o_value.u32); |
| break; |
| |
| case VX_TYPE_INT64: |
| VX_CALL(vxReadScalarValue(o, &o_value.s64)); |
| ASSERT_EQ_INT(o_check.s64, o_value.s64); |
| break; |
| |
| case VX_TYPE_UINT64: |
| VX_CALL(vxReadScalarValue(o, &o_value.u64)); |
| ASSERT_EQ_INT(o_check.u64, o_value.u64); |
| break; |
| |
| case VX_TYPE_FLOAT32: |
| VX_CALL(vxReadScalarValue(o, &o_value.f32)); |
| ASSERT(fabs(o_check.f32 - o_value.f32) < 0.000001f); |
| break; |
| |
| case VX_TYPE_SIZE: |
| VX_CALL(vxReadScalarValue(o, &o_value.size)); |
| ASSERT_EQ_INT(o_check.size, o_value.size); |
| break; |
| |
| case VX_TYPE_BOOL: |
| VX_CALL(vxReadScalarValue(o, &o_value.boolean)); |
| ASSERT_EQ_INT(o_check.boolean, o_value.boolean); |
| break; |
| |
| default: |
| FAIL("Unsupported type: (%.4s)", &result_type); |
| break; |
| } |
| |
| VX_CALL(vxReleaseScalar(&a)); |
| VX_CALL(vxReleaseScalar(&b)); |
| VX_CALL(vxReleaseScalar(&o)); |
| VX_CALL(vxReleaseNode(&node)); |
| VX_CALL(vxReleaseGraph(&graph)); |
| |
| ASSERT(b == 0); |
| ASSERT(a == 0); |
| ASSERT(o == 0); |
| ASSERT(node == 0); |
| ASSERT(graph == 0); |
| } |
| |
| TESTCASE_TESTS(ControlFlow, testSelectNode, testScalarOperationNode) |