#include "gtest/gtest.h" #include "kompute/Kompute.hpp" TEST(TestManager, EndToEndOpMultFlow) { kp::Manager mgr; std::shared_ptr tensorLHS{ new kp::Tensor({ 0, 1, 2 }) }; mgr.evalOp({ tensorLHS }); std::shared_ptr tensorRHS{ new kp::Tensor( { 2, 4, 6 }) }; mgr.evalOp({ tensorRHS }); std::shared_ptr tensorOutput{ new kp::Tensor( { 0, 0, 0 }) }; mgr.evalOp({ tensorOutput }); mgr.evalOp>({ tensorLHS, tensorRHS, tensorOutput }); mgr.evalOp({ tensorOutput }); EXPECT_EQ(tensorOutput->data(), std::vector({0, 4, 12})); } TEST(TestManager, OpMultSequenceFlow) { std::shared_ptr tensorLHS{ new kp::Tensor( { 0, 1, 2 }) }; std::shared_ptr tensorRHS{ new kp::Tensor( { 2, 4, 6 }) }; std::shared_ptr tensorOutput{ new kp::Tensor( { 0, 0, 0 }) }; kp::Manager mgr; std::weak_ptr sqWeakPtr = mgr.getOrCreateManagedSequence("newSequence"); if (std::shared_ptr sq = sqWeakPtr.lock()) { sq->begin(); sq->record({ tensorLHS }); sq->record({ tensorRHS }); sq->record({ tensorOutput }); sq->record>({ tensorLHS, tensorRHS, tensorOutput }); sq->record({ tensorOutput }); sq->end(); sq->eval(); } sqWeakPtr.reset(); EXPECT_EQ(tensorOutput->data(), std::vector({0, 4, 12})); } TEST(TestManager, TestMultipleSequences) { kp::Manager mgr; std::weak_ptr sqWeakPtrOne = mgr.getOrCreateManagedSequence("sqOne"); std::weak_ptr sqWeakPtrTwo = mgr.getOrCreateManagedSequence("sqTwo"); std::weak_ptr sqWeakPtrOneRef = mgr.getOrCreateManagedSequence("sqOne"); std::weak_ptr sqWeakPtrTwoRef = mgr.getOrCreateManagedSequence("sqTwo"); EXPECT_EQ(sqWeakPtrOne.lock(), sqWeakPtrOneRef.lock()); EXPECT_NE(sqWeakPtrTwo.lock(), sqWeakPtrOneRef.lock()); EXPECT_EQ(sqWeakPtrTwo.lock(), sqWeakPtrTwoRef.lock()); EXPECT_NE(sqWeakPtrOneRef.lock(), sqWeakPtrTwoRef.lock()); } TEST(TestManager, TestMultipleTensorsAtOnce) { std::shared_ptr tensorLHS{ new kp::Tensor( { 0, 1, 2 }) }; std::shared_ptr tensorRHS{ new kp::Tensor( { 2, 4, 6 }) }; std::shared_ptr tensorOutput{ new kp::Tensor( { 0, 0, 0 }) }; kp::Manager mgr; std::weak_ptr sqWeakPtr = mgr.getOrCreateManagedSequence("newSequence"); if (std::shared_ptr sq = sqWeakPtr.lock()) { sq->begin(); sq->record({ tensorLHS, tensorRHS, tensorOutput }); EXPECT_TRUE(tensorLHS->isInit()); EXPECT_TRUE(tensorRHS->isInit()); EXPECT_TRUE(tensorOutput->isInit()); sq->record>({ tensorLHS, tensorRHS, tensorOutput }); sq->record({ tensorOutput }); sq->end(); sq->eval(); } sqWeakPtr.reset(); EXPECT_EQ(tensorOutput->data(), std::vector({0, 4, 12})); } TEST(TestManager, TestCreateInitTensor) { kp::Manager mgr; std::shared_ptr tensorA = mgr.buildTensor({0,1,2}); std::shared_ptr tensorB = mgr.buildTensor({0,0,0}); mgr.evalOpDefault({tensorA, tensorB}); mgr.evalOpDefault({tensorB}); EXPECT_EQ(tensorB->data(), std::vector({0,1,2})); std::shared_ptr tensorC = mgr.buildTensor({0,0,0}, kp::Tensor::TensorTypes::eStaging); mgr.evalOpDefault({tensorA, tensorC}); EXPECT_EQ(tensorC->data(), std::vector({0,1,2})); }