/*

 * 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.
 */

TESTCASE(Graph)
TESTCASE(GraphCallback)
TESTCASE(GraphDelay)
TESTCASE(GraphROI)

TESTCASE(Array)
TESTCASE(ObjectArray)
TESTCASE(Image)

TESTCASE(vxCreateImageFromChannel)

TESTCASE(vxCopyImagePatch)
TESTCASE(vxMapImagePatch)

TESTCASE(vxuConvertDepth)
TESTCASE(vxConvertDepth)

TESTCASE(ChannelCombine)
TESTCASE(ChannelExtract)

TESTCASE(ColorConvert)
TESTCASE(Distribution)
TESTCASE(vxuAddSub)
TESTCASE(vxAddSub)

TESTCASE(vxuNot)
TESTCASE(vxNot)

TESTCASE(vxuBinOp8u)
TESTCASE(vxBinOp8u)

TESTCASE(vxuBinOp16s)
TESTCASE(vxBinOp16s)

TESTCASE(vxuMultiply)
TESTCASE(vxMultiply)

TESTCASE(Histogram)
TESTCASE(EqualizeHistogram)
TESTCASE(MeanStdDev)
TESTCASE(MinMaxLoc)
TESTCASE(Min)
TESTCASE(Max)
TESTCASE(Threshold)

TESTCASE(Box3x3)
TESTCASE(Convolve)
TESTCASE(Dilate3x3)
TESTCASE(Erode3x3)
TESTCASE(Gaussian3x3)
TESTCASE(Median3x3)
TESTCASE(Sobel3x3)
TESTCASE(NonLinearFilter)

TESTCASE(Accumulate)
TESTCASE(AccumulateSquare)
TESTCASE(AccumulateWeighted)

TESTCASE(Integral)
TESTCASE(LUT)

TESTCASE(Magnitude)
TESTCASE(Phase)

TESTCASE(FastCorners)
TESTCASE(HarrisCorners)

TESTCASE(Scale)
TESTCASE(WarpAffine)
TESTCASE(WarpPerspective)
TESTCASE(Remap)
TESTCASE(vxCopyRemapPatch)
TESTCASE(vxMapRemapPatch)


TESTCASE(GaussianPyramid)
TESTCASE(HalfScaleGaussian)

TESTCASE(LaplacianPyramid)
TESTCASE(LaplacianReconstruct)

TESTCASE(vxuCanny)
TESTCASE(vxCanny)
TESTCASE(OptFlowPyrLK)

TESTCASE(UserNode)

TESTCASE(Logging)
TESTCASE(SmokeTest)

TESTCASE(Scalar)

TESTCASE(Target)

TESTCASE(Convolution)
TESTCASE(Matrix)

TESTCASE(Nonmaxsuppression)

TESTCASE(TensorOp)

TESTCASE(LBP)

TESTCASE(BilateralFilter)

TESTCASE(MatchTemplate)

TESTCASE(Houghlinesp)

TESTCASE(Copy)

TESTCASE(HogCells)
TESTCASE(HogFeatures)

TESTCASE(ControlFlow)

#ifdef OPENVX_USE_IX
TESTCASE(ExtensionObject)
#endif

#ifdef OPENVX_USE_NN
TESTCASE(TensorNN)
#endif

#ifdef OPENVX_USE_NN_16
TESTCASE(TensorNetworks)
#endif


