| 94 | }; |
| 95 | |
| 96 | bool omp_alloc_array(void) |
| 97 | { bool ok = true; |
| 98 | using CppAD::omp_alloc; |
| 99 | size_t i; |
| 100 | |
| 101 | // check initial memory values |
| 102 | size_t thread = omp_alloc::get_thread_num(); |
| 103 | ok &= thread == 0; |
| 104 | ok &= ! CppAD::memory_leak(); |
| 105 | size_t static_inuse = omp_alloc::inuse(0); |
| 106 | |
| 107 | // initial allocation of an array |
| 108 | size_t size_min = 3; |
| 109 | size_t size_one; |
| 110 | my_char *array_one = |
| 111 | omp_alloc::create_array<my_char>(size_min, size_one); |
| 112 | |
| 113 | // check the values and change them to null 'x' |
| 114 | for(i = 0; i < size_one; i++) |
| 115 | { ok &= array_one[i].ch_ == ' '; |
| 116 | array_one[i].ch_ = 'x'; |
| 117 | } |
| 118 | |
| 119 | // now create a longer array |
| 120 | size_t size_two; |
| 121 | my_char *array_two = |
| 122 | omp_alloc::create_array<my_char>(2 * size_min, size_two); |
| 123 | |
| 124 | // check the values in array one |
| 125 | for(i = 0; i < size_one; i++) |
| 126 | ok &= array_one[i].ch_ == 'x'; |
| 127 | |
| 128 | // check the values in array two |
| 129 | for(i = 0; i < size_two; i++) |
| 130 | ok &= array_two[i].ch_ == ' '; |
| 131 | |
| 132 | // check the amount of inuse and available memory |
| 133 | // (an extra size_t value is used for each memory block). |
| 134 | size_t check = static_inuse + sizeof(my_char)*(size_one + size_two); |
| 135 | ok &= omp_alloc::inuse(thread) - check < sizeof(my_char); |
| 136 | ok &= omp_alloc::available(thread) == 0; |
| 137 | |
| 138 | // delete the arrays |
| 139 | omp_alloc::delete_array(array_one); |
| 140 | omp_alloc::delete_array(array_two); |
| 141 | ok &= omp_alloc::inuse(thread) == static_inuse; |
| 142 | check = sizeof(my_char)*(size_one + size_two); |
| 143 | ok &= omp_alloc::available(thread) - check < sizeof(my_char); |
| 144 | |
| 145 | // free the memory for use by this thread |
| 146 | omp_alloc::free_available(thread); |
| 147 | ok &= ! CppAD::memory_leak(); |
| 148 | |
| 149 | return ok; |
| 150 | } |
| 151 | } // End empty namespace |
| 152 | |
| 153 | bool omp_alloc(void) |
no test coverage detected