www.pudn.com > allocator.rar > pool.cc
// file: test/pool.cc // author: Marc Bumble // Mon Aug 11, 2003 // Memory allocator code for shared memory access // Copyright (C) 2003 by Marc D. Bumble // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include#include // for std::ofstream to() char key_val1[] = "/allocate_key"; char key_val2[] = "/allocate_key2"; char key_addr1[] = "0x400d0000"; char key_addr2[] = "0x408d0000"; int main(int argc, char **argv) { int passed=0, failed=0; // make sure key shared memory segment is not in use // shm_unlink(key_val1); // shm_unlink(key_val2); std::cerr << "----------------------------------------" << std::endl; std::cerr << "Shared memory class test. " << std::endl; ///////////////////////////////////////////////////////////////////// ////// ////// Shared Pool and Chunk tests start here ////// ///////////////////////////////////////////////////////////////////// pooled_allocator::Pool pool_obj1; std::cerr << "\tAllocate test: 50 elements" << std::endl; mem_space::memory_index_t mem_idx1 = pool_obj1.alloc(50); // mem_idx1.print(); if (mem_idx1.get_memory_ptr() != 0) passed++; else failed++; std::cerr << "\tCopy Constructor test" << std::endl; pooled_allocator::Pool pool_obj2(pool_obj1); if (pool_obj1==pool_obj2) passed++; else failed++; std::cerr << "\tAssignment test" << std::endl; pooled_allocator::Pool pool_obj3=pool_obj1; if (pool_obj1==pool_obj3) passed++; else failed++; // std::cerr << "\tDestructor test" << std::endl; // pool_obj2.~Pool(); std::cerr << "\tAllocate test: 50 elements" << std::endl; mem_space::memory_index_t mem_idx2 = pool_obj2.alloc(50); // mem_idx2.print(); if (mem_idx2.get_memory_ptr() != 0) passed++; else failed++; std::cerr << "\tAllocate test: 4000 elements" << std::endl; mem_space::memory_index_t mem_idx3 = pool_obj2.alloc(4000); // mem_idx3.print(); if (mem_idx3.get_memory_ptr() != 0) passed++; else failed++; std::cerr << "\tAllocate test: 100 elements" << std::endl; mem_space::memory_index_t mem_idx4 = pool_obj2.alloc(100); // mem_idx4.print(); if (mem_idx4.get_memory_ptr() != 0) passed++; else failed++; std::cerr << "\tAllocate test: 30000 elements" << std::endl; mem_space::memory_index_t mem_idx5 = pool_obj1.alloc(30000); // mem_idx5.print(); if (mem_idx5.get_memory_ptr() != 0) passed++; else failed++; pool_obj1.free(static_cast (mem_idx1.get_memory_ptr()),50); pool_obj2.free(static_cast (mem_idx2.get_memory_ptr()),50); pool_obj2.free(static_cast (mem_idx3.get_memory_ptr()),4000); pool_obj2.free(static_cast (mem_idx4.get_memory_ptr()),100); pool_obj1.free(static_cast (mem_idx5.get_memory_ptr()),30000); ///////////////////////////////////////////////////////////////////// ////// ////// Shared Pooled allocator tests start here ////// ///////////////////////////////////////////////////////////////////// pooled_allocator::Pool_alloc pool_alloc_obj; int* buff1 = pool_alloc_obj.allocate(50); int* buff2 = pool_alloc_obj.allocate(30000); int* buff3 = pool_alloc_obj.allocate(100); pool_alloc_obj.deallocate(buff1,50); pool_alloc_obj.deallocate(buff2,30000); pool_alloc_obj.deallocate(buff3,100); // close out semaphore arrays. Do this after using Pool_alloc object // as Pool_alloc object does not have a shutdown method call // pool_obj1.shutdown(); // pool_obj2.shutdown(); // pooled_allocator::Pool // pool_obj4; // pool_obj4.shutdown(); std::cerr << "Passed: " << passed << std::endl; std::cerr << "Failed: " << failed << std::endl; std::cerr << "\t" << std::endl; std::cerr << "----------------------------------------" << std::endl; return 0; }