forked from flutter/engine
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhost_buffer_unittests.cc
More file actions
79 lines (67 loc) · 1.99 KB
/
host_buffer_unittests.cc
File metadata and controls
79 lines (67 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// 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/renderer/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