Skip to content

Commit

Permalink
Merge pull request #214 from clEsperanto/add-range-func
Browse files Browse the repository at this point in the history
add array equal function and tests
  • Loading branch information
StRigaud authored Nov 29, 2023
2 parents 6c5695a + 151bffb commit c099f0f
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
3 changes: 2 additions & 1 deletion clic/include/tier5.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
namespace cle::tier5
{

// array_equal
auto
array_equal(const Device::Pointer & device, const Array::Pointer & src0, const Array::Pointer & src1) -> bool;

// fill_zeros_inpainting
// generate_touch_mean_intensity_within_range_matrix
Expand Down
24 changes: 24 additions & 0 deletions clic/src/tier5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@
namespace cle::tier5
{

auto
array_equal(const Device::Pointer & device, const Array::Pointer & src0, const Array::Pointer & src1) -> bool
{
// check if size is equal
if (src0->size() != src1->size())
{
return false;
}
// check if width, height, depth is equal
if (src0->width() != src1->width() || src0->height() != src1->height() || src0->depth() != src1->depth())
{
return false;
}
// check if empty
if (src0->size() == 0 && src1->size() == 0)
{
return true;
}
auto mse = tier4::mean_squared_error_func(device, src0, src1);
std::cout << "MSE: " << std::to_string(mse) << std::endl;
return mse == 0;
}


auto
combine_labels_func(const Device::Pointer & device,
const Array::Pointer & src0,
Expand Down
53 changes: 53 additions & 0 deletions tests/tier5/test_array_comparison.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "cle.hpp"

#include <array>
#include <gtest/gtest.h>

class TestArrayComparisons : public ::testing::TestWithParam<std::string>
{
protected:
std::array<int32_t, 3 * 1 * 1> input1 = { 1, 2, 3 };
std::array<int16_t, 3 * 1 * 1> input2 = { 4, 5, 6 };
std::array<int8_t, 4 * 1 * 1> input3 = { 1, 2, 3, 3 };
std::array<float, 3 * 1 * 1> input4 = { 1.0F, 2.0F, 3.0F };
};

TEST_P(TestArrayComparisons, execute)
{
std::string param = GetParam();
cle::BackendManager::getInstance().setBackend(param);
auto device = cle::BackendManager::getInstance().getBackend().getDevice("", "all");
device->setWaitToFinish(true);

auto gpu_input1 = cle::Array::create(3, 1, 1, cle::dType::INT32, cle::mType::BUFFER, device);
auto gpu_input2 = cle::Array::create(3, 1, 1, cle::dType::INT16, cle::mType::BUFFER, device);
auto gpu_input3 = cle::Array::create(4, 1, 1, cle::dType::INT8, cle::mType::BUFFER, device);
auto gpu_input4 = cle::Array::create(3, 1, 1, cle::dType::FLOAT, cle::mType::BUFFER, device);
auto gpu_input5 = cle::Array::create(1, 3, 1, cle::dType::FLOAT, cle::mType::BUFFER, device);

gpu_input1->write(input1.data());
gpu_input2->write(input2.data());
gpu_input3->write(input3.data());
gpu_input4->write(input4.data());
gpu_input5->write(input4.data());

EXPECT_FALSE(cle::tier5::array_equal(device, gpu_input1, gpu_input2));
EXPECT_FALSE(cle::tier5::array_equal(device, gpu_input1, gpu_input3));
EXPECT_TRUE(cle::tier5::array_equal(device, gpu_input1, gpu_input4));
EXPECT_FALSE(cle::tier5::array_equal(device, gpu_input1, gpu_input5));
}

std::vector<std::string>
getParameters()
{
std::vector<std::string> parameters;
#if USE_OPENCL
parameters.push_back("opencl");
#endif
#if USE_CUDA
parameters.push_back("cuda");
#endif
return parameters;
}

INSTANTIATE_TEST_SUITE_P(InstantiationName, TestArrayComparisons, ::testing::ValuesIn(getParameters()));

0 comments on commit c099f0f

Please sign in to comment.