From 02ba913dc7bb5d711471b27f2ea23a897d0f2e28 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 23 四月 2021 15:34:26 +0800
Subject: [PATCH] bind msgi to shm, change offset_ptr to abs offset.

---
 utest/api_test.cpp |   43 ++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/utest/api_test.cpp b/utest/api_test.cpp
index a91db43..200ae99 100644
--- a/utest/api_test.cpp
+++ b/utest/api_test.cpp
@@ -153,17 +153,50 @@
 	}
 	void unlock() { mutex_.unlock(); }
 };
+
+namespace
+{
+typedef int64_t Offset;
+Offset Addr(void *ptr) { return reinterpret_cast<Offset>(ptr); }
+void *Ptr(const Offset offset) { return reinterpret_cast<void *>(offset); }
+} // namespace
+
 BOOST_AUTO_TEST_CASE(MutexTest)
 {
-	const std::string shm_name("ShmMutex");
-	// ShmRemover auto_remove(shm_name);
-	SharedMemory shm(shm_name, 1024 * 1024 * 10);
+	SharedMemory &shm = TestShm();
+	MsgI::BindShm(shm);
+
+	void *base_ptr = shm.get_address();
+	auto PrintPtr = [&](void *p) {
+		printf("addr: %ld, ptr: %p, offset: %ld\n", Addr(p), p, Addr(p) - Addr(base_ptr));
+	};
+
+	printf("base");
+	PrintPtr(base_ptr);
+
+	MsgI msg;
+	msg.Make("string data");
+	for (int i = 0; i < 10; ++i) {
+		int n = msg.AddRef();
+		printf("add %d ref: %d\n", i, n);
+	}
+	for (int i = 0; i < 10; ++i) {
+		int n = msg.Release();
+		printf("release %d, ref : %d\n", i, n);
+	}
+	std::this_thread::sleep_for(1s);
+	msg.Release();
 
 	const std::string mtx_name("test_mutex");
 	const std::string int_name("test_int");
-	auto mtx = shm.find_or_construct<Mutex>(mtx_name.c_str())(3s);
-
+	auto mtx = shm.find_or_construct<Mutex>(mtx_name.c_str())();
 	auto pi = shm.find_or_construct<int>(int_name.c_str())(100);
+
+	printf("mutetx ");
+	PrintPtr(mtx);
+	printf("int ");
+	PrintPtr(pi);
+
 	typedef std::chrono::steady_clock Clock;
 	auto Now = []() { return Clock::now().time_since_epoch(); };
 	if (pi) {

--
Gitblit v1.8.0