blob: 985c9c1af5e0de74bce9850bdc81c3bbbe748e9c [file] [log] [blame]
// Copyright 2013 The Flutter 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 "flutter/testing/testing.h"
#include "impeller/core/host_buffer.h"
namespace impeller {
namespace testing {
TEST(HostBufferTest, TestInitialization) {
ASSERT_TRUE(HostBuffer::Create());
// Newly allocated buffers don't touch the heap till they have to.
ASSERT_EQ(HostBuffer::Create()->GetLength(), 0u);
ASSERT_EQ(HostBuffer::Create()->GetReservedLength(), 0u);
}
TEST(HostBufferTest, CanEmplace) {
struct Length2 {
uint8_t pad[2];
};
static_assert(sizeof(Length2) == 2u);
auto buffer = HostBuffer::Create();
for (size_t i = 0; i < 12500; i++) {
auto view = buffer->Emplace(Length2{});
ASSERT_TRUE(view);
ASSERT_EQ(buffer->GetLength(), (i + 1) * sizeof(Length2));
ASSERT_EQ(view.range, Range(i * sizeof(Length2), 2u));
}
}
TEST(HostBufferTest, CanEmplaceWithAlignment) {
struct Length2 {
uint8_t pad[2];
};
static_assert(sizeof(Length2) == 2);
struct alignas(16) Align16 {
uint8_t pad[2];
};
static_assert(alignof(Align16) == 16);
static_assert(sizeof(Align16) == 16);
auto buffer = HostBuffer::Create();
ASSERT_TRUE(buffer);
{
auto view = buffer->Emplace(Length2{});
ASSERT_TRUE(view);
ASSERT_EQ(buffer->GetLength(), 2u);
ASSERT_EQ(view.range, Range(0u, 2u));
}
{
auto view = buffer->Emplace(Align16{});
ASSERT_TRUE(view);
ASSERT_EQ(view.range.offset, 16u);
ASSERT_EQ(view.range.length, 16u);
ASSERT_EQ(buffer->GetLength(), 32u);
}
{
auto view = buffer->Emplace(Length2{});
ASSERT_TRUE(view);
ASSERT_EQ(buffer->GetLength(), 34u);
ASSERT_EQ(view.range, Range(32u, 2u));
}
{
auto view = buffer->Emplace(Align16{});
ASSERT_TRUE(view);
ASSERT_EQ(view.range.offset, 48u);
ASSERT_EQ(view.range.length, 16u);
ASSERT_EQ(buffer->GetLength(), 64u);
}
}
} // namespace testing
} // namespace impeller