/*
 * Copyright (c) 2017-2020 Arm Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
#ifndef ARM_COMPUTE_TEST_SHAPE_DATASETS_H
#define ARM_COMPUTE_TEST_SHAPE_DATASETS_H

#include "arm_compute/core/TensorShape.h"
#include "tests/framework/datasets/Datasets.h"

#include <type_traits>

namespace arm_compute
{
namespace test
{
namespace datasets
{
/** Parent type for all for shape datasets. */
using ShapeDataset = framework::dataset::ContainerDataset<std::vector<TensorShape>>;

/** Data set containing tiny 1D tensor shapes. */
class Tiny1DShapes final : public ShapeDataset
{
public:
    Tiny1DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 2U },
                     TensorShape{ 3U },
    })
    {
    }
};

/** Data set containing small 1D tensor shapes. */
class Small1DShapes final : public ShapeDataset
{
public:
    Small1DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 128U },
                     TensorShape{ 256U },
                     TensorShape{ 512U },
                     TensorShape{ 1024U }
    })
    {
    }
};

/** Data set containing tiny 2D tensor shapes. */
class Tiny2DShapes final : public ShapeDataset
{
public:
    Tiny2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U },
                     TensorShape{ 11U, 13U },
    })
    {
    }
};
/** Data set containing small 2D tensor shapes. */
class Small2DShapes final : public ShapeDataset
{
public:
    Small2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U },
                     TensorShape{ 27U, 13U },
                     TensorShape{ 128U, 64U }
    })
    {
    }
};

/** Data set containing tiny 3D tensor shapes. */
class Tiny3DShapes final : public ShapeDataset
{
public:
    Tiny3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 5U },
                     TensorShape{ 23U, 13U, 9U },
    })
    {
    }
};

/** Data set containing small 3D tensor shapes. */
class Small3DShapes final : public ShapeDataset
{
public:
    Small3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 7U, 7U },
                     TensorShape{ 2U, 5U, 4U },

                     TensorShape{ 7U, 7U, 5U },
                     TensorShape{ 16U, 16U, 5U },
                     TensorShape{ 27U, 13U, 37U },
    })
    {
    }
};

/** Data set containing tiny 4D tensor shapes. */
class Tiny4DShapes final : public ShapeDataset
{
public:
    Tiny4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 5U, 3U },
                     TensorShape{ 17U, 13U, 7U, 2U },
    })
    {
    }
};
/** Data set containing small 4D tensor shapes. */
class Small4DShapes final : public ShapeDataset
{
public:
    Small4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 2U, 7U, 1U, 3U },
                     TensorShape{ 7U, 7U, 5U, 3U },
                     TensorShape{ 27U, 13U, 37U, 2U },
                     TensorShape{ 128U, 64U, 21U, 3U }
    })
    {
    }
};

/** Data set containing tiny tensor shapes. */
class TinyShapes final : public ShapeDataset
{
public:
    TinyShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 9U, 9U },
                     TensorShape{ 27U, 13U, 2U },
    })
    {
    }
};
/** Data set containing small tensor shapes. */
class SmallShapes final : public ShapeDataset
{
public:
    SmallShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 11U, 11U },
                     TensorShape{ 16U, 16U },
                     TensorShape{ 27U, 13U, 7U },
                     TensorShape{ 31U, 27U, 17U, 2U },
                     // Batch size 4
                     TensorShape{ 27U, 13U, 2U, 4U },
                     // Arbitrary batch size
                     TensorShape{ 11U, 11U, 3U, 5U }
    })
    {
    }
};

/** Data set containing pairs of tiny tensor shapes that are broadcast compatible. */
class TinyShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
{
public:
    TinyShapesBroadcast()
        : ZipDataset<ShapeDataset, ShapeDataset>(
              ShapeDataset("Shape0",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 10U, 2U, 14U, 2U },
    }),
    ShapeDataset("Shape1",
    {
        TensorShape{ 9U, 1U, 9U },
        TensorShape{ 10U },
    }))
    {
    }
};
/** Data set containing pairs of small tensor shapes that are broadcast compatible. */
class SmallShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
{
public:
    SmallShapesBroadcast()
        : ZipDataset<ShapeDataset, ShapeDataset>(
              ShapeDataset("Shape0",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 27U, 13U, 2U },
                     TensorShape{ 128U, 1U, 5U, 3U },
                     TensorShape{ 9U, 9U, 3U, 4U },
                     TensorShape{ 27U, 13U, 2U, 4U },
                     TensorShape{ 1U, 1U, 1U, 5U },
                     TensorShape{ 1U, 16U, 10U, 2U, 128U },
                     TensorShape{ 1U, 16U, 10U, 2U, 128U }
    }),
    ShapeDataset("Shape1",
    {
        TensorShape{ 9U, 1U, 2U },
        TensorShape{ 1U, 13U, 2U },
        TensorShape{ 128U, 64U, 1U, 3U },
        TensorShape{ 9U, 1U, 3U },
        TensorShape{ 1U },
        TensorShape{ 9U, 9U, 3U, 5U },
        TensorShape{ 1U, 1U, 1U, 1U, 128U },
        TensorShape{ 128U }
    }))
    {
    }
};

/** Data set containing medium tensor shapes. */
class MediumShapes final : public ShapeDataset
{
public:
    MediumShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 37U, 37U },
                     TensorShape{ 27U, 33U, 2U },
                     // Arbitrary batch size
                     TensorShape{ 37U, 37U, 3U, 5U }
    })
    {
    }
};

/** Data set containing medium 2D tensor shapes. */
class Medium2DShapes final : public ShapeDataset
{
public:
    Medium2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U },
                     TensorShape{ 57U, 60U },
                     TensorShape{ 128U, 64U },
                     TensorShape{ 83U, 72U },
                     TensorShape{ 40U, 40U }
    })
    {
    }
};

/** Data set containing medium 3D tensor shapes. */
class Medium3DShapes final : public ShapeDataset
{
public:
    Medium3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U, 8U },
                     TensorShape{ 57U, 60U, 13U },
                     TensorShape{ 83U, 72U, 14U }
    })
    {
    }
};

/** Data set containing medium 4D tensor shapes. */
class Medium4DShapes final : public ShapeDataset
{
public:
    Medium4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 42U, 37U, 8U, 15U },
                     TensorShape{ 57U, 60U, 13U, 8U },
                     TensorShape{ 83U, 72U, 14U, 5U }
    })
    {
    }
};

/** Data set containing large tensor shapes. */
class LargeShapes final : public ShapeDataset
{
public:
    LargeShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 582U, 131U, 1U, 4U },
    })
    {
    }
};

/** Data set containing pairs of large tensor shapes that are broadcast compatible. */
class LargeShapesBroadcast final : public framework::dataset::ZipDataset<ShapeDataset, ShapeDataset>
{
public:
    LargeShapesBroadcast()
        : ZipDataset<ShapeDataset, ShapeDataset>(
              ShapeDataset("Shape0",
    {
        TensorShape{ 1921U, 541U },
                     TensorShape{ 1U, 485U, 2U, 3U },
                     TensorShape{ 4159U, 1U },
                     TensorShape{ 799U }
    }),
    ShapeDataset("Shape1",
    {
        TensorShape{ 1921U, 1U, 2U },
        TensorShape{ 641U, 1U, 2U, 3U },
        TensorShape{ 1U, 127U, 25U },
        TensorShape{ 799U, 595U, 1U, 4U }
    }))
    {
    }
};

/** Data set containing large 1D tensor shapes. */
class Large1DShapes final : public ShapeDataset
{
public:
    Large1DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1245U }
    })
    {
    }
};

/** Data set containing large 2D tensor shapes. */
class Large2DShapes final : public ShapeDataset
{
public:
    Large2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1245U, 652U }
    })
    {
    }
};

/** Data set containing large 3D tensor shapes. */
class Large3DShapes final : public ShapeDataset
{
public:
    Large3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 320U, 240U, 3U }
    })
    {
    }
};

/** Data set containing large 4D tensor shapes. */
class Large4DShapes final : public ShapeDataset
{
public:
    Large4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 320U, 123U, 3U, 3U }
    })
    {
    }
};

/** Data set containing small 3x3 tensor shapes. */
class Small3x3Shapes final : public ShapeDataset
{
public:
    Small3x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 3U, 7U, 4U },
                     TensorShape{ 3U, 3U, 4U, 13U },
                     TensorShape{ 3U, 3U, 3U, 5U },
    })
    {
    }
};

/** Data set containing small 3x1 tensor shapes. */
class Small3x1Shapes final : public ShapeDataset
{
public:
    Small3x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 1U, 7U, 4U },
                     TensorShape{ 3U, 1U, 4U, 13U },
                     TensorShape{ 3U, 1U, 3U, 5U },
    })
    {
    }
};

/** Data set containing small 1x3 tensor shapes. */
class Small1x3Shapes final : public ShapeDataset
{
public:
    Small1x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 3U, 7U, 4U },
                     TensorShape{ 1U, 3U, 4U, 13U },
                     TensorShape{ 1U, 3U, 3U, 5U },
    })
    {
    }
};

/** Data set containing large 3x3 tensor shapes. */
class Large3x3Shapes final : public ShapeDataset
{
public:
    Large3x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 3U, 32U, 64U },
                     TensorShape{ 3U, 3U, 51U, 13U },
                     TensorShape{ 3U, 3U, 53U, 47U },
    })
    {
    }
};

/** Data set containing large 3x1 tensor shapes. */
class Large3x1Shapes final : public ShapeDataset
{
public:
    Large3x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 1U, 32U, 64U },
                     TensorShape{ 3U, 1U, 51U, 13U },
                     TensorShape{ 3U, 1U, 53U, 47U },
    })
    {
    }
};

/** Data set containing large 1x3 tensor shapes. */
class Large1x3Shapes final : public ShapeDataset
{
public:
    Large1x3Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 3U, 32U, 64U },
                     TensorShape{ 1U, 3U, 51U, 13U },
                     TensorShape{ 1U, 3U, 53U, 47U },
    })
    {
    }
};

/** Data set containing small 5x5 tensor shapes. */
class Small5x5Shapes final : public ShapeDataset
{
public:
    Small5x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 5U, 7U, 4U },
                     TensorShape{ 5U, 5U, 4U, 13U },
                     TensorShape{ 5U, 5U, 3U, 5U },
    })
    {
    }
};

/** Data set containing large 5x5 tensor shapes. */
class Large5x5Shapes final : public ShapeDataset
{
public:
    Large5x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 5U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small 5x1 tensor shapes. */
class Small5x1Shapes final : public ShapeDataset
{
public:
    Small5x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 1U, 7U, 4U }
    })
    {
    }
};

/** Data set containing large 5x1 tensor shapes. */
class Large5x1Shapes final : public ShapeDataset
{
public:
    Large5x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 5U, 1U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small 1x5 tensor shapes. */
class Small1x5Shapes final : public ShapeDataset
{
public:
    Small1x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 5U, 7U, 4U }
    })
    {
    }
};

/** Data set containing large 1x5 tensor shapes. */
class Large1x5Shapes final : public ShapeDataset
{
public:
    Large1x5Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 5U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small 1x7 tensor shapes. */
class Small1x7Shapes final : public ShapeDataset
{
public:
    Small1x7Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 7U, 7U, 4U }
    })
    {
    }
};

/** Data set containing large 1x7 tensor shapes. */
class Large1x7Shapes final : public ShapeDataset
{
public:
    Large1x7Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1U, 7U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small 7x7 tensor shapes. */
class Small7x7Shapes final : public ShapeDataset
{
public:
    Small7x7Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 7U, 4U }
    })
    {
    }
};

/** Data set containing large 7x7 tensor shapes. */
class Large7x7Shapes final : public ShapeDataset
{
public:
    Large7x7Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 7U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small 7x1 tensor shapes. */
class Small7x1Shapes final : public ShapeDataset
{
public:
    Small7x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 1U, 7U, 4U }
    })
    {
    }
};

/** Data set containing large 7x1 tensor shapes. */
class Large7x1Shapes final : public ShapeDataset
{
public:
    Large7x1Shapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 7U, 1U, 32U, 64U }
    })
    {
    }
};

/** Data set containing small tensor shapes for deconvolution. */
class SmallDeconvolutionShapes final : public ShapeDataset
{
public:
    SmallDeconvolutionShapes()
        : ShapeDataset("InputShape",
    {
        TensorShape{ 5U, 4U, 3U, 2U },
                     TensorShape{ 5U, 5U, 3U },
                     TensorShape{ 11U, 13U, 4U, 3U }
    })
    {
    }
};

/** Data set containing tiny tensor shapes for direct convolution. */
class TinyDirectConvolutionShapes final : public ShapeDataset
{
public:
    TinyDirectConvolutionShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 11U, 13U, 3U },
                     TensorShape{ 7U, 27U, 3U }
    })
    {
    }
};
/** Data set containing small tensor shapes for direct convolution. */
class SmallDirectConvolutionShapes final : public ShapeDataset
{
public:
    SmallDirectConvolutionShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 32U, 37U, 3U },
                     // Batch size 4
                     TensorShape{ 32U, 37U, 3U, 4U },
    })
    {
    }
};

/** Data set containing small tensor shapes for direct convolution. */
class SmallDirectConvolutionTensorShiftShapes final : public ShapeDataset
{
public:
    SmallDirectConvolutionTensorShiftShapes()
        : ShapeDataset("InputShape",
    {
        // Batch size 1
        TensorShape{ 32U, 37U, 3U },
                     // Batch size 4
                     TensorShape{ 32U, 37U, 3U, 4U },
                     // Arbitrary batch size
                     TensorShape{ 32U, 37U, 3U, 8U }
    })
    {
    }
};

/** Data set containing small grouped im2col tensor shapes. */
class GroupedIm2ColSmallShapes final : public ShapeDataset
{
public:
    GroupedIm2ColSmallShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 11U, 11U, 48U },
                     TensorShape{ 27U, 13U, 24U },
                     TensorShape{ 128U, 64U, 12U, 3U },
                     TensorShape{ 11U, 11U, 48U, 4U },
                     TensorShape{ 27U, 13U, 24U, 4U },
                     TensorShape{ 11U, 11U, 48U, 5U }
    })
    {
    }
};

/** Data set containing large grouped im2col tensor shapes. */
class GroupedIm2ColLargeShapes final : public ShapeDataset
{
public:
    GroupedIm2ColLargeShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 153U, 231U, 12U },
                     TensorShape{ 123U, 191U, 12U, 2U },
    })
    {
    }
};

/** Data set containing small grouped weights tensor shapes. */
class GroupedWeightsSmallShapes final : public ShapeDataset
{
public:
    GroupedWeightsSmallShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 3U, 3U, 48U, 120U },
                     TensorShape{ 1U, 3U, 24U, 240U },
                     TensorShape{ 3U, 1U, 12U, 480U },
                     TensorShape{ 5U, 5U, 48U, 120U }
    })
    {
    }
};

/** Data set containing large grouped weights tensor shapes. */
class GroupedWeightsLargeShapes final : public ShapeDataset
{
public:
    GroupedWeightsLargeShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U, 96U, 240U },
                     TensorShape{ 13U, 13U, 96U, 240U }
    })
    {
    }
};

/** Data set containing 2D tensor shapes for DepthConcatenateLayer. */
class DepthConcatenateLayerShapes final : public ShapeDataset
{
public:
    DepthConcatenateLayerShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 322U, 243U },
                     TensorShape{ 463U, 879U },
                     TensorShape{ 416U, 651U }
    })
    {
    }
};

/** Data set containing tensor shapes for ConcatenateLayer. */
class ConcatenateLayerShapes final : public ShapeDataset
{
public:
    ConcatenateLayerShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 232U, 65U, 3U },
                     TensorShape{ 432U, 65U, 3U },
                     TensorShape{ 124U, 65U, 3U },
                     TensorShape{ 124U, 65U, 3U, 4U }
    })
    {
    }
};

/** Data set containing global pooling tensor shapes. */
class GlobalPoolingShapes final : public ShapeDataset
{
public:
    GlobalPoolingShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 9U, 9U },
                     TensorShape{ 13U, 13U, 2U },
                     TensorShape{ 27U, 27U, 1U, 3U },
                     // Batch size 4
                     TensorShape{ 31U, 31U, 3U, 4U },
                     TensorShape{ 34U, 34U, 2U, 4U }
    })
    {
    }
};
/** Data set containing tiny softmax layer shapes. */
class SoftmaxLayerTinyShapes final : public ShapeDataset
{
public:
    SoftmaxLayerTinyShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 128U, 10U },
    })
    {
    }
};

/** Data set containing small softmax layer shapes. */
class SoftmaxLayerSmallShapes final : public ShapeDataset
{
public:
    SoftmaxLayerSmallShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U },
                     TensorShape{ 256U, 10U },
                     TensorShape{ 353U, 8U },
                     TensorShape{ 781U, 5U },
    })
    {
    }
};

/** Data set containing large softmax layer shapes. */
class SoftmaxLayerLargeShapes final : public ShapeDataset
{
public:
    SoftmaxLayerLargeShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1000U, 10U }

    })
    {
    }
};

/** Data set containing large and small softmax layer 4D shapes. */
class SoftmaxLayer4DShapes final : public ShapeDataset
{
public:
    SoftmaxLayer4DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 9U, 9U, 9U, 9U },
                     TensorShape{ 31U, 10U, 1U, 9U },
    })
    {
    }
};

/** Data set containing 2D tensor shapes relative to an image size. */
class SmallImageShapes final : public ShapeDataset
{
public:
    SmallImageShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 640U, 480U },
                     TensorShape{ 800U, 600U },
    })
    {
    }
};

/** Data set containing 2D tensor shapes relative to an image size. */
class LargeImageShapes final : public ShapeDataset
{
public:
    LargeImageShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 1920U, 1080U },
                     TensorShape{ 2560U, 1536U },
                     TensorShape{ 3584U, 2048U }
    })
    {
    }
};

/** Data set containing small YOLO tensor shapes. */
class SmallYOLOShapes final : public ShapeDataset
{
public:
    SmallYOLOShapes()
        : ShapeDataset("Shape",
    {
        // Batch size 1
        TensorShape{ 11U, 11U, 270U },
                     TensorShape{ 27U, 13U, 90U },
                     TensorShape{ 13U, 12U, 45U, 2U },
    })
    {
    }
};

/** Data set containing large YOLO tensor shapes. */
class LargeYOLOShapes final : public ShapeDataset
{
public:
    LargeYOLOShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 24U, 23U, 270U },
                     TensorShape{ 51U, 63U, 90U, 2U },
                     TensorShape{ 76U, 91U, 45U, 3U }
    })
    {
    }
};

/** Data set containing small tensor shapes to be used with the GEMM reshaping kernel */
class SmallGEMMReshape2DShapes final : public ShapeDataset
{
public:
    SmallGEMMReshape2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 63U, 72U },
    })
    {
    }
};

/** Data set containing small tensor shapes to be used with the GEMM reshaping kernel when the input has to be reinterpreted as 3D */
class SmallGEMMReshape3DShapes final : public ShapeDataset
{
public:
    SmallGEMMReshape3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 63U, 9U, 8U },
    })
    {
    }
};

/** Data set containing large tensor shapes to be used with the GEMM reshaping kernel */
class LargeGEMMReshape2DShapes final : public ShapeDataset
{
public:
    LargeGEMMReshape2DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 16U, 27U },
                     TensorShape{ 345U, 171U }
    })
    {
    }
};

/** Data set containing large tensor shapes to be used with the GEMM reshaping kernel when the input has to be reinterpreted as 3D */
class LargeGEMMReshape3DShapes final : public ShapeDataset
{
public:
    LargeGEMMReshape3DShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 16U, 3U, 9U },
                     TensorShape{ 345U, 34U, 18U }
    })
    {
    }
};

/** Data set containing small 2D tensor shapes. */
class Small2DNonMaxSuppressionShapes final : public ShapeDataset
{
public:
    Small2DNonMaxSuppressionShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 4U, 7U },
                     TensorShape{ 4U, 13U },
                     TensorShape{ 4U, 64U }
    })
    {
    }
};

/** Data set containing large 2D tensor shapes. */
class Large2DNonMaxSuppressionShapes final : public ShapeDataset
{
public:
    Large2DNonMaxSuppressionShapes()
        : ShapeDataset("Shape",
    {
        TensorShape{ 4U, 113U }
    })
    {
    }
};

} // namespace datasets
} // namespace test
} // namespace arm_compute
#endif /* ARM_COMPUTE_TEST_SHAPE_DATASETS_H */
