#include "gtest/gtest.h" #include "kompute/Kompute.hpp" TEST(TestOpTensorCopy, CopyDeviceToDeviceTensor) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 0, 0, 0 }; std::shared_ptr tensorA{new kp::Tensor(testVecA)}; std::shared_ptr tensorB{new kp::Tensor(testVecB)}; mgr.evalOpDefault({tensorA, tensorB}); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); mgr.evalOpDefault({tensorA, tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); // Making sure the GPU holds the same data mgr.evalOpDefault({tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); } TEST(TestOpTensorCopy, CopyDeviceToDeviceTensorMulti) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 0, 0, 0 }; std::vector testVecC{ 0, 0, 0 }; std::shared_ptr tensorA{new kp::Tensor(testVecA)}; std::shared_ptr tensorB{new kp::Tensor(testVecB)}; std::shared_ptr tensorC{new kp::Tensor(testVecC)}; mgr.evalOpDefault({tensorA, tensorB, tensorC}); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_TRUE(tensorC->isInit()); mgr.evalOpDefault({tensorA, tensorB, tensorC}); EXPECT_EQ(tensorA->data(), tensorB->data()); EXPECT_EQ(tensorA->data(), tensorC->data()); // Making sure the GPU holds the same data mgr.evalOpDefault({tensorB, tensorC}); EXPECT_EQ(tensorA->data(), tensorB->data()); EXPECT_EQ(tensorA->data(), tensorC->data()); } TEST(TestOpTensorCopy, CopyDeviceToStagingTensor) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 0, 0, 0 }; std::shared_ptr tensorA{new kp::Tensor(testVecA)}; std::shared_ptr tensorB{new kp::Tensor(testVecB, kp::Tensor::TensorTypes::eStaging)}; mgr.evalOpDefault({tensorA, tensorB}); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); mgr.evalOpDefault({tensorA, tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); // Making sure the GPU holds the same data mgr.evalOpDefault({tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); } TEST(TestOpTensorCopy, CopyStagingToDeviceTensor) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 0, 0, 0 }; std::shared_ptr tensorA{new kp::Tensor(testVecA, kp::Tensor::TensorTypes::eStaging)}; std::shared_ptr tensorB{new kp::Tensor(testVecB)}; mgr.evalOpDefault({tensorA, tensorB}); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); mgr.evalOpDefault({tensorA, tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); // Making sure the GPU holds the same data mgr.evalOpDefault({tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); } TEST(TestOpTensorCopy, CopyStagingToStagingTensor) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 0, 0, 0 }; std::shared_ptr tensorA{new kp::Tensor(testVecA, kp::Tensor::TensorTypes::eStaging)}; std::shared_ptr tensorB{new kp::Tensor(testVecB, kp::Tensor::TensorTypes::eStaging)}; mgr.evalOpDefault({tensorA, tensorB}); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); mgr.evalOpDefault({tensorA, tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); // Making sure the GPU holds the same data mgr.evalOpDefault({tensorB}); EXPECT_EQ(tensorA->data(), tensorB->data()); } TEST(TestOpTensorCopy, SingleTensorShouldFail) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::shared_ptr tensorA{new kp::Tensor(testVecA, kp::Tensor::TensorTypes::eStaging)}; mgr.evalOpDefault({tensorA}); EXPECT_TRUE(tensorA->isInit()); EXPECT_THROW( mgr.evalOpDefault({tensorA}), std::runtime_error); }