| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <stddef.h> |
| |
| #include <iterator> |
| |
| #include <fbl/algorithm.h> |
| #include <fbl/alloc_checker.h> |
| #include <fbl/inline_array.h> |
| #include <zxtest/zxtest.h> |
| |
| namespace { |
| |
| struct TestType { |
| TestType() { ctor_run_count++; } |
| |
| ~TestType() { dtor_run_count++; } |
| |
| static void ResetRunCounts() { |
| ctor_run_count = 0u; |
| dtor_run_count = 0u; |
| } |
| |
| static size_t ctor_run_count; |
| static size_t dtor_run_count; |
| }; |
| |
| size_t TestType::ctor_run_count = 0u; |
| size_t TestType::dtor_run_count = 0u; |
| |
| TEST(InlineArrayTest, inline_test) { |
| for (size_t sz = 0u; sz <= 3u; sz++) { |
| TestType::ResetRunCounts(); |
| { |
| fbl::AllocChecker ac; |
| fbl::InlineArray<TestType, 3u> ia(&ac, sz); |
| EXPECT_TRUE(ac.check()); |
| } |
| EXPECT_EQ(sz, TestType::ctor_run_count); |
| EXPECT_EQ(sz, TestType::dtor_run_count); |
| } |
| } |
| |
| TEST(InlineArrayTest, non_inline_test) { |
| static const size_t test_sizes[] = {4u, 5u, 6u, 10u, 100u, 1000u}; |
| |
| for (size_t i = 0u; i < std::size(test_sizes); i++) { |
| size_t sz = test_sizes[i]; |
| |
| TestType::ResetRunCounts(); |
| { |
| fbl::AllocChecker ac; |
| fbl::InlineArray<TestType, 3u> ia(&ac, sz); |
| EXPECT_TRUE(ac.check()); |
| } |
| EXPECT_EQ(sz, TestType::ctor_run_count); |
| EXPECT_EQ(sz, TestType::dtor_run_count); |
| } |
| } |
| |
| } // namespace |