blob: d5b318d6a9381a872d17f425c049ac9b7625312c [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 <fbl/inline_array.h>
#include <fbl/algorithm.h>
#include <fbl/alloc_checker.h>
#include <lib/unittest/unittest.h>
#include <stddef.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;
bool inline_test() {
BEGIN_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(TestType::ctor_run_count, sz, "");
EXPECT_EQ(TestType::dtor_run_count, sz, "");
}
END_TEST;
}
bool non_inline_test() {
static const size_t test_sizes[] = { 4u, 5u, 6u, 10u, 100u, 1000u };
BEGIN_TEST;
for (size_t i = 0u; i < fbl::count_of(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(TestType::ctor_run_count, sz, "");
EXPECT_EQ(TestType::dtor_run_count, sz, "");
}
END_TEST;
}
} // namespace
UNITTEST_START_TESTCASE(inline_array_tests)
UNITTEST("inline test", inline_test)
UNITTEST("non-inline test", non_inline_test)
UNITTEST_END_TESTCASE(inline_array_tests, "inlinearraytests", "Inline array test");