You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.1 KiB
55 lines
2.1 KiB
4 months ago
|
// Copyright 2015 The Gemmlowp Authors. All Rights Reserved.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
#include "test.h"
|
||
|
#include "../internal/allocator.h"
|
||
|
|
||
|
namespace gemmlowp {
|
||
|
|
||
|
void test_allocator(Allocator* a, int max_array_size) {
|
||
|
const std::size_t int32_array_size = Random() % max_array_size;
|
||
|
auto handle_to_int32_array = a->Reserve<std::int32_t>(int32_array_size);
|
||
|
const std::size_t int8_array_size = Random() % max_array_size;
|
||
|
auto handle_to_int8_array = a->Reserve<std::int8_t>(int8_array_size);
|
||
|
a->Commit();
|
||
|
std::int32_t* int32_array =
|
||
|
a->GetPointer<std::int32_t>(handle_to_int32_array);
|
||
|
std::int8_t* int8_array = a->GetPointer<std::int8_t>(handle_to_int8_array);
|
||
|
Check(int32_array == a->GetPointer<std::int32_t>(handle_to_int32_array));
|
||
|
Check(int8_array == a->GetPointer<std::int8_t>(handle_to_int8_array));
|
||
|
Check(
|
||
|
!(reinterpret_cast<std::uintptr_t>(int32_array) % Allocator::kAlignment));
|
||
|
Check(
|
||
|
!(reinterpret_cast<std::uintptr_t>(int8_array) % Allocator::kAlignment));
|
||
|
Check(reinterpret_cast<std::uintptr_t>(int8_array) >=
|
||
|
reinterpret_cast<std::uintptr_t>(int32_array + int32_array_size));
|
||
|
memset(int32_array, 0, sizeof(*int32_array) * int32_array_size);
|
||
|
memset(int8_array, 0, sizeof(*int8_array) * int8_array_size);
|
||
|
a->Decommit();
|
||
|
}
|
||
|
|
||
|
void test_allocator() {
|
||
|
Allocator allocator;
|
||
|
|
||
|
// Test allocating increasingly large sizes on the same allocator,
|
||
|
// starting with size 0.
|
||
|
for (int i = 1; i < 1000; i += 10) {
|
||
|
test_allocator(&allocator, i);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // namespace gemmlowp
|
||
|
|
||
|
int main() { gemmlowp::test_allocator(); }
|