blob: 5f8d862d17f7adb431b7d1c7a1ba538eaa6e7072 [file] [log] [blame]
// 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