MCPcopy Create free account
hub / github.com/apache/tvm-ffi / TEST

Function TEST

tests/cpp/test_init_once.cc:83–150  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

81}
82
83TEST(CEnvAPI, TVMFFIHandleInitDeinitOnce) {
84 // Test 1: Successful initialization
85 void* handle = nullptr;
86 int ret = TVMFFIHandleInitOnce(&handle, InitSuccess);
87 EXPECT_EQ(ret, 0);
88 EXPECT_NE(handle, nullptr);
89 EXPECT_EQ(*static_cast<int*>(handle), 42);
90
91 // Test 2: Multiple init calls should not re-initialize (idempotent)
92 void* original_handle = handle;
93 ret = TVMFFIHandleInitOnce(&handle, InitShouldNotBeCalled);
94 EXPECT_EQ(ret, 0);
95 EXPECT_EQ(handle, original_handle); // Handle should remain unchanged
96 EXPECT_EQ(*static_cast<int*>(handle), 42); // Value should still be 42
97
98 // Test 3: Successful deinitialization
99 ret = TVMFFIHandleDeinitOnce(&handle, DeinitSuccess);
100 EXPECT_EQ(ret, 0);
101 EXPECT_EQ(handle, nullptr);
102
103 // Test 4: Multiple deinit calls should be safe (idempotent)
104 ret = TVMFFIHandleDeinitOnce(&handle, DeinitShouldNotBeCalled);
105 EXPECT_EQ(ret, 0);
106 EXPECT_EQ(handle, nullptr);
107
108 // Test 5: Init error - init_func returns error code
109 void* handle2 = nullptr;
110 ret = TVMFFIHandleInitOnce(&handle2, InitWithError);
111 EXPECT_NE(ret, 0);
112 EXPECT_EQ(handle2, nullptr);
113
114 // Test 6: Init error - init_func returns nullptr (invalid)
115 void* handle3 = nullptr;
116 ret = TVMFFIHandleInitOnce(&handle3, InitReturnsNull);
117 EXPECT_NE(ret, 0);
118 EXPECT_EQ(handle3, nullptr);
119
120 // Test 7: Deinit error - deinit_func returns error
121 void* handle4 = nullptr;
122 ret = TVMFFIHandleInitOnce(&handle4, InitForDeinitError);
123 EXPECT_EQ(ret, 0);
124 EXPECT_NE(handle4, nullptr);
125
126 ret = TVMFFIHandleDeinitOnce(&handle4, DeinitWithError);
127 EXPECT_NE(ret, 0);
128 EXPECT_EQ(handle4, nullptr); // Handle should still be set to nullptr
129
130 // Test 8: Init-deinit lifecycle
131 void* handle5 = nullptr;
132 ret = TVMFFIHandleInitOnce(&handle5, InitValue123);
133 EXPECT_EQ(ret, 0);
134 EXPECT_NE(handle5, nullptr);
135 EXPECT_EQ(*static_cast<int*>(handle5), 123);
136
137 ret = TVMFFIHandleDeinitOnce(&handle5, DeinitSuccess);
138 EXPECT_EQ(ret, 0);
139 EXPECT_EQ(handle5, nullptr);
140

Callers

nothing calls this directly

Calls 4

TVMFFIHandleInitOnceFunction · 0.85
TVMFFIHandleDeinitOnceFunction · 0.85
reserveMethod · 0.45
emplace_backMethod · 0.45

Tested by

no test coverage detected