#include "gtest/gtest.h" #include "kompute/Kompute.hpp" TEST(TestOpTensorCreate, CreateSingleTensorSingleOp) { std::vector testVecA{ 9, 8, 7 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; { kp::Manager mgr; mgr.rebuild({ tensorA }); EXPECT_TRUE(tensorA->isInit()); EXPECT_EQ(tensorA->data(), testVecA); } EXPECT_FALSE(tensorA->isInit()); } TEST(TestOpTensorCreate, CreateMultipleTensorSingleOp) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 6, 5, 4 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; std::shared_ptr tensorB{ new kp::Tensor(testVecB) }; mgr.rebuild({ tensorA, tensorB }); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_EQ(tensorA->data(), testVecA); EXPECT_EQ(tensorB->data(), testVecB); } TEST(TestOpTensorCreate, CreateMultipleTensorMultipleOp) { kp::Manager mgr; std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 6, 5, 4 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; std::shared_ptr tensorB{ new kp::Tensor(testVecB) }; mgr.rebuild({ tensorA }); mgr.rebuild({ tensorB }); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_EQ(tensorA->data(), testVecA); EXPECT_EQ(tensorB->data(), testVecB); } TEST(TestOpTensorCreate, TestTensorMemoryManagedByManagerDestroyed) { std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 6, 5, 4 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; std::shared_ptr tensorB{ new kp::Tensor(testVecB) }; { kp::Manager mgr; mgr.rebuild({ tensorA }); mgr.rebuild({ tensorB }); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_EQ(tensorA->data(), testVecA); EXPECT_EQ(tensorB->data(), testVecB); } EXPECT_FALSE(tensorA->isInit()); EXPECT_FALSE(tensorB->isInit()); } TEST(TestOpTensorCreate, TestTensorMemoryManagedByManagerNOTDestroyed) { std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 6, 5, 4 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; std::shared_ptr tensorB{ new kp::Tensor(testVecB) }; kp::Manager mgr; { mgr.rebuild({ tensorA }); mgr.rebuild({ tensorB }); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_EQ(tensorA->data(), testVecA); EXPECT_EQ(tensorB->data(), testVecB); } EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); } TEST(TestOpTensorCreate, NoErrorIfTensorFreedBefore) { std::vector testVecA{ 9, 8, 7 }; std::vector testVecB{ 6, 5, 4 }; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; std::shared_ptr tensorB{ new kp::Tensor(testVecB) }; kp::Manager mgr; mgr.rebuild({ tensorA }); mgr.rebuild({ tensorB }); EXPECT_TRUE(tensorA->isInit()); EXPECT_TRUE(tensorB->isInit()); EXPECT_EQ(tensorA->data(), testVecA); EXPECT_EQ(tensorB->data(), testVecB); tensorA->freeMemoryDestroyGPUResources(); tensorB->freeMemoryDestroyGPUResources(); EXPECT_FALSE(tensorA->isInit()); EXPECT_FALSE(tensorB->isInit()); } TEST(TestOpTensorCreate, ExceptionOnZeroSizeTensor) { std::vector testVecA; std::shared_ptr tensorA{ new kp::Tensor(testVecA) }; kp::Manager mgr; try { mgr.rebuild({ tensorA }); } catch (const std::runtime_error& err) { // check exception ASSERT_TRUE(std::string(err.what()).find("zero-sized") != std::string::npos); } }