
// Copyright (c) 2023, ARM Limited.
//
//    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.

#ifndef VERIFIERS_H_
#define VERIFIERS_H_

#include "verify_utils.h"

namespace TosaReference
{
/// \brief Perform dot-product based verification
///
/// \param ref    Reference tensor
/// \param refBnd Reference tensor when ran on abs(input)
/// \param imp    Implementation resulting tensor
/// \param dpInfo Dot-product verification meta-data
///
/// \return True if compliant else false
bool verifyDotProduct(const CTensor* ref,
                      const CTensor* refBnd,
                      const CTensor* imp,
                      const DotProductVerifyInfo& dpInfo);

/// \brief Perform exact result verification
///
/// \param referenceTensor    Reference tensor
/// \param implementationTensor    Implementation resulting tensor
///
/// \return True if compliant else false
bool verifyExact(const CTensor* referenceTensor, const CTensor* implementationTensor);

/// \brief Perform reduce product result verification
///
/// \param referenceTensor    Reference tensor
/// \param implementationTensor    Implementation resulting tensor
/// \param m    Number of manisa bits in the floating point representation
/// \param n    Number of elements in the product
///
/// \return True if compliant else false
bool verifyReduceProduct(const CTensor* referenceTensor, const CTensor* implementationTensor, uint64_t m, uint64_t n);

/// \brief Perform ULP result verification
///
/// \param referenceTensor    Reference tensor
/// \param implementationTensor    Implementation resulting tensor
/// \param ulp    The ULP tolerence for the comparison of the two tensors
///
/// \return True if compliant else false
bool verifyULP(const CTensor* referenceTensor, const CTensor* implementationTensor, uint64_t ulp);

};    // namespace TosaReference

#endif    // VERIFIERS_H_
