2929
3030using namespace irs ;
3131
32- // Wrapper class around IResearchMemoryManager.
33- // We use it to track memory increase/decrease.
34- // To be used mostly for debugging purposes.
35- struct IResearchMemoryManagerAccessor : public irs ::IResearchMemoryManager {
32+ TEST (IResearchMemoryLimitTest, managed_allocator_smoke_test) {
3633
37- IResearchMemoryManagerAccessor () = default ;
38- virtual ~IResearchMemoryManagerAccessor () = default ;
39-
40- virtual void Increase ([[maybe_unused]] uint64_t value) override {
41-
42- // std::cout << "Increase: " << value << std::endl;
43- IResearchMemoryManager::Increase (value);
44- }
45-
46- virtual void Decrease ([[maybe_unused]] uint64_t value) noexcept override {
47- // std::cout << "Decrease: " << value << std::endl;
48- IResearchMemoryManager::Decrease (value);
49- }
50-
51- static std::shared_ptr<IResearchMemoryManagerAccessor> GetInstance () {
52- if (!_accessor)
53- _accessor.reset (new IResearchMemoryManagerAccessor ());
54-
55- return _accessor;
56- }
57-
58- static void setMemoryLimit (uint64_t limit) {
59- irs::IResearchMemoryManager::_memory_limit.store (limit);
60- }
61-
62- private:
63- static inline std::shared_ptr<IResearchMemoryManagerAccessor> _accessor;
64- };
65-
66- // An allocator using IResearchMemoryManagerAccessor
67- // so that we can track the allocations/deallocations
68- // during the test.
69- template <typename T>
70- struct ManagedTypedAllocatorTest
71- : ManagedAllocator<std::allocator<T>, IResearchMemoryManagerAccessor> {
72- using Base = ManagedAllocator<std::allocator<T>, IResearchMemoryManagerAccessor>;
73- explicit ManagedTypedAllocatorTest ()
74- : Base(
75- *IResearchMemoryManagerAccessor::GetInstance ()
76- ) {
77- }
78- using Base::Base;
79- };
80-
81- TEST (IResearch_memory_limit_test, managed_allocator_smoke_test) {
82-
83- IResearchMemoryManagerAccessor::setMemoryLimit (3 );
84- auto memoryMgr = IResearchMemoryManagerAccessor::GetInstance ();
34+ auto memoryMgr = IResearchMemoryManager::GetInstance ();
35+ memoryMgr->SetMemoryLimit (3 );
8536
8637 using type = char ;
87- std::vector<type, ManagedTypedAllocatorTest <type>> arr (*memoryMgr. get () );
38+ std::vector<type, ManagedTypedAllocator <type>> arr (*memoryMgr);
8839
8940 arr.push_back (' a' );
9041 arr.push_back (' b' );
9142 ASSERT_THROW (arr.push_back (' c' ), std::bad_alloc);
9243}
9344
94- TEST (IResearch_memory_limit_test , memory_manager_smoke_test) {
45+ TEST (IResearchMemoryLimitTest , memory_manager_smoke_test) {
9546
9647 // set limit
97- IResearchMemoryManagerAccessor::setMemoryLimit (47 );
48+ auto memoryMgr = IResearchMemoryManager::GetInstance ();
49+ memoryMgr->SetMemoryLimit (47 );
9850
9951 // allocate vector
10052 ManagedVector<uint64_t > vec;
@@ -104,7 +56,7 @@ TEST(IResearch_memory_limit_test, memory_manager_smoke_test) {
10456 ASSERT_THROW (vec.push_back (12 ), std::bad_alloc); // Allocate 32 while holding previous 16, total 48 (bad_alloc)
10557
10658 // Increase memory limit to accommodate the 3rd element.
107- IResearchMemoryManagerAccessor::setMemoryLimit (48 );
59+ memoryMgr-> SetMemoryLimit (48 );
10860
10961 ASSERT_NO_THROW (vec.push_back (12 ));
11062}
0 commit comments