-
Maxence Naud authoredMaxence Naud authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Test_SqrtImpl.cpp 4.34 KiB
/********************************************************************************
* Copyright (c) 2023 CEA-List
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
#include <memory>
#include <catch2/catch_test_macros.hpp>
#include "aidge/backend/cpu/operator/SqrtImpl.hpp"
#include "aidge/data/DataType.hpp"
#include "aidge/data/Tensor.hpp"
#include "aidge/operator/Sqrt.hpp"
#include "aidge/utils/ArrayHelpers.hpp"
#include "aidge/utils/TensorUtils.hpp"
using namespace Aidge;
TEST_CASE("[cpu/operator] Sqrt(forward)", "[Sqrt][CPU]") {
SECTION("2D Tensor") {
std::shared_ptr<Tensor> input = std::make_shared<Tensor>(Array2D<float,2,2> {
{
{16.00000000, 0.62226844},
{ 0.00000000, 1.84539008}
}
});
Tensor expectedOutput = Array2D<float,2,2> {
{
{4.00000000, 0.78883994},
{0.00000000, 1.35845140}
}
};
std::shared_ptr<Sqrt_Op> op = std::make_shared<Sqrt_Op>();
op->associateInput(0,input);
op->setDataType(DataType::Float32);
op->setBackend("cpu");
op->forward();
REQUIRE(approxEq<float>(*(op->getOutput(0)), expectedOutput, 1e-5f, 1e-8f));
}
SECTION("4D Tensor") {
std::shared_ptr<Tensor> input = std::make_shared<Tensor>(Array4D<float,2,3,3,3> {
{
{
{{0.06218481, 0.46850157, 0.60914326},
{0.57470602, 0.09943211, 0.59992820},
{0.99623793, 0.54931718, 0.89343822}},
{{0.75176072, 0.38237786, 0.84824580},
{0.10619396, 0.11959118, 0.93499404},
{0.65563291, 0.02913034, 0.17093092}},
{{0.36303985, 0.92073035, 0.79146117},
{0.88962847, 0.94561219, 0.92033130},
{0.52903181, 0.13397896, 0.76086712}}
},
{
{{0.31242222, 0.80526417, 0.48411584},
{0.84375203, 0.65408552, 0.55028963},
{0.77546734, 0.06203610, 0.83163154}},
{{0.46342927, 0.53631741, 0.39145601},
{0.14204198, 0.84214240, 0.94185621},
{0.05068624, 0.99889028, 0.38464361}},
{{0.37591159, 0.51769549, 0.30288595},
{0.96883464, 0.35154045, 0.55648762},
{0.13022375, 0.73467660, 0.02705121}}
}
}
});
Tensor expectedOutput = Array4D<float,2,3,3,3> {
{
{
{{0.24936883, 0.6844717, 0.7804763},
{0.75809366, 0.31532857, 0.7745503},
{0.9981172, 0.7411593, 0.9452186}},
{{0.86704135, 0.6183671, 0.9210026},
{0.32587415, 0.34581956, 0.9669509},
{0.80971164, 0.17067613, 0.41343793}},
{{0.60252786, 0.9595469, 0.88964105},
{0.9432012, 0.97242594, 0.95933896},
{0.7273457, 0.36603138, 0.87227696}}
},
{
{{0.55894744, 0.89736515, 0.69578433},
{0.91855973, 0.8087555, 0.7418151},
{0.88060623, 0.24907047, 0.91193837}},
{{0.6807564, 0.73233694, 0.6256645},
{0.37688458, 0.9176832, 0.9704928},
{0.22513604, 0.99944496, 0.62019646}},
{{0.6131163, 0.7195106, 0.5503507},
{0.984294, 0.59290844, 0.745981},
{0.3608653, 0.8571328, 0.16447252}}
}
}
};
std::shared_ptr<Sqrt_Op> op = std::make_shared<Sqrt_Op>();
op->associateInput(0,input);
op->setDataType(DataType::Float32);
op->setBackend("cpu");
op->forward();
REQUIRE(approxEq<float>(*(op->getOutput(0)), expectedOutput, 1e-5f, 1e-8f));
}
}