#include "gtest/gtest.h" #include "kompute/Kompute.hpp" TEST(TestDestroy, TestDestroyTensorSingle) { std::shared_ptr> tensorA = nullptr; std::string shader(R"( #version 450 layout (local_size_x = 1) in; layout(set = 0, binding = 0) buffer a { float pa[]; }; void main() { uint index = gl_GlobalInvocationID.x; pa[index] = pa[index] + 1; })"); std::vector spirv = kp::Shader::compileSource(shader); { std::shared_ptr sq = nullptr; { kp::Manager mgr; tensorA = mgr.tensor({ 0, 0, 0 }); std::shared_ptr algo = mgr.algorithm({ tensorA }, spirv); mgr.sequence() ->record(algo) ->eval() ->eval(algo->getTensors()); EXPECT_EQ(tensorA->vector(), std::vector({ 1, 1, 1 })); tensorA->destroy(); EXPECT_FALSE(tensorA->isInit()); } EXPECT_FALSE(tensorA->isInit()); } } TEST(TestDestroy, TestDestroyTensorVector) { std::shared_ptr> tensorA = nullptr; std::shared_ptr> tensorB = nullptr; std::string shader(R"( #version 450 layout (local_size_x = 1) in; layout(set = 0, binding = 0) buffer a { float pa[]; }; layout(set = 0, binding = 1) buffer b { float pb[]; }; void main() { uint index = gl_GlobalInvocationID.x; pa[index] = pa[index] + 1; pb[index] = pb[index] + 2; })"); std::vector spirv = kp::Shader::compileSource(shader); { std::shared_ptr sq = nullptr; { kp::Manager mgr; tensorA = mgr.tensor({ 1, 1, 1 }); tensorB = mgr.tensor({ 1, 1, 1 }); std::shared_ptr algo = mgr.algorithm({ tensorA, tensorB }, spirv); mgr.sequence() ->record(algo->getTensors()) ->record(algo) ->record(algo->getTensors()) ->eval(); tensorA->destroy(); tensorB->destroy(); EXPECT_FALSE(tensorA->isInit()); EXPECT_FALSE(tensorB->isInit()); EXPECT_EQ(tensorA->vector(), std::vector({ 2, 2, 2 })); EXPECT_EQ(tensorB->vector(), std::vector({ 3, 3, 3 })); } } } TEST(TestDestroy, TestDestroySequenceSingle) { std::shared_ptr> tensorA = nullptr; std::string shader(R"( #version 450 layout (local_size_x = 1) in; layout(set = 0, binding = 0) buffer a { float pa[]; }; void main() { uint index = gl_GlobalInvocationID.x; pa[index] = pa[index] + 1; })"); std::vector spirv = kp::Shader::compileSource(shader); { std::shared_ptr sq = nullptr; { kp::Manager mgr; tensorA = mgr.tensor({ 0, 0, 0 }); sq = mgr.sequence() ->record({ tensorA }) ->record(mgr.algorithm({ tensorA }, spirv)) ->record({ tensorA }) ->eval(); sq->destroy(); EXPECT_FALSE(sq->isInit()); EXPECT_EQ(tensorA->vector(), std::vector({ 1, 1, 1 })); } } }