arm_compute v17.09

Change-Id: I4bf8f4e6e5f84ce0d5b6f5ba570d276879f42a81
diff --git a/tests/validation/CL/BitwiseAnd.cpp b/tests/validation/CL/BitwiseAnd.cpp
index 4cd64a2..3e458a4 100644
--- a/tests/validation/CL/BitwiseAnd.cpp
+++ b/tests/validation/CL/BitwiseAnd.cpp
@@ -21,142 +21,42 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#include "CL/CLAccessor.h"
-#include "CL/Helper.h"
-#include "Globals.h"
-#include "TensorLibrary.h"
-#include "TypePrinter.h"
-#include "Utils.h"
-#include "validation/Datasets.h"
-#include "validation/Reference.h"
-#include "validation/Validation.h"
-
-#include "arm_compute/core/Helpers.h"
 #include "arm_compute/core/Types.h"
-#include "arm_compute/runtime/CL/CLSubTensor.h"
-#include "arm_compute/runtime/CL/CLTensor.h"
-#include "arm_compute/runtime/CL/CLTensorAllocator.h"
 #include "arm_compute/runtime/CL/functions/CLBitwiseAnd.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/PaddingCalculator.h"
+#include "tests/datasets/ShapeDatasets.h"
+#include "tests/framework/Asserts.h"
+#include "tests/framework/Macros.h"
+#include "tests/framework/datasets/Datasets.h"
+#include "tests/validation/Validation.h"
+#include "tests/validation/fixtures/BitwiseAndFixture.h"
 
-#include "boost_wrapper.h"
-
-#include <random>
-#include <string>
-
-using namespace arm_compute;
-using namespace arm_compute::test;
-using namespace arm_compute::test::cl;
-using namespace arm_compute::test::validation;
-
-namespace
+namespace arm_compute
 {
-/** Compute Neon bitwise and function.
- *
- * @param[in] shape Shape of the input and output tensors.
- *
- * @return Computed output tensor.
- */
-CLTensor compute_bitwise_and(const TensorShape &shape)
+namespace test
+{
+namespace validation
+{
+TEST_SUITE(CL)
+TEST_SUITE(BitwiseAnd)
+
+DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", DataType::U8)), shape, data_type)
 {
     // Create tensors
-    CLTensor src1 = create_tensor(shape, DataType::U8);
-    CLTensor src2 = create_tensor(shape, DataType::U8);
-    CLTensor dst  = create_tensor(shape, DataType::U8);
+    CLTensor src1 = create_tensor<CLTensor>(shape, data_type);
+    CLTensor src2 = create_tensor<CLTensor>(shape, data_type);
+    CLTensor dst  = create_tensor<CLTensor>(shape, data_type);
+
+    ARM_COMPUTE_EXPECT(src1.info()->is_resizable(), framework::LogLevel::ERRORS);
+    ARM_COMPUTE_EXPECT(src2.info()->is_resizable(), framework::LogLevel::ERRORS);
+    ARM_COMPUTE_EXPECT(dst.info()->is_resizable(), framework::LogLevel::ERRORS);
 
     // Create and configure function
-    CLBitwiseAnd band;
-    band.configure(&src1, &src2, &dst);
-
-    // Allocate tensors
-    src1.allocator()->allocate();
-    src2.allocator()->allocate();
-    dst.allocator()->allocate();
-
-    BOOST_TEST(!src1.info()->is_resizable());
-    BOOST_TEST(!src2.info()->is_resizable());
-    BOOST_TEST(!dst.info()->is_resizable());
-
-    // Fill tensors
-    library->fill_tensor_uniform(CLAccessor(src1), 0);
-    library->fill_tensor_uniform(CLAccessor(src2), 1);
-
-    // Compute function
-    band.run();
-
-    return dst;
-}
-
-/** Compute OpenCL bitwise and function that splits the input and output in two subtensor.
- *
- * @param[in] shape Shape of the input and output tensors.
- *
- * @return Computed output tensor.
- */
-CLTensor compute_bitwise_and_subtensor(const TensorShape &shape)
-{
-    // Create tensors
-    CLTensor src1 = create_tensor(shape, DataType::U8);
-    CLTensor src2 = create_tensor(shape, DataType::U8);
-    CLTensor dst  = create_tensor(shape, DataType::U8);
-
-    // Create SubTensors
-    int         coord_z   = shape.z() / 2;
-    TensorShape sub_shape = shape;
-    sub_shape.set(2, coord_z);
-
-    CLSubTensor src1_sub1(&src1, sub_shape, Coordinates());
-    CLSubTensor src1_sub2(&src1, sub_shape, Coordinates(0, 0, coord_z));
-    CLSubTensor src2_sub1(&src2, sub_shape, Coordinates());
-    CLSubTensor src2_sub2(&src2, sub_shape, Coordinates(0, 0, coord_z));
-    CLSubTensor dst_sub1(&dst, sub_shape, Coordinates());
-    CLSubTensor dst_sub2(&dst, sub_shape, Coordinates(0, 0, coord_z));
-
-    // Create and configure function
-    CLBitwiseAnd band1, band2;
-    band1.configure(&src1_sub1, &src2_sub1, &dst_sub1);
-    band2.configure(&src1_sub2, &src2_sub2, &dst_sub2);
-
-    // Allocate tensors
-    src1.allocator()->allocate();
-    src2.allocator()->allocate();
-    dst.allocator()->allocate();
-
-    BOOST_TEST(!src1.info()->is_resizable());
-    BOOST_TEST(!src2.info()->is_resizable());
-    BOOST_TEST(!dst.info()->is_resizable());
-
-    // Fill tensors
-    std::uniform_int_distribution<> distribution(0, 255);
-    library->fill(CLAccessor(src1), distribution, 0);
-    library->fill(CLAccessor(src2), distribution, 1);
-
-    // Compute function
-    band1.run();
-    band2.run();
-
-    return dst;
-}
-} // namespace
-
-#ifndef DOXYGEN_SKIP_THIS
-BOOST_AUTO_TEST_SUITE(CL)
-BOOST_AUTO_TEST_SUITE(BitwiseAnd)
-
-BOOST_TEST_DECORATOR(*boost::unit_test::label("precommit") * boost::unit_test::label("nightly"))
-BOOST_DATA_TEST_CASE(Configuration, SmallShapes() + LargeShapes(), shape)
-{
-    // Create tensors
-    CLTensor src1 = create_tensor(shape, DataType::U8);
-    CLTensor src2 = create_tensor(shape, DataType::U8);
-    CLTensor dst  = create_tensor(shape, DataType::U8);
-
-    BOOST_TEST(src1.info()->is_resizable());
-    BOOST_TEST(src2.info()->is_resizable());
-    BOOST_TEST(dst.info()->is_resizable());
-
-    // Create and configure function
-    CLBitwiseAnd band;
-    band.configure(&src1, &src2, &dst);
+    CLBitwiseAnd bitwise_and;
+    bitwise_and.configure(&src1, &src2, &dst);
 
     // Validate valid region
     const ValidRegion valid_region = shape_to_valid_region(shape);
@@ -165,54 +65,30 @@
     validate(dst.info()->valid_region(), valid_region);
 
     // Validate padding
-    const PaddingSize padding(0, required_padding(shape.x(), 16), 0, 0);
+    const PaddingSize padding = PaddingCalculator(shape.x(), 16).required_padding();
     validate(src1.info()->padding(), padding);
     validate(src2.info()->padding(), padding);
     validate(dst.info()->padding(), padding);
 }
 
-BOOST_TEST_DECORATOR(*boost::unit_test::label("precommit"))
-BOOST_DATA_TEST_CASE(RunSmall, SmallShapes(), shape)
+template <typename T>
+using CLBitwiseAndFixture = BitwiseAndValidationFixture<CLTensor, CLAccessor, CLBitwiseAnd, T>;
+
+FIXTURE_DATA_TEST_CASE(RunSmall, CLBitwiseAndFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(datasets::SmallShapes(), framework::dataset::make("DataType",
+                                                                                                          DataType::U8)))
 {
-    // Compute function
-    CLTensor dst = compute_bitwise_and(shape);
-
-    // Compute reference
-    RawTensor ref_dst = Reference::compute_reference_bitwise_and(shape);
-
     // Validate output
-    validate(CLAccessor(dst), ref_dst);
+    validate(CLAccessor(_target), _reference);
+}
+FIXTURE_DATA_TEST_CASE(RunLarge, CLBitwiseAndFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(datasets::LargeShapes(), framework::dataset::make("DataType",
+                                                                                                        DataType::U8)))
+{
+    // Validate output
+    validate(CLAccessor(_target), _reference);
 }
 
-BOOST_TEST_DECORATOR(*boost::unit_test::label("precommit"))
-BOOST_AUTO_TEST_CASE(RunSubTensor)
-{
-    // Create shape
-    TensorShape shape(27U, 35U, 8U, 2U);
-
-    // Compute function
-    CLTensor dst = compute_bitwise_and_subtensor(shape);
-
-    // Compute reference
-    RawTensor ref_dst = Reference::compute_reference_bitwise_and(shape);
-
-    // Validate output
-    validate(CLAccessor(dst), ref_dst);
-}
-
-BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly"))
-BOOST_DATA_TEST_CASE(RunLarge, LargeShapes(), shape)
-{
-    // Compute function
-    CLTensor dst = compute_bitwise_and(shape);
-
-    // Compute reference
-    RawTensor ref_dst = Reference::compute_reference_bitwise_and(shape);
-
-    // Validate output
-    validate(CLAccessor(dst), ref_dst);
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-BOOST_AUTO_TEST_SUITE_END()
-#endif
+TEST_SUITE_END()
+TEST_SUITE_END()
+} // namespace validation
+} // namespace test
+} // namespace arm_compute