2222
2323#include " test.h"
2424#include " runtime/device/device.h"
25+ #include " runtime/gmm_helper/gmm_helper.h"
2526#include " runtime/execution_environment/execution_environment.h"
27+ #include " runtime/memory_manager/os_agnostic_memory_manager.h"
28+ #include " runtime/helpers/options.h"
2629#include " runtime/platform/platform.h"
2730
2831using namespace OCLRT ;
@@ -91,4 +94,34 @@ TEST(ExecutionEnvironment, givenDeviceWhenItIsDestroyedThenMemoryManagerIsStillA
9194 std::unique_ptr<Device> device (Device::create<OCLRT::Device>(nullptr , executionEnvironment.get ()));
9295 device.reset (nullptr );
9396 EXPECT_NE (nullptr , executionEnvironment->memoryManager );
97+ }
98+
99+ auto destructorId = 0u ;
100+ static_assert (sizeof (ExecutionEnvironment) == (is64bit ? 48 : 28 ), " New members detected in ExecutionEnvironment, please ensure that destruction sequence of objects is correct" );
101+
102+ TEST (ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDestroyedThenDeleteSequenceIsSpecified) {
103+ destructorId = 0u ;
104+ struct GmmHelperMock : public GmmHelper {
105+ using GmmHelper::GmmHelper;
106+ ~GmmHelperMock () override {
107+ EXPECT_EQ (destructorId, 1u );
108+ destructorId++;
109+ }
110+ };
111+ struct MemoryMangerMock : public OsAgnosticMemoryManager {
112+ ~MemoryMangerMock () override {
113+ EXPECT_EQ (destructorId, 0u );
114+ destructorId++;
115+ }
116+ };
117+ struct MockExecutionEnvironment : ExecutionEnvironment {
118+ using ExecutionEnvironment::gmmHelper;
119+ };
120+
121+ std::unique_ptr<MockExecutionEnvironment> executionEnvironment (new MockExecutionEnvironment);
122+ executionEnvironment->gmmHelper .reset (new GmmHelperMock (platformDevices[0 ]));
123+ executionEnvironment->memoryManager .reset (new MemoryMangerMock);
124+
125+ executionEnvironment.reset (nullptr );
126+ EXPECT_EQ (2u , destructorId);
94127}
0 commit comments